Skip to content
Snippets Groups Projects
memcpy.res.oracle 12.2 KiB
Newer Older
[kernel] Parsing tests/string/memcpy.c (with preprocessing)
[instantiate] tests/string/memcpy.c:36: Warning: 
  memcpy instantiator cannot replace call
[instantiate] tests/string/memcpy.c:37: Warning: 
  memcpy instantiator cannot replace call
[instantiate] tests/string/memcpy.c:42: Warning: 
  memcpy instantiator cannot replace call
[instantiate] tests/string/memcpy.c:43: Warning: 
  memcpy instantiator cannot replace call
[instantiate] tests/string/memcpy.c:47: Warning: 
  memcpy instantiator cannot replace call
[instantiate] tests/string/memcpy.c:48: Warning: 
  memcpy instantiator cannot replace call
[instantiate] tests/string/memcpy.c:49: Warning: 
  memcpy instantiator cannot replace call
[instantiate] tests/string/memcpy.c:50: Warning: 
  memcpy instantiator cannot replace call
/* Generated by Frama-C */
#include "stddef.h"
#include "string.h"
#include "strings.h"
struct X {
   int x ;
   int y ;
};
typedef int named;
/*@ requires
      separation:
        \let __fc_len = len / 4;
          \separated(dest + (0 .. __fc_len - 1), src + (0 .. __fc_len - 1));
    requires aligned_end: len % 4 ≡ 0;
    requires
      valid_dest: \let __fc_len = len / 4; \valid(dest + (0 .. __fc_len - 1));
    requires
      valid_read_src:
        \let __fc_len = len / 4; \valid_read(src + (0 .. __fc_len - 1));
    ensures
      copied:
        \let __fc_len = len / 4;
        ∀ ℤ j0; 0 ≤ j0 < __fc_len ⇒ *(dest + j0) ≡ *(src + j0);
    ensures result: \result ≡ dest;
    assigns *(dest + (0 .. len / 4 - 1)), \result;
    assigns *(dest + (0 .. len / 4 - 1)) \from *(src + (0 .. len / 4 - 1));
    assigns \result \from dest;
 */
int *memcpy_int(int *dest, int const *src, size_t len)
{
  int *__retres;
  __retres = (int *)memcpy((void *)dest,(void const *)src,len);
  return __retres;
}
void integer(int src[10], int dest[10])
  int *res = memcpy_int(dest,src,(unsigned long)10 * sizeof(int));
  memcpy_int(src,res,(unsigned long)10 * sizeof(int));
void with_named(named src[10], named dest[10])
  named *res = memcpy_int(dest,src,(unsigned long)10 * sizeof(named));
  memcpy_int(src,res,(unsigned long)10 * sizeof(named));
/*@ requires
      separation:
        \let __fc_len = len / 8;
          \separated(dest + (0 .. __fc_len - 1), src + (0 .. __fc_len - 1));
    requires aligned_end: len % 8 ≡ 0;
    requires
      valid_dest: \let __fc_len = len / 8; \valid(dest + (0 .. __fc_len - 1));
    requires
      valid_read_src:
        \let __fc_len = len / 8; \valid_read(src + (0 .. __fc_len - 1));
    ensures
      copied:
        \let __fc_len = len / 8;
        ∀ ℤ j0; 0 ≤ j0 < __fc_len ⇒ *(dest + j0) ≡ *(src + j0);
    ensures result: \result ≡ dest;
    assigns *(dest + (0 .. len / 8 - 1)), \result;
    assigns *(dest + (0 .. len / 8 - 1)) \from *(src + (0 .. len / 8 - 1));
    assigns \result \from dest;
 */
struct X *memcpy_st_X(struct X *dest, struct X const *src, size_t len)
{
  struct X *__retres;
  __retres = (struct X *)memcpy((void *)dest,(void const *)src,len);
  return __retres;
}

void structure(struct X src[10], struct X dest[10])
  struct X *res = memcpy_st_X(dest,src,(unsigned long)10 * sizeof(struct X));
  memcpy_st_X(src,res,(unsigned long)10 * sizeof(struct X));
/*@ requires
      separation:
        \let __fc_len = len / 8;
          \separated(dest + (0 .. __fc_len - 1), src + (0 .. __fc_len - 1));
    requires aligned_end: len % 8 ≡ 0;
    requires
      valid_dest: \let __fc_len = len / 8; \valid(dest + (0 .. __fc_len - 1));
    requires
      valid_read_src:
        \let __fc_len = len / 8; \valid_read(src + (0 .. __fc_len - 1));
    ensures
      copied:
        \let __fc_len = len / 8;
        ∀ ℤ j0; 0 ≤ j0 < __fc_len ⇒ *(dest + j0) ≡ *(src + j0);
    ensures result: \result ≡ dest;
    assigns *(dest + (0 .. len / 8 - 1)), \result;
    assigns *(dest + (0 .. len / 8 - 1)) \from *(src + (0 .. len / 8 - 1));
    assigns \result \from dest;
 */
int **memcpy_ptr_int(int **dest, int * const *src, size_t len)
{
  int **__retres;
  __retres = (int **)memcpy((void *)dest,(void const *)src,len);
void pointers(int *src[10], int *dest[10])
  int **res = memcpy_ptr_int(dest,src,(unsigned long)10 * sizeof(int *));
  memcpy_ptr_int(src,res,(unsigned long)10 * sizeof(int *));
/*@ requires
      separation:
        \let __fc_len = len / 40;
          \separated(dest + (0 .. __fc_len - 1), src + (0 .. __fc_len - 1));
    requires aligned_end: len % 40 ≡ 0;
    requires
      valid_dest:
        \let __fc_len = len / 40; \valid(dest + (0 .. __fc_len - 1));
    requires
      valid_read_src:
        \let __fc_len = len / 40; \valid_read(src + (0 .. __fc_len - 1));
    ensures
      copied:
        \let __fc_len = len / 40;
        ∀ ℤ j0;
          0 ≤ j0 < __fc_len ⇒
          (∀ ℤ j1;
             0 ≤ j1 < 10 ⇒ (*(dest + j0))[j1] ≡ (*(src + j0))[j1]);
    ensures result: \result ≡ dest;
    assigns (*(dest + (0 .. len / 40 - 1)))[0 .. 10 - 1], \result;
    assigns (*(dest + (0 .. len / 40 - 1)))[0 .. 10 - 1]
      \from (*(src + (0 .. len / 40 - 1)))[0 .. 10 - 1];
    assigns \result \from dest;
 */
int (*memcpy_arr10_int(int (*dest)[10], int const (*src)[10], size_t len))[10]
{
  int (*__retres)[10];
  __retres = (int (*)[10])memcpy((void *)dest,(void const *)src,len);
  return __retres;
}
void nested(int (*src)[10], int (*dest)[10], int n)
  int (*res)[10] =
    memcpy_arr10_int(dest,src,(unsigned long)n * sizeof(int [10]));
  memcpy_arr10_int(src,res,(unsigned long)n * sizeof(int [10]));
void with_void(void *src, void *dest, int n)
{
  void *res = memcpy(dest,(void const *)src,(unsigned long)n);
  memcpy(src,(void const *)res,(unsigned long)n);
void with_incomplete(struct incomplete *src, struct incomplete *dest, int n)
{
  struct incomplete *res =
    memcpy((void *)dest,(void const *)src,(unsigned long)n);
  memcpy((void *)src,(void const *)res,(unsigned long)n);
void with_null_or_int(int p[10])
  memcpy((void *)0,(void const *)p,(unsigned long)10 * sizeof(int));
  memcpy((void *)p,(void const *)0,(unsigned long)10 * sizeof(int));
  memcpy((void *)((int *)42),(void const *)p,(unsigned long)10 * sizeof(int));
  memcpy((void *)p,(void const *)((int *)42),(unsigned long)10 * sizeof(int));
[kernel] Parsing tests/string/result/ocode_memcpy.c (with preprocessing)
/* Generated by Frama-C */
#include "stddef.h"
#include "string.h"
#include "strings.h"
struct X {
   int x ;
   int y ;
};
typedef int named;
/*@ requires
      separation:
        \let __fc_len = len / 4;
          \separated(dest + (0 .. __fc_len - 1), src + (0 .. __fc_len - 1));
    requires aligned_end: len % 4 ≡ 0;
    requires
      valid_dest: \let __fc_len = len / 4; \valid(dest + (0 .. __fc_len - 1));
    requires
      valid_read_src:
        \let __fc_len = len / 4; \valid_read(src + (0 .. __fc_len - 1));
    ensures
      copied:
        \let __fc_len = \old(len) / 4;
        ∀ ℤ j0;
          0 ≤ j0 < __fc_len ⇒ *(\old(dest) + j0) ≡ *(\old(src) + j0);
    ensures result: \result ≡ \old(dest);
    assigns *(dest + (0 .. len / 4 - 1)), \result;
    assigns *(dest + (0 .. len / 4 - 1)) \from *(src + (0 .. len / 4 - 1));
    assigns \result \from dest;
 */
int *memcpy_int(int *dest, int const *src, size_t len)
{
  int *__retres;
  __retres = (int *)memcpy((void *)dest,(void const *)src,len);
  return __retres;
}
void integer(int src[10], int dest[10])
{
  int *res =
    memcpy_int(dest,(int const *)src,(unsigned long)10 * sizeof(int));
  memcpy_int(src,(int const *)res,(unsigned long)10 * sizeof(int));
void with_named(named src[10], named dest[10])
{
  named *res =
    memcpy_int(dest,(int const *)src,(unsigned long)10 * sizeof(named));
  memcpy_int(src,(int const *)res,(unsigned long)10 * sizeof(named));
/*@ requires
      separation:
        \let __fc_len = len / 8;
          \separated(dest + (0 .. __fc_len - 1), src + (0 .. __fc_len - 1));
    requires aligned_end: len % 8 ≡ 0;
    requires
      valid_dest: \let __fc_len = len / 8; \valid(dest + (0 .. __fc_len - 1));
    requires
      valid_read_src:
        \let __fc_len = len / 8; \valid_read(src + (0 .. __fc_len - 1));
    ensures
      copied:
        \let __fc_len = \old(len) / 8;
        ∀ ℤ j0;
          0 ≤ j0 < __fc_len ⇒ *(\old(dest) + j0) ≡ *(\old(src) + j0);
    ensures result: \result ≡ \old(dest);
    assigns *(dest + (0 .. len / 8 - 1)), \result;
    assigns *(dest + (0 .. len / 8 - 1)) \from *(src + (0 .. len / 8 - 1));
    assigns \result \from dest;
 */
struct X *memcpy_st_X(struct X *dest, struct X const *src, size_t len)
{
  struct X *__retres;
  __retres = (struct X *)memcpy((void *)dest,(void const *)src,len);
  return __retres;
}

void structure(struct X src[10], struct X dest[10])
{
  struct X *res =
    memcpy_st_X(dest,(struct X const *)src,
                (unsigned long)10 * sizeof(struct X));
  memcpy_st_X(src,(struct X const *)res,(unsigned long)10 * sizeof(struct X));
/*@ requires
      separation:
        \let __fc_len = len / 8;
          \separated(dest + (0 .. __fc_len - 1), src + (0 .. __fc_len - 1));
    requires aligned_end: len % 8 ≡ 0;
    requires
      valid_dest: \let __fc_len = len / 8; \valid(dest + (0 .. __fc_len - 1));
    requires
      valid_read_src:
        \let __fc_len = len / 8; \valid_read(src + (0 .. __fc_len - 1));
    ensures
      copied:
        \let __fc_len = \old(len) / 8;
        ∀ ℤ j0;
          0 ≤ j0 < __fc_len ⇒ *(\old(dest) + j0) ≡ *(\old(src) + j0);
    ensures result: \result ≡ \old(dest);
    assigns *(dest + (0 .. len / 8 - 1)), \result;
    assigns *(dest + (0 .. len / 8 - 1)) \from *(src + (0 .. len / 8 - 1));
    assigns \result \from dest;
 */
int **memcpy_ptr_int(int **dest, int * const *src, size_t len)
  int **__retres;
  __retres = (int **)memcpy((void *)dest,(void const *)src,len);
void pointers(int *src[10], int *dest[10])
{
  int **res =
    memcpy_ptr_int(dest,(int * const *)src,(unsigned long)10 * sizeof(int *));
  memcpy_ptr_int(src,(int * const *)res,(unsigned long)10 * sizeof(int *));
/*@ requires
      separation:
        \let __fc_len = len / 40;
          \separated(dest + (0 .. __fc_len - 1), src + (0 .. __fc_len - 1));
    requires aligned_end: len % 40 ≡ 0;
    requires
      valid_dest:
        \let __fc_len = len / 40; \valid(dest + (0 .. __fc_len - 1));
    requires
      valid_read_src:
        \let __fc_len = len / 40; \valid_read(src + (0 .. __fc_len - 1));
    ensures
      copied:
        \let __fc_len = \old(len) / 40;
        ∀ ℤ j0;
          0 ≤ j0 < __fc_len ⇒
          (∀ ℤ j1;
             0 ≤ j1 < 10 ⇒
             (*(\old(dest) + j0))[j1] ≡ (*(\old(src) + j0))[j1]);
    ensures result: \result ≡ \old(dest);
    assigns (*(dest + (0 .. len / 40 - 1)))[0 .. 10 - 1], \result;
    assigns (*(dest + (0 .. len / 40 - 1)))[0 .. 10 - 1]
      \from (*(src + (0 .. len / 40 - 1)))[0 .. 10 - 1];
    assigns \result \from dest;
 */
int (*memcpy_arr10_int(int (*dest)[10], int const (*src)[10], size_t len))[10]
{
  int (*__retres)[10];
  __retres = (int (*)[10])memcpy((void *)dest,(void const *)src,len);
  return __retres;
}

void nested(int (*src)[10], int (*dest)[10], int n)
  int (*res)[10] =
    memcpy_arr10_int(dest,(int const (*)[10])src,
                     (unsigned long)n * sizeof(int [10]));
  memcpy_arr10_int(src,(int const (*)[10])res,
                   (unsigned long)n * sizeof(int [10]));
void with_void(void *src, void *dest, int n)
{
  void *res = memcpy(dest,(void const *)src,(unsigned long)n);
  memcpy(src,(void const *)res,(unsigned long)n);
void with_incomplete(struct incomplete *src, struct incomplete *dest, int n)
{
  struct incomplete *res =
    memcpy((void *)dest,(void const *)src,(unsigned long)n);
  memcpy((void *)src,(void const *)res,(unsigned long)n);
void with_null_or_int(int p[10])
  memcpy((void *)0,(void const *)p,(unsigned long)10 * sizeof(int));
  memcpy((void *)p,(void const *)0,(unsigned long)10 * sizeof(int));
  memcpy((void *)((int *)42),(void const *)p,(unsigned long)10 * sizeof(int));
  memcpy((void *)p,(void const *)((int *)42),(unsigned long)10 * sizeof(int));