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;
struct incomplete;
/*@ 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;
}
int *res = memcpy_int(dest,src,(unsigned long)10 * sizeof(int));
memcpy_int(src,res,(unsigned long)10 * sizeof(int));
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));
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));
\let __fc_len = len / 8;
\separated(dest + (0 .. __fc_len - 1), src + (0 .. __fc_len - 1));
requires aligned_end: len % 8 ≡ 0;
valid_dest: \let __fc_len = len / 8; \valid(dest + (0 .. __fc_len - 1));
\let __fc_len = len / 8; \valid_read(src + (0 .. __fc_len - 1));
\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);
return __retres;
}
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)
memcpy_arr10_int(dest,src,(unsigned long)n * sizeof(int [10]));
memcpy_arr10_int(src,res,(unsigned long)n * sizeof(int [10]));
return;
}
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);
return;
}
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;
struct incomplete;
/*@ 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;
}
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])
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));
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])
(unsigned long)10 * sizeof(struct X));
memcpy_st_X(src,(struct X const *)res,(unsigned long)10 * sizeof(struct X));
\let __fc_len = len / 8;
\separated(dest + (0 .. __fc_len - 1), src + (0 .. __fc_len - 1));
requires aligned_end: len % 8 ≡ 0;
valid_dest: \let __fc_len = len / 8; \valid(dest + (0 .. __fc_len - 1));
\let __fc_len = len / 8; \valid_read(src + (0 .. __fc_len - 1));
\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);
return __retres;
}
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);
return;
}
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));