diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/freeable.c b/src/plugins/e-acsl/tests/e-acsl-runtime/freeable.c index e4d9ad5a610240c9847a396520430409cbbdc4f1..3eeb429e6f0fd2e83b2b4287d0f570bcd2630408 100644 --- a/src/plugins/e-acsl/tests/e-acsl-runtime/freeable.c +++ b/src/plugins/e-acsl/tests/e-acsl-runtime/freeable.c @@ -3,11 +3,13 @@ STDOPT: +"-val-builtin __malloc:Frama_C_alloc_size -val-builtin __free:Frama_C_free" */ -#include "stdlib.h" +#include <stdlib.h> extern void *malloc(size_t p); extern void free(void* p); +char array[1024]; + int main(void) { int *p; /*@ assert ! \freeable(p); */ @@ -17,4 +19,8 @@ int main(void) { /*@ assert \freeable(p); */ free(p); /*@ assert ! \freeable(p); */ + + // test cases for BTS #1830 + /*@ assert ! \freeable(array); */ + /*@ assert ! \freeable(&(array[5])); */ } diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/freeable.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/freeable.res.oracle index abe9c3312b1e7e0ddcf423b9bc5fcdf52edcd843..43d2f9e6c3572c8981173ec8aa4ac396950dac61 100644 --- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/freeable.res.oracle +++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/freeable.res.oracle @@ -1,11 +1,11 @@ [e-acsl] beginning translation. FRAMAC_SHARE/libc/stdlib.h:174:[e-acsl] warning: E-ACSL construct `\allocable' is not yet supported. Ignoring annotation. FRAMAC_SHARE/libc/stdlib.h:156:[e-acsl] warning: E-ACSL construct `\fresh' is not yet supported. Ignoring annotation. -tests/e-acsl-runtime/freeable.c:11:[e-acsl] warning: E-ACSL construct `complete behaviors' is not yet supported. +tests/e-acsl-runtime/freeable.c:13:[e-acsl] warning: E-ACSL construct `complete behaviors' is not yet supported. Ignoring annotation. -tests/e-acsl-runtime/freeable.c:11:[e-acsl] warning: E-ACSL construct `disjoint behaviors' is not yet supported. +tests/e-acsl-runtime/freeable.c:13:[e-acsl] warning: E-ACSL construct `disjoint behaviors' is not yet supported. Ignoring annotation. -tests/e-acsl-runtime/freeable.c:11:[e-acsl] warning: E-ACSL construct `assigns clause in behavior' is not yet supported. +tests/e-acsl-runtime/freeable.c:13:[e-acsl] warning: E-ACSL construct `assigns clause in behavior' is not yet supported. Ignoring annotation. FRAMAC_SHARE/libc/stdlib.h:160:[e-acsl] warning: E-ACSL construct `logic function application' is not yet supported. Ignoring annotation. @@ -21,5 +21,5 @@ FRAMAC_SHARE/libc/stdlib.h:177:[e-acsl] warning: E-ACSL construct `assigns claus Ignoring annotation. FRAMAC_SHARE/libc/stdlib.h:177:[e-acsl] warning: E-ACSL construct `\allocate' is not yet supported. Ignoring annotation. [e-acsl] translation done in project "e-acsl". -tests/e-acsl-runtime/freeable.c:13:[value] warning: assertion got status unknown. -tests/e-acsl-runtime/freeable.c:13:[kernel] warning: accessing uninitialized left-value. assert \initialized(&p); +tests/e-acsl-runtime/freeable.c:15:[value] warning: assertion got status unknown. +tests/e-acsl-runtime/freeable.c:15:[kernel] warning: accessing uninitialized left-value. assert \initialized(&p); diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_freeable.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_freeable.c index 533330efbb6a685ed53daaf312216e1bc5e7ccd7..e648aba7240f9e4e6947fc90e9ea2c08a09011c0 100644 --- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_freeable.c +++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_freeable.c @@ -1,9 +1,18 @@ /* Generated by Frama-C */ +char array[1024]; +void __e_acsl_globals_init(void) +{ + __store_block((void *)(array),1024UL); + __full_init((void *)(& array)); + return; +} + int main(void) { int __retres; int *p; __e_acsl_memory_init((int *)0,(char ***)0,8UL); + __e_acsl_globals_init(); __store_block((void *)(& p),8UL); /*@ assert ¬\freeable(p); */ { @@ -11,14 +20,14 @@ int main(void) /*@ assert Value: initialisation: \initialized(&p); */ __e_acsl_freeable = __freeable((void *)p); __e_acsl_assert(! __e_acsl_freeable,(char *)"Assertion",(char *)"main", - (char *)"!\\freeable(p)",13); + (char *)"!\\freeable(p)",15); } /*@ assert ¬\freeable((void *)0); */ { int __e_acsl_freeable_2; __e_acsl_freeable_2 = __freeable((void *)0); __e_acsl_assert(! __e_acsl_freeable_2,(char *)"Assertion",(char *)"main", - (char *)"!\\freeable((void *)0)",14); + (char *)"!\\freeable((void *)0)",16); } __full_init((void *)(& p)); p = (int *)__e_acsl_malloc((unsigned long)4 * sizeof(int)); @@ -27,14 +36,14 @@ int main(void) int __e_acsl_freeable_3; __e_acsl_freeable_3 = __freeable((void *)(p + 1)); __e_acsl_assert(! __e_acsl_freeable_3,(char *)"Assertion",(char *)"main", - (char *)"!\\freeable(p+1)",16); + (char *)"!\\freeable(p+1)",18); } /*@ assert \freeable(p); */ { int __e_acsl_freeable_4; __e_acsl_freeable_4 = __freeable((void *)p); __e_acsl_assert(__e_acsl_freeable_4,(char *)"Assertion",(char *)"main", - (char *)"\\freeable(p)",17); + (char *)"\\freeable(p)",19); } __e_acsl_free((void *)p); /*@ assert ¬\freeable(p); */ @@ -42,9 +51,24 @@ int main(void) int __e_acsl_freeable_5; __e_acsl_freeable_5 = __freeable((void *)p); __e_acsl_assert(! __e_acsl_freeable_5,(char *)"Assertion",(char *)"main", - (char *)"!\\freeable(p)",19); + (char *)"!\\freeable(p)",21); + } + /*@ assert ¬\freeable((char *)array); */ + { + int __e_acsl_freeable_6; + __e_acsl_freeable_6 = __freeable((void *)(array)); + __e_acsl_assert(! __e_acsl_freeable_6,(char *)"Assertion",(char *)"main", + (char *)"!\\freeable((char *)array)",24); + } + /*@ assert ¬\freeable(&array[5]); */ + { + int __e_acsl_freeable_7; + __e_acsl_freeable_7 = __freeable((void *)(& array[5])); + __e_acsl_assert(! __e_acsl_freeable_7,(char *)"Assertion",(char *)"main", + (char *)"!\\freeable(&array[5])",25); } __retres = 0; + __delete_block((void *)(array)); __delete_block((void *)(& p)); __e_acsl_memory_clean(); return __retres;