From aa5f18539cc1a3daa03c9a3758caad4d1b9c1afd Mon Sep 17 00:00:00 2001 From: Basile Desloges <basile.desloges@cea.fr> Date: Mon, 2 Aug 2021 18:21:32 +0200 Subject: [PATCH] [eacsl] Update tests --- src/plugins/e-acsl/Makefile.in | 3 +- .../tests/bts/oracle/bts2252.res.oracle | 3 - .../e-acsl/tests/bts/oracle/gen_bts2252.c | 1 + .../e-acsl/tests/builtin/oracle/gen_strcat.c | 413 ++++++-- .../e-acsl/tests/builtin/oracle/gen_strcpy.c | 272 ++++- .../builtin/oracle_dev/strcat.e-acsl.err.log | 44 +- .../builtin/oracle_dev/strcpy.e-acsl.err.log | 34 +- src/plugins/e-acsl/tests/builtin/strcat.c | 40 + src/plugins/e-acsl/tests/builtin/strcpy.c | 35 + .../e-acsl/tests/format/oracle/gen_printf.c | 29 + .../e-acsl/tests/format/oracle/gen_sprintf.c | 173 ++++ .../tests/format/oracle/printf.res.oracle | 3 - .../tests/format/oracle/sprintf.res.oracle | 20 + .../format/oracle_dev/printf.e-acsl.err.log | 170 ++-- .../format/oracle_dev/sprintf.e-acsl.err.log | 0 src/plugins/e-acsl/tests/format/sprintf.c | 34 + src/plugins/e-acsl/tests/libc/file.c | 40 + src/plugins/e-acsl/tests/libc/mem.c | 30 + .../e-acsl/tests/libc/oracle/file.res.oracle | 52 + .../e-acsl/tests/libc/oracle/gen_file.c | 434 ++++++++ .../e-acsl/tests/libc/oracle/gen_mem.c | 351 +++++++ .../e-acsl/tests/libc/oracle/gen_sprintf.c | 186 ++++ .../e-acsl/tests/libc/oracle/gen_str.c | 959 ++++++++++++++++++ .../e-acsl/tests/libc/oracle/mem.res.oracle | 45 + .../tests/libc/oracle/sprintf.res.oracle | 15 + .../e-acsl/tests/libc/oracle/str.res.oracle | 118 +++ .../tests/libc/oracle_dev/file.e-acsl.err.log | 0 .../tests/libc/oracle_dev/mem.e-acsl.err.log | 0 .../libc/oracle_dev/sprintf.e-acsl.err.log | 0 .../tests/libc/oracle_dev/str.e-acsl.err.log | 0 src/plugins/e-acsl/tests/libc/sprintf.c | 33 + src/plugins/e-acsl/tests/libc/str.c | 76 ++ .../tests/temporal/oracle/gen_t_memcpy.c | 2 + .../tests/temporal/oracle/t_memcpy.res.oracle | 6 - 34 files changed, 3370 insertions(+), 251 deletions(-) create mode 100644 src/plugins/e-acsl/tests/format/oracle/gen_sprintf.c create mode 100644 src/plugins/e-acsl/tests/format/oracle/sprintf.res.oracle create mode 100644 src/plugins/e-acsl/tests/format/oracle_dev/sprintf.e-acsl.err.log create mode 100644 src/plugins/e-acsl/tests/format/sprintf.c create mode 100644 src/plugins/e-acsl/tests/libc/file.c create mode 100644 src/plugins/e-acsl/tests/libc/mem.c create mode 100644 src/plugins/e-acsl/tests/libc/oracle/file.res.oracle create mode 100644 src/plugins/e-acsl/tests/libc/oracle/gen_file.c create mode 100644 src/plugins/e-acsl/tests/libc/oracle/gen_mem.c create mode 100644 src/plugins/e-acsl/tests/libc/oracle/gen_sprintf.c create mode 100644 src/plugins/e-acsl/tests/libc/oracle/gen_str.c create mode 100644 src/plugins/e-acsl/tests/libc/oracle/mem.res.oracle create mode 100644 src/plugins/e-acsl/tests/libc/oracle/sprintf.res.oracle create mode 100644 src/plugins/e-acsl/tests/libc/oracle/str.res.oracle create mode 100644 src/plugins/e-acsl/tests/libc/oracle_dev/file.e-acsl.err.log create mode 100644 src/plugins/e-acsl/tests/libc/oracle_dev/mem.e-acsl.err.log create mode 100644 src/plugins/e-acsl/tests/libc/oracle_dev/sprintf.e-acsl.err.log create mode 100644 src/plugins/e-acsl/tests/libc/oracle_dev/str.e-acsl.err.log create mode 100644 src/plugins/e-acsl/tests/libc/sprintf.c create mode 100644 src/plugins/e-acsl/tests/libc/str.c diff --git a/src/plugins/e-acsl/Makefile.in b/src/plugins/e-acsl/Makefile.in index aa7c8e23b76..a8a90519d28 100644 --- a/src/plugins/e-acsl/Makefile.in +++ b/src/plugins/e-acsl/Makefile.in @@ -179,7 +179,8 @@ PLUGIN_TESTS_DIRS := \ format \ temporal \ special \ - builtin + builtin \ + libc PLUGIN_TESTS_LIB := $(EACSL_PLUGIN_DIR)/tests/print.ml diff --git a/src/plugins/e-acsl/tests/bts/oracle/bts2252.res.oracle b/src/plugins/e-acsl/tests/bts/oracle/bts2252.res.oracle index d2df68cc06e..72adb373089 100644 --- a/src/plugins/e-acsl/tests/bts/oracle/bts2252.res.oracle +++ b/src/plugins/e-acsl/tests/bts/oracle/bts2252.res.oracle @@ -1,7 +1,4 @@ [e-acsl] beginning translation. -[e-acsl] Warning: annotating undefined function `strncpy': - the generated program may miss memory instrumentation - if there are memory-related annotations. [e-acsl] FRAMAC_SHARE/libc/string.h:388: Warning: E-ACSL construct `logic functions performing read accesses' is not yet supported. diff --git a/src/plugins/e-acsl/tests/bts/oracle/gen_bts2252.c b/src/plugins/e-acsl/tests/bts/oracle/gen_bts2252.c index 274ddffd5a5..d5ae3f9c191 100644 --- a/src/plugins/e-acsl/tests/bts/oracle/gen_bts2252.c +++ b/src/plugins/e-acsl/tests/bts/oracle/gen_bts2252.c @@ -163,6 +163,7 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src, __gen_e_acsl_at_2 = dest; __gen_e_acsl_at = dest; __retres = strncpy(dest,src,n); + __e_acsl_initialize((void *)dest,n); { unsigned long __gen_e_acsl_size_6; __e_acsl_mpz_t __gen_e_acsl__8; diff --git a/src/plugins/e-acsl/tests/builtin/oracle/gen_strcat.c b/src/plugins/e-acsl/tests/builtin/oracle/gen_strcat.c index 8fcaa4939fa..b26e3c1f7a7 100644 --- a/src/plugins/e-acsl/tests/builtin/oracle/gen_strcat.c +++ b/src/plugins/e-acsl/tests/builtin/oracle/gen_strcat.c @@ -30,14 +30,15 @@ char *__gen_e_acsl_literal_string_12; char *__gen_e_acsl_literal_string_11; char *__gen_e_acsl_literal_string_10; char *__gen_e_acsl_literal_string_9; -char *__gen_e_acsl_literal_string_8; +char *__gen_e_acsl_literal_string_30; +char *__gen_e_acsl_literal_string_7; char *__gen_e_acsl_literal_string_6; char *__gen_e_acsl_literal_string; char *__gen_e_acsl_literal_string_2; char *__gen_e_acsl_literal_string_3; char *__gen_e_acsl_literal_string_5; char *__gen_e_acsl_literal_string_4; -char *__gen_e_acsl_literal_string_7; +char *__gen_e_acsl_literal_string_8; extern __attribute__((__FC_BUILTIN__)) int __e_acsl_sound_verdict; /*@ exits status: \exit_status ≡ \old(status); @@ -75,6 +76,253 @@ pid_t __gen_e_acsl_waitpid(pid_t pid, int *stat_loc, int options); */ pid_t __gen_e_acsl_fork(void); +void test_memory_tracking(void) +{ + { + char dest[4]; + __e_acsl_store_block((void *)(dest),(size_t)4); + __e_acsl_builtin_strcpy(dest,__gen_e_acsl_literal_string_6); + char src[2] = {(char)'b', (char)'\000'}; + __e_acsl_store_block((void *)(src),(size_t)2); + __e_acsl_full_init((void *)(& src)); + { + int __gen_e_acsl_size; + int __gen_e_acsl_if; + int __gen_e_acsl_initialized; + __gen_e_acsl_size = 1 * ((1 - 0) + 1); + if (__gen_e_acsl_size <= 0) __gen_e_acsl_if = 0; + else __gen_e_acsl_if = __gen_e_acsl_size; + __gen_e_acsl_initialized = __e_acsl_initialized((void *)(dest + 1 * 0), + (size_t)__gen_e_acsl_if); + __e_acsl_assert(__gen_e_acsl_initialized,1,"Assertion", + "test_memory_tracking","\\initialized(&dest[0 .. 1])", + "tests/builtin/strcat.c",14); + } + /*@ assert \initialized(&dest[0 .. 1]); */ ; + { + int __gen_e_acsl_size_2; + int __gen_e_acsl_if_2; + int __gen_e_acsl_initialized_2; + __gen_e_acsl_size_2 = 1 * ((3 - 2) + 1); + if (__gen_e_acsl_size_2 <= 0) __gen_e_acsl_if_2 = 0; + else __gen_e_acsl_if_2 = __gen_e_acsl_size_2; + __gen_e_acsl_initialized_2 = __e_acsl_initialized((void *)(dest + 1 * 2), + (size_t)__gen_e_acsl_if_2); + __e_acsl_assert(! __gen_e_acsl_initialized_2,1,"Assertion", + "test_memory_tracking","!\\initialized(&dest[2 .. 3])", + "tests/builtin/strcat.c",15); + } + /*@ assert ¬\initialized(&dest[2 .. 3]); */ ; + { + int __gen_e_acsl_size_3; + int __gen_e_acsl_if_3; + int __gen_e_acsl_initialized_3; + __gen_e_acsl_size_3 = 1 * ((1 - 0) + 1); + if (__gen_e_acsl_size_3 <= 0) __gen_e_acsl_if_3 = 0; + else __gen_e_acsl_if_3 = __gen_e_acsl_size_3; + __gen_e_acsl_initialized_3 = __e_acsl_initialized((void *)(src + 1 * 0), + (size_t)__gen_e_acsl_if_3); + __e_acsl_assert(__gen_e_acsl_initialized_3,1,"Assertion", + "test_memory_tracking","\\initialized(&src[0 .. 1])", + "tests/builtin/strcat.c",16); + } + /*@ assert \initialized(&src[0 .. 1]); */ ; + __e_acsl_builtin_strcat(dest,(char const *)(src)); + { + int __gen_e_acsl_size_4; + int __gen_e_acsl_if_4; + int __gen_e_acsl_initialized_4; + __gen_e_acsl_size_4 = 1 * ((2 - 0) + 1); + if (__gen_e_acsl_size_4 <= 0) __gen_e_acsl_if_4 = 0; + else __gen_e_acsl_if_4 = __gen_e_acsl_size_4; + __gen_e_acsl_initialized_4 = __e_acsl_initialized((void *)(dest + 1 * 0), + (size_t)__gen_e_acsl_if_4); + __e_acsl_assert(__gen_e_acsl_initialized_4,1,"Assertion", + "test_memory_tracking","\\initialized(&dest[0 .. 2])", + "tests/builtin/strcat.c",19); + } + /*@ assert \initialized(&dest[0 .. 2]); */ ; + { + int __gen_e_acsl_initialized_5; + __gen_e_acsl_initialized_5 = __e_acsl_initialized((void *)(& dest[3]), + sizeof(char)); + __e_acsl_assert(! __gen_e_acsl_initialized_5,1,"Assertion", + "test_memory_tracking","!\\initialized(&dest[3])", + "tests/builtin/strcat.c",20); + } + /*@ assert ¬\initialized(&dest[3]); */ ; + __e_acsl_delete_block((void *)(src)); + __e_acsl_delete_block((void *)(dest)); + } + { + char dest_0[4]; + __e_acsl_store_block((void *)(dest_0),(size_t)4); + __e_acsl_builtin_strcpy(dest_0,__gen_e_acsl_literal_string_6); + char src_0[3] = {(char)'b', (char)'c', (char)'\000'}; + __e_acsl_store_block((void *)(src_0),(size_t)3); + __e_acsl_full_init((void *)(& src_0)); + { + int __gen_e_acsl_size_5; + int __gen_e_acsl_if_5; + int __gen_e_acsl_initialized_6; + __gen_e_acsl_size_5 = 1 * ((1 - 0) + 1); + if (__gen_e_acsl_size_5 <= 0) __gen_e_acsl_if_5 = 0; + else __gen_e_acsl_if_5 = __gen_e_acsl_size_5; + __gen_e_acsl_initialized_6 = __e_acsl_initialized((void *)(dest_0 + + 1 * 0), + (size_t)__gen_e_acsl_if_5); + __e_acsl_assert(__gen_e_acsl_initialized_6,1,"Assertion", + "test_memory_tracking", + "\\initialized(&dest_0[0 .. 1])", + "tests/builtin/strcat.c",26); + } + /*@ assert \initialized(&dest_0[0 .. 1]); */ ; + { + int __gen_e_acsl_size_6; + int __gen_e_acsl_if_6; + int __gen_e_acsl_initialized_7; + __gen_e_acsl_size_6 = 1 * ((3 - 2) + 1); + if (__gen_e_acsl_size_6 <= 0) __gen_e_acsl_if_6 = 0; + else __gen_e_acsl_if_6 = __gen_e_acsl_size_6; + __gen_e_acsl_initialized_7 = __e_acsl_initialized((void *)(dest_0 + + 1 * 2), + (size_t)__gen_e_acsl_if_6); + __e_acsl_assert(! __gen_e_acsl_initialized_7,1,"Assertion", + "test_memory_tracking", + "!\\initialized(&dest_0[2 .. 3])", + "tests/builtin/strcat.c",27); + } + /*@ assert ¬\initialized(&dest_0[2 .. 3]); */ ; + { + int __gen_e_acsl_size_7; + int __gen_e_acsl_if_7; + int __gen_e_acsl_initialized_8; + __gen_e_acsl_size_7 = 1 * ((2 - 0) + 1); + if (__gen_e_acsl_size_7 <= 0) __gen_e_acsl_if_7 = 0; + else __gen_e_acsl_if_7 = __gen_e_acsl_size_7; + __gen_e_acsl_initialized_8 = __e_acsl_initialized((void *)(src_0 + + 1 * 0), + (size_t)__gen_e_acsl_if_7); + __e_acsl_assert(__gen_e_acsl_initialized_8,1,"Assertion", + "test_memory_tracking","\\initialized(&src_0[0 .. 2])", + "tests/builtin/strcat.c",28); + } + /*@ assert \initialized(&src_0[0 .. 2]); */ ; + __e_acsl_builtin_strncat(dest_0,(char const *)(src_0),(unsigned long)1); + { + int __gen_e_acsl_size_8; + int __gen_e_acsl_if_8; + int __gen_e_acsl_initialized_9; + __gen_e_acsl_size_8 = 1 * ((2 - 0) + 1); + if (__gen_e_acsl_size_8 <= 0) __gen_e_acsl_if_8 = 0; + else __gen_e_acsl_if_8 = __gen_e_acsl_size_8; + __gen_e_acsl_initialized_9 = __e_acsl_initialized((void *)(dest_0 + + 1 * 0), + (size_t)__gen_e_acsl_if_8); + __e_acsl_assert(__gen_e_acsl_initialized_9,1,"Assertion", + "test_memory_tracking", + "\\initialized(&dest_0[0 .. 2])", + "tests/builtin/strcat.c",31); + } + /*@ assert \initialized(&dest_0[0 .. 2]); */ ; + { + int __gen_e_acsl_initialized_10; + __gen_e_acsl_initialized_10 = __e_acsl_initialized((void *)(& dest_0[3]), + sizeof(char)); + __e_acsl_assert(! __gen_e_acsl_initialized_10,1,"Assertion", + "test_memory_tracking","!\\initialized(&dest_0[3])", + "tests/builtin/strcat.c",32); + } + /*@ assert ¬\initialized(&dest_0[3]); */ ; + __e_acsl_delete_block((void *)(src_0)); + __e_acsl_delete_block((void *)(dest_0)); + } + { + char dest_1[4]; + __e_acsl_store_block((void *)(dest_1),(size_t)4); + __e_acsl_builtin_strcpy(dest_1,__gen_e_acsl_literal_string_6); + char src_1[2] = {(char)'b', (char)'\000'}; + __e_acsl_store_block((void *)(src_1),(size_t)2); + __e_acsl_full_init((void *)(& src_1)); + { + int __gen_e_acsl_size_9; + int __gen_e_acsl_if_9; + int __gen_e_acsl_initialized_11; + __gen_e_acsl_size_9 = 1 * ((1 - 0) + 1); + if (__gen_e_acsl_size_9 <= 0) __gen_e_acsl_if_9 = 0; + else __gen_e_acsl_if_9 = __gen_e_acsl_size_9; + __gen_e_acsl_initialized_11 = __e_acsl_initialized((void *)(dest_1 + + 1 * 0), + (size_t)__gen_e_acsl_if_9); + __e_acsl_assert(__gen_e_acsl_initialized_11,1,"Assertion", + "test_memory_tracking", + "\\initialized(&dest_1[0 .. 1])", + "tests/builtin/strcat.c",38); + } + /*@ assert \initialized(&dest_1[0 .. 1]); */ ; + { + int __gen_e_acsl_size_10; + int __gen_e_acsl_if_10; + int __gen_e_acsl_initialized_12; + __gen_e_acsl_size_10 = 1 * ((3 - 2) + 1); + if (__gen_e_acsl_size_10 <= 0) __gen_e_acsl_if_10 = 0; + else __gen_e_acsl_if_10 = __gen_e_acsl_size_10; + __gen_e_acsl_initialized_12 = __e_acsl_initialized((void *)(dest_1 + + 1 * 2), + (size_t)__gen_e_acsl_if_10); + __e_acsl_assert(! __gen_e_acsl_initialized_12,1,"Assertion", + "test_memory_tracking", + "!\\initialized(&dest_1[2 .. 3])", + "tests/builtin/strcat.c",39); + } + /*@ assert ¬\initialized(&dest_1[2 .. 3]); */ ; + { + int __gen_e_acsl_size_11; + int __gen_e_acsl_if_11; + int __gen_e_acsl_initialized_13; + __gen_e_acsl_size_11 = 1 * ((1 - 0) + 1); + if (__gen_e_acsl_size_11 <= 0) __gen_e_acsl_if_11 = 0; + else __gen_e_acsl_if_11 = __gen_e_acsl_size_11; + __gen_e_acsl_initialized_13 = __e_acsl_initialized((void *)(src_1 + + 1 * 0), + (size_t)__gen_e_acsl_if_11); + __e_acsl_assert(__gen_e_acsl_initialized_13,1,"Assertion", + "test_memory_tracking","\\initialized(&src_1[0 .. 1])", + "tests/builtin/strcat.c",40); + } + /*@ assert \initialized(&src_1[0 .. 1]); */ ; + __e_acsl_builtin_strncat(dest_1,(char const *)(src_1),(unsigned long)2); + { + int __gen_e_acsl_size_12; + int __gen_e_acsl_if_12; + int __gen_e_acsl_initialized_14; + __gen_e_acsl_size_12 = 1 * ((2 - 0) + 1); + if (__gen_e_acsl_size_12 <= 0) __gen_e_acsl_if_12 = 0; + else __gen_e_acsl_if_12 = __gen_e_acsl_size_12; + __gen_e_acsl_initialized_14 = __e_acsl_initialized((void *)(dest_1 + + 1 * 0), + (size_t)__gen_e_acsl_if_12); + __e_acsl_assert(__gen_e_acsl_initialized_14,1,"Assertion", + "test_memory_tracking", + "\\initialized(&dest_1[0 .. 2])", + "tests/builtin/strcat.c",43); + } + /*@ assert \initialized(&dest_1[0 .. 2]); */ ; + { + int __gen_e_acsl_initialized_15; + __gen_e_acsl_initialized_15 = __e_acsl_initialized((void *)(& dest_1[3]), + sizeof(char)); + __e_acsl_assert(! __gen_e_acsl_initialized_15,1,"Assertion", + "test_memory_tracking","!\\initialized(&dest_1[3])", + "tests/builtin/strcat.c",44); + } + /*@ assert ¬\initialized(&dest_1[3]); */ ; + __e_acsl_delete_block((void *)(src_1)); + __e_acsl_delete_block((void *)(dest_1)); + } + return; +} + /*@ ensures result_ok_child_or_error: \result ≡ 0 ∨ \result > 0 ∨ \result ≡ -1; @@ -191,119 +439,123 @@ void __e_acsl_globals_init(void) static char __e_acsl_already_run = 0; if (! __e_acsl_already_run) { __e_acsl_already_run = 1; - __gen_e_acsl_literal_string_29 = "tests/builtin/strcat.c:61"; + __gen_e_acsl_literal_string_29 = "tests/builtin/strcat.c:99"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_29, - sizeof("tests/builtin/strcat.c:61")); + sizeof("tests/builtin/strcat.c:99")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_29); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_29); - __gen_e_acsl_literal_string_28 = "tests/builtin/strcat.c:60"; + __gen_e_acsl_literal_string_28 = "tests/builtin/strcat.c:98"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_28, - sizeof("tests/builtin/strcat.c:60")); + sizeof("tests/builtin/strcat.c:98")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_28); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_28); - __gen_e_acsl_literal_string_27 = "tests/builtin/strcat.c:59"; + __gen_e_acsl_literal_string_27 = "tests/builtin/strcat.c:96"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_27, - sizeof("tests/builtin/strcat.c:59")); + sizeof("tests/builtin/strcat.c:96")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_27); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_27); - __gen_e_acsl_literal_string_26 = "tests/builtin/strcat.c:57"; + __gen_e_acsl_literal_string_26 = "tests/builtin/strcat.c:95"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_26, - sizeof("tests/builtin/strcat.c:57")); + sizeof("tests/builtin/strcat.c:95")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_26); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_26); - __gen_e_acsl_literal_string_25 = "tests/builtin/strcat.c:56"; + __gen_e_acsl_literal_string_25 = "tests/builtin/strcat.c:94"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_25, - sizeof("tests/builtin/strcat.c:56")); + sizeof("tests/builtin/strcat.c:94")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_25); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_25); - __gen_e_acsl_literal_string_24 = "tests/builtin/strcat.c:55"; + __gen_e_acsl_literal_string_24 = "tests/builtin/strcat.c:93"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_24, - sizeof("tests/builtin/strcat.c:55")); + sizeof("tests/builtin/strcat.c:93")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_24); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_24); - __gen_e_acsl_literal_string_23 = "tests/builtin/strcat.c:54"; + __gen_e_acsl_literal_string_23 = "tests/builtin/strcat.c:92"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_23, - sizeof("tests/builtin/strcat.c:54")); + sizeof("tests/builtin/strcat.c:92")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_23); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_23); - __gen_e_acsl_literal_string_22 = "tests/builtin/strcat.c:53"; + __gen_e_acsl_literal_string_22 = "tests/builtin/strcat.c:91"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_22, - sizeof("tests/builtin/strcat.c:53")); + sizeof("tests/builtin/strcat.c:91")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_22); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_22); - __gen_e_acsl_literal_string_21 = "tests/builtin/strcat.c:52"; + __gen_e_acsl_literal_string_21 = "tests/builtin/strcat.c:90"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_21, - sizeof("tests/builtin/strcat.c:52")); + sizeof("tests/builtin/strcat.c:90")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_21); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_21); - __gen_e_acsl_literal_string_20 = "tests/builtin/strcat.c:51"; + __gen_e_acsl_literal_string_20 = "tests/builtin/strcat.c:77"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_20, - sizeof("tests/builtin/strcat.c:51")); + sizeof("tests/builtin/strcat.c:77")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_20); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_20); - __gen_e_acsl_literal_string_19 = "tests/builtin/strcat.c:38"; + __gen_e_acsl_literal_string_19 = "tests/builtin/strcat.c:76"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_19, - sizeof("tests/builtin/strcat.c:38")); + sizeof("tests/builtin/strcat.c:76")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_19); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_19); - __gen_e_acsl_literal_string_18 = "tests/builtin/strcat.c:37"; + __gen_e_acsl_literal_string_18 = "tests/builtin/strcat.c:75"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_18, - sizeof("tests/builtin/strcat.c:37")); + sizeof("tests/builtin/strcat.c:75")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_18); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_18); - __gen_e_acsl_literal_string_17 = "tests/builtin/strcat.c:36"; + __gen_e_acsl_literal_string_17 = "tests/builtin/strcat.c:74"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_17, - sizeof("tests/builtin/strcat.c:36")); + sizeof("tests/builtin/strcat.c:74")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_17); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_17); - __gen_e_acsl_literal_string_16 = "tests/builtin/strcat.c:35"; + __gen_e_acsl_literal_string_16 = "tests/builtin/strcat.c:73"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_16, - sizeof("tests/builtin/strcat.c:35")); + sizeof("tests/builtin/strcat.c:73")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_16); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_16); - __gen_e_acsl_literal_string_15 = "tests/builtin/strcat.c:34"; + __gen_e_acsl_literal_string_15 = "tests/builtin/strcat.c:72"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_15, - sizeof("tests/builtin/strcat.c:34")); + sizeof("tests/builtin/strcat.c:72")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_15); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_15); - __gen_e_acsl_literal_string_14 = "tests/builtin/strcat.c:33"; + __gen_e_acsl_literal_string_14 = "tests/builtin/strcat.c:71"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_14, - sizeof("tests/builtin/strcat.c:33")); + sizeof("tests/builtin/strcat.c:71")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_14); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_14); - __gen_e_acsl_literal_string_13 = "tests/builtin/strcat.c:32"; + __gen_e_acsl_literal_string_13 = "tests/builtin/strcat.c:70"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_13, - sizeof("tests/builtin/strcat.c:32")); + sizeof("tests/builtin/strcat.c:70")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_13); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_13); - __gen_e_acsl_literal_string_12 = "tests/builtin/strcat.c:31"; + __gen_e_acsl_literal_string_12 = "tests/builtin/strcat.c:69"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_12, - sizeof("tests/builtin/strcat.c:31")); + sizeof("tests/builtin/strcat.c:69")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_12); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_12); - __gen_e_acsl_literal_string_11 = "tests/builtin/strcat.c:30"; + __gen_e_acsl_literal_string_11 = "tests/builtin/strcat.c:68"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_11, - sizeof("tests/builtin/strcat.c:30")); + sizeof("tests/builtin/strcat.c:68")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_11); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_11); - __gen_e_acsl_literal_string_10 = "tests/builtin/strcat.c:29"; + __gen_e_acsl_literal_string_10 = "tests/builtin/strcat.c:67"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_10, - sizeof("tests/builtin/strcat.c:29")); + sizeof("tests/builtin/strcat.c:67")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_10); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_10); - __gen_e_acsl_literal_string_9 = "tests/builtin/strcat.c:28"; + __gen_e_acsl_literal_string_9 = "tests/builtin/strcat.c:66"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_9, - sizeof("tests/builtin/strcat.c:28")); + sizeof("tests/builtin/strcat.c:66")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_9); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_9); - __gen_e_acsl_literal_string_8 = "tests/builtin/strcat.c:27"; - __e_acsl_store_block((void *)__gen_e_acsl_literal_string_8, - sizeof("tests/builtin/strcat.c:27")); - __e_acsl_full_init((void *)__gen_e_acsl_literal_string_8); - __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_8); - __gen_e_acsl_literal_string_6 = "abcd"; - __e_acsl_store_block((void *)__gen_e_acsl_literal_string_6, + __gen_e_acsl_literal_string_30 = "tests/builtin/strcat.c:100"; + __e_acsl_store_block((void *)__gen_e_acsl_literal_string_30, + sizeof("tests/builtin/strcat.c:100")); + __e_acsl_full_init((void *)__gen_e_acsl_literal_string_30); + __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_30); + __gen_e_acsl_literal_string_7 = "abcd"; + __e_acsl_store_block((void *)__gen_e_acsl_literal_string_7, sizeof("abcd")); + __e_acsl_full_init((void *)__gen_e_acsl_literal_string_7); + __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_7); + __gen_e_acsl_literal_string_6 = "a"; + __e_acsl_store_block((void *)__gen_e_acsl_literal_string_6,sizeof("a")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_6); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_6); __gen_e_acsl_literal_string = "TEST %d: "; @@ -331,10 +583,10 @@ void __e_acsl_globals_init(void) sizeof("FAIL: Unexpected execution at %s\n")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_4); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_4); - __gen_e_acsl_literal_string_7 = ""; - __e_acsl_store_block((void *)__gen_e_acsl_literal_string_7,sizeof("")); - __e_acsl_full_init((void *)__gen_e_acsl_literal_string_7); - __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_7); + __gen_e_acsl_literal_string_8 = ""; + __e_acsl_store_block((void *)__gen_e_acsl_literal_string_8,sizeof("")); + __e_acsl_full_init((void *)__gen_e_acsl_literal_string_8); + __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_8); } return; } @@ -344,10 +596,10 @@ int main(int argc, char const **argv) int __retres; __e_acsl_memory_init(& argc,(char ***)(& argv),(size_t)8); __e_acsl_globals_init(); - char *const_str = (char *)__gen_e_acsl_literal_string_6; + char *const_str = (char *)__gen_e_acsl_literal_string_7; char *unalloc_str = malloc((unsigned long)5); char *_barrier = malloc((unsigned long)1); - char *empty_str = (char *)__gen_e_acsl_literal_string_7; + char *empty_str = (char *)__gen_e_acsl_literal_string_8; free((void *)unalloc_str); { char dest1[9] = @@ -388,7 +640,7 @@ int main(int argc, char const **argv) int process_status; __e_acsl_store_block((void *)(& process_status),(size_t)4); __gen_e_acsl_waitpid(pid,& process_status,0); - signal_eval(process_status,0,__gen_e_acsl_literal_string_8); + signal_eval(process_status,0,__gen_e_acsl_literal_string_9); __e_acsl_delete_block((void *)(& process_status)); } } @@ -402,7 +654,7 @@ int main(int argc, char const **argv) int process_status_0; __e_acsl_store_block((void *)(& process_status_0),(size_t)4); __gen_e_acsl_waitpid(pid_0,& process_status_0,0); - signal_eval(process_status_0,0,__gen_e_acsl_literal_string_9); + signal_eval(process_status_0,0,__gen_e_acsl_literal_string_10); __e_acsl_delete_block((void *)(& process_status_0)); } } @@ -416,7 +668,7 @@ int main(int argc, char const **argv) int process_status_1; __e_acsl_store_block((void *)(& process_status_1),(size_t)4); __gen_e_acsl_waitpid(pid_1,& process_status_1,0); - signal_eval(process_status_1,1,__gen_e_acsl_literal_string_10); + signal_eval(process_status_1,1,__gen_e_acsl_literal_string_11); __e_acsl_delete_block((void *)(& process_status_1)); } } @@ -430,7 +682,7 @@ int main(int argc, char const **argv) int process_status_2; __e_acsl_store_block((void *)(& process_status_2),(size_t)4); __gen_e_acsl_waitpid(pid_2,& process_status_2,0); - signal_eval(process_status_2,1,__gen_e_acsl_literal_string_11); + signal_eval(process_status_2,1,__gen_e_acsl_literal_string_12); __e_acsl_delete_block((void *)(& process_status_2)); } } @@ -444,21 +696,21 @@ int main(int argc, char const **argv) int process_status_3; __e_acsl_store_block((void *)(& process_status_3),(size_t)4); __gen_e_acsl_waitpid(pid_3,& process_status_3,0); - signal_eval(process_status_3,1,__gen_e_acsl_literal_string_12); + signal_eval(process_status_3,1,__gen_e_acsl_literal_string_13); __e_acsl_delete_block((void *)(& process_status_3)); } } { pid_t pid_4 = __gen_e_acsl_fork(); if (! pid_4) { - __e_acsl_builtin_strcat((char *)0,__gen_e_acsl_literal_string_7); + __e_acsl_builtin_strcat((char *)0,__gen_e_acsl_literal_string_8); __gen_e_acsl_exit(0); } else { int process_status_4; __e_acsl_store_block((void *)(& process_status_4),(size_t)4); __gen_e_acsl_waitpid(pid_4,& process_status_4,0); - signal_eval(process_status_4,1,__gen_e_acsl_literal_string_13); + signal_eval(process_status_4,1,__gen_e_acsl_literal_string_14); __e_acsl_delete_block((void *)(& process_status_4)); } } @@ -472,7 +724,7 @@ int main(int argc, char const **argv) int process_status_5; __e_acsl_store_block((void *)(& process_status_5),(size_t)4); __gen_e_acsl_waitpid(pid_5,& process_status_5,0); - signal_eval(process_status_5,1,__gen_e_acsl_literal_string_14); + signal_eval(process_status_5,1,__gen_e_acsl_literal_string_15); __e_acsl_delete_block((void *)(& process_status_5)); } } @@ -486,7 +738,7 @@ int main(int argc, char const **argv) int process_status_6; __e_acsl_store_block((void *)(& process_status_6),(size_t)4); __gen_e_acsl_waitpid(pid_6,& process_status_6,0); - signal_eval(process_status_6,1,__gen_e_acsl_literal_string_15); + signal_eval(process_status_6,1,__gen_e_acsl_literal_string_16); __e_acsl_delete_block((void *)(& process_status_6)); } } @@ -500,7 +752,7 @@ int main(int argc, char const **argv) int process_status_7; __e_acsl_store_block((void *)(& process_status_7),(size_t)4); __gen_e_acsl_waitpid(pid_7,& process_status_7,0); - signal_eval(process_status_7,1,__gen_e_acsl_literal_string_16); + signal_eval(process_status_7,1,__gen_e_acsl_literal_string_17); __e_acsl_delete_block((void *)(& process_status_7)); } } @@ -514,7 +766,7 @@ int main(int argc, char const **argv) int process_status_8; __e_acsl_store_block((void *)(& process_status_8),(size_t)4); __gen_e_acsl_waitpid(pid_8,& process_status_8,0); - signal_eval(process_status_8,1,__gen_e_acsl_literal_string_17); + signal_eval(process_status_8,1,__gen_e_acsl_literal_string_18); __e_acsl_delete_block((void *)(& process_status_8)); } } @@ -528,7 +780,7 @@ int main(int argc, char const **argv) int process_status_9; __e_acsl_store_block((void *)(& process_status_9),(size_t)4); __gen_e_acsl_waitpid(pid_9,& process_status_9,0); - signal_eval(process_status_9,1,__gen_e_acsl_literal_string_18); + signal_eval(process_status_9,1,__gen_e_acsl_literal_string_19); __e_acsl_delete_block((void *)(& process_status_9)); } } @@ -544,7 +796,7 @@ int main(int argc, char const **argv) int process_status_10; __e_acsl_store_block((void *)(& process_status_10),(size_t)4); __gen_e_acsl_waitpid(pid_10,& process_status_10,0); - signal_eval(process_status_10,0,__gen_e_acsl_literal_string_19); + signal_eval(process_status_10,0,__gen_e_acsl_literal_string_20); __e_acsl_delete_block((void *)(& process_status_10)); } __e_acsl_delete_block((void *)(& pd4)); @@ -597,7 +849,7 @@ int main(int argc, char const **argv) int process_status_11; __e_acsl_store_block((void *)(& process_status_11),(size_t)4); __gen_e_acsl_waitpid(pid_11,& process_status_11,0); - signal_eval(process_status_11,0,__gen_e_acsl_literal_string_20); + signal_eval(process_status_11,0,__gen_e_acsl_literal_string_21); __e_acsl_delete_block((void *)(& process_status_11)); } } @@ -612,7 +864,7 @@ int main(int argc, char const **argv) int process_status_12; __e_acsl_store_block((void *)(& process_status_12),(size_t)4); __gen_e_acsl_waitpid(pid_12,& process_status_12,0); - signal_eval(process_status_12,1,__gen_e_acsl_literal_string_21); + signal_eval(process_status_12,1,__gen_e_acsl_literal_string_22); __e_acsl_delete_block((void *)(& process_status_12)); } } @@ -627,7 +879,7 @@ int main(int argc, char const **argv) int process_status_13; __e_acsl_store_block((void *)(& process_status_13),(size_t)4); __gen_e_acsl_waitpid(pid_13,& process_status_13,0); - signal_eval(process_status_13,1,__gen_e_acsl_literal_string_22); + signal_eval(process_status_13,1,__gen_e_acsl_literal_string_23); __e_acsl_delete_block((void *)(& process_status_13)); } } @@ -642,7 +894,7 @@ int main(int argc, char const **argv) int process_status_14; __e_acsl_store_block((void *)(& process_status_14),(size_t)4); __gen_e_acsl_waitpid(pid_14,& process_status_14,0); - signal_eval(process_status_14,1,__gen_e_acsl_literal_string_23); + signal_eval(process_status_14,1,__gen_e_acsl_literal_string_24); __e_acsl_delete_block((void *)(& process_status_14)); } } @@ -657,7 +909,7 @@ int main(int argc, char const **argv) int process_status_15; __e_acsl_store_block((void *)(& process_status_15),(size_t)4); __gen_e_acsl_waitpid(pid_15,& process_status_15,0); - signal_eval(process_status_15,1,__gen_e_acsl_literal_string_24); + signal_eval(process_status_15,1,__gen_e_acsl_literal_string_25); __e_acsl_delete_block((void *)(& process_status_15)); } } @@ -671,7 +923,7 @@ int main(int argc, char const **argv) int process_status_16; __e_acsl_store_block((void *)(& process_status_16),(size_t)4); __gen_e_acsl_waitpid(pid_16,& process_status_16,0); - signal_eval(process_status_16,1,__gen_e_acsl_literal_string_25); + signal_eval(process_status_16,1,__gen_e_acsl_literal_string_26); __e_acsl_delete_block((void *)(& process_status_16)); } } @@ -686,7 +938,7 @@ int main(int argc, char const **argv) int process_status_17; __e_acsl_store_block((void *)(& process_status_17),(size_t)4); __gen_e_acsl_waitpid(pid_17,& process_status_17,0); - signal_eval(process_status_17,1,__gen_e_acsl_literal_string_26); + signal_eval(process_status_17,1,__gen_e_acsl_literal_string_27); __e_acsl_delete_block((void *)(& process_status_17)); } } @@ -700,7 +952,7 @@ int main(int argc, char const **argv) int process_status_18; __e_acsl_store_block((void *)(& process_status_18),(size_t)4); __gen_e_acsl_waitpid(pid_18,& process_status_18,0); - signal_eval(process_status_18,1,__gen_e_acsl_literal_string_27); + signal_eval(process_status_18,1,__gen_e_acsl_literal_string_28); __e_acsl_delete_block((void *)(& process_status_18)); } } @@ -715,7 +967,7 @@ int main(int argc, char const **argv) int process_status_19; __e_acsl_store_block((void *)(& process_status_19),(size_t)4); __gen_e_acsl_waitpid(pid_19,& process_status_19,0); - signal_eval(process_status_19,1,__gen_e_acsl_literal_string_28); + signal_eval(process_status_19,1,__gen_e_acsl_literal_string_29); __e_acsl_delete_block((void *)(& process_status_19)); } } @@ -730,7 +982,7 @@ int main(int argc, char const **argv) int process_status_20; __e_acsl_store_block((void *)(& process_status_20),(size_t)4); __gen_e_acsl_waitpid(pid_20,& process_status_20,0); - signal_eval(process_status_20,1,__gen_e_acsl_literal_string_29); + signal_eval(process_status_20,1,__gen_e_acsl_literal_string_30); __e_acsl_delete_block((void *)(& process_status_20)); } __e_acsl_delete_block((void *)(& pd4_0)); @@ -743,6 +995,7 @@ int main(int argc, char const **argv) __e_acsl_delete_block((void *)(dest1_0)); } } + test_memory_tracking(); __retres = 0; __e_acsl_memory_clean(); return __retres; diff --git a/src/plugins/e-acsl/tests/builtin/oracle/gen_strcpy.c b/src/plugins/e-acsl/tests/builtin/oracle/gen_strcpy.c index 09d7c8aff99..a43aa68428e 100644 --- a/src/plugins/e-acsl/tests/builtin/oracle/gen_strcpy.c +++ b/src/plugins/e-acsl/tests/builtin/oracle/gen_strcpy.c @@ -98,6 +98,209 @@ pid_t __gen_e_acsl_fork(void); */ char *__gen_e_acsl_strdup(char const *s); +void test_memory_tracking(void) +{ + { + char dest[4]; + __e_acsl_store_block((void *)(dest),(size_t)4); + char src[2] = {(char)'b', (char)'\000'}; + __e_acsl_store_block((void *)(src),(size_t)2); + __e_acsl_full_init((void *)(& src)); + { + int __gen_e_acsl_size; + int __gen_e_acsl_if; + int __gen_e_acsl_initialized; + __gen_e_acsl_size = 1 * ((3 - 0) + 1); + if (__gen_e_acsl_size <= 0) __gen_e_acsl_if = 0; + else __gen_e_acsl_if = __gen_e_acsl_size; + __gen_e_acsl_initialized = __e_acsl_initialized((void *)(dest + 1 * 0), + (size_t)__gen_e_acsl_if); + __e_acsl_assert(! __gen_e_acsl_initialized,1,"Assertion", + "test_memory_tracking","!\\initialized(&dest[0 .. 3])", + "tests/builtin/strcpy.c",13); + } + /*@ assert ¬\initialized(&dest[0 .. 3]); */ ; + { + int __gen_e_acsl_size_2; + int __gen_e_acsl_if_2; + int __gen_e_acsl_initialized_2; + __gen_e_acsl_size_2 = 1 * ((1 - 0) + 1); + if (__gen_e_acsl_size_2 <= 0) __gen_e_acsl_if_2 = 0; + else __gen_e_acsl_if_2 = __gen_e_acsl_size_2; + __gen_e_acsl_initialized_2 = __e_acsl_initialized((void *)(src + 1 * 0), + (size_t)__gen_e_acsl_if_2); + __e_acsl_assert(__gen_e_acsl_initialized_2,1,"Assertion", + "test_memory_tracking","\\initialized(&src[0 .. 1])", + "tests/builtin/strcpy.c",14); + } + /*@ assert \initialized(&src[0 .. 1]); */ ; + __e_acsl_builtin_strcpy(dest,(char const *)(src)); + { + int __gen_e_acsl_size_3; + int __gen_e_acsl_if_3; + int __gen_e_acsl_initialized_3; + __gen_e_acsl_size_3 = 1 * ((1 - 0) + 1); + if (__gen_e_acsl_size_3 <= 0) __gen_e_acsl_if_3 = 0; + else __gen_e_acsl_if_3 = __gen_e_acsl_size_3; + __gen_e_acsl_initialized_3 = __e_acsl_initialized((void *)(dest + 1 * 0), + (size_t)__gen_e_acsl_if_3); + __e_acsl_assert(__gen_e_acsl_initialized_3,1,"Assertion", + "test_memory_tracking","\\initialized(&dest[0 .. 1])", + "tests/builtin/strcpy.c",17); + } + /*@ assert \initialized(&dest[0 .. 1]); */ ; + { + int __gen_e_acsl_size_4; + int __gen_e_acsl_if_4; + int __gen_e_acsl_initialized_4; + __gen_e_acsl_size_4 = 1 * ((3 - 2) + 1); + if (__gen_e_acsl_size_4 <= 0) __gen_e_acsl_if_4 = 0; + else __gen_e_acsl_if_4 = __gen_e_acsl_size_4; + __gen_e_acsl_initialized_4 = __e_acsl_initialized((void *)(dest + 1 * 2), + (size_t)__gen_e_acsl_if_4); + __e_acsl_assert(! __gen_e_acsl_initialized_4,1,"Assertion", + "test_memory_tracking","!\\initialized(&dest[2 .. 3])", + "tests/builtin/strcpy.c",18); + } + /*@ assert ¬\initialized(&dest[2 .. 3]); */ ; + __e_acsl_delete_block((void *)(src)); + __e_acsl_delete_block((void *)(dest)); + } + { + char dest_0[4]; + __e_acsl_store_block((void *)(dest_0),(size_t)4); + char src_0[4] = {(char)'a', (char)'b', (char)'\000'}; + __e_acsl_store_block((void *)(src_0),(size_t)4); + __e_acsl_full_init((void *)(& src_0)); + { + int __gen_e_acsl_size_5; + int __gen_e_acsl_if_5; + int __gen_e_acsl_initialized_5; + __gen_e_acsl_size_5 = 1 * ((3 - 0) + 1); + if (__gen_e_acsl_size_5 <= 0) __gen_e_acsl_if_5 = 0; + else __gen_e_acsl_if_5 = __gen_e_acsl_size_5; + __gen_e_acsl_initialized_5 = __e_acsl_initialized((void *)(dest_0 + + 1 * 0), + (size_t)__gen_e_acsl_if_5); + __e_acsl_assert(! __gen_e_acsl_initialized_5,1,"Assertion", + "test_memory_tracking", + "!\\initialized(&dest_0[0 .. 3])", + "tests/builtin/strcpy.c",23); + } + /*@ assert ¬\initialized(&dest_0[0 .. 3]); */ ; + { + int __gen_e_acsl_size_6; + int __gen_e_acsl_if_6; + int __gen_e_acsl_initialized_6; + __gen_e_acsl_size_6 = 1 * ((3 - 0) + 1); + if (__gen_e_acsl_size_6 <= 0) __gen_e_acsl_if_6 = 0; + else __gen_e_acsl_if_6 = __gen_e_acsl_size_6; + __gen_e_acsl_initialized_6 = __e_acsl_initialized((void *)(src_0 + + 1 * 0), + (size_t)__gen_e_acsl_if_6); + __e_acsl_assert(__gen_e_acsl_initialized_6,1,"Assertion", + "test_memory_tracking","\\initialized(&src_0[0 .. 3])", + "tests/builtin/strcpy.c",24); + } + /*@ assert \initialized(&src_0[0 .. 3]); */ ; + __e_acsl_builtin_strncpy(dest_0,(char const *)(src_0),(unsigned long)1); + { + int __gen_e_acsl_initialized_7; + __gen_e_acsl_initialized_7 = __e_acsl_initialized((void *)(dest_0), + sizeof(char)); + __e_acsl_assert(__gen_e_acsl_initialized_7,1,"Assertion", + "test_memory_tracking","\\initialized((char *)dest_0)", + "tests/builtin/strcpy.c",27); + } + /*@ assert \initialized((char *)dest_0); */ ; + { + int __gen_e_acsl_size_7; + int __gen_e_acsl_if_7; + int __gen_e_acsl_initialized_8; + __gen_e_acsl_size_7 = 1 * ((3 - 1) + 1); + if (__gen_e_acsl_size_7 <= 0) __gen_e_acsl_if_7 = 0; + else __gen_e_acsl_if_7 = __gen_e_acsl_size_7; + __gen_e_acsl_initialized_8 = __e_acsl_initialized((void *)(dest_0 + + 1 * 1), + (size_t)__gen_e_acsl_if_7); + __e_acsl_assert(! __gen_e_acsl_initialized_8,1,"Assertion", + "test_memory_tracking", + "!\\initialized(&dest_0[1 .. 3])", + "tests/builtin/strcpy.c",28); + } + /*@ assert ¬\initialized(&dest_0[1 .. 3]); */ ; + __e_acsl_delete_block((void *)(src_0)); + __e_acsl_delete_block((void *)(dest_0)); + } + { + char dest_1[4]; + __e_acsl_store_block((void *)(dest_1),(size_t)4); + char src_1[4] = {(char)'b', (char)'\000'}; + __e_acsl_store_block((void *)(src_1),(size_t)4); + __e_acsl_full_init((void *)(& src_1)); + { + int __gen_e_acsl_size_8; + int __gen_e_acsl_if_8; + int __gen_e_acsl_initialized_9; + __gen_e_acsl_size_8 = 1 * ((3 - 0) + 1); + if (__gen_e_acsl_size_8 <= 0) __gen_e_acsl_if_8 = 0; + else __gen_e_acsl_if_8 = __gen_e_acsl_size_8; + __gen_e_acsl_initialized_9 = __e_acsl_initialized((void *)(dest_1 + + 1 * 0), + (size_t)__gen_e_acsl_if_8); + __e_acsl_assert(! __gen_e_acsl_initialized_9,1,"Assertion", + "test_memory_tracking", + "!\\initialized(&dest_1[0 .. 3])", + "tests/builtin/strcpy.c",33); + } + /*@ assert ¬\initialized(&dest_1[0 .. 3]); */ ; + { + int __gen_e_acsl_size_9; + int __gen_e_acsl_if_9; + int __gen_e_acsl_initialized_10; + __gen_e_acsl_size_9 = 1 * ((3 - 0) + 1); + if (__gen_e_acsl_size_9 <= 0) __gen_e_acsl_if_9 = 0; + else __gen_e_acsl_if_9 = __gen_e_acsl_size_9; + __gen_e_acsl_initialized_10 = __e_acsl_initialized((void *)(src_1 + + 1 * 0), + (size_t)__gen_e_acsl_if_9); + __e_acsl_assert(__gen_e_acsl_initialized_10,1,"Assertion", + "test_memory_tracking","\\initialized(&src_1[0 .. 3])", + "tests/builtin/strcpy.c",34); + } + /*@ assert \initialized(&src_1[0 .. 3]); */ ; + __e_acsl_builtin_strncpy(dest_1,(char const *)(src_1),(unsigned long)3); + { + int __gen_e_acsl_size_10; + int __gen_e_acsl_if_10; + int __gen_e_acsl_initialized_11; + __gen_e_acsl_size_10 = 1 * ((2 - 0) + 1); + if (__gen_e_acsl_size_10 <= 0) __gen_e_acsl_if_10 = 0; + else __gen_e_acsl_if_10 = __gen_e_acsl_size_10; + __gen_e_acsl_initialized_11 = __e_acsl_initialized((void *)(dest_1 + + 1 * 0), + (size_t)__gen_e_acsl_if_10); + __e_acsl_assert(__gen_e_acsl_initialized_11,1,"Assertion", + "test_memory_tracking", + "\\initialized(&dest_1[0 .. 2])", + "tests/builtin/strcpy.c",37); + } + /*@ assert \initialized(&dest_1[0 .. 2]); */ ; + { + int __gen_e_acsl_initialized_12; + __gen_e_acsl_initialized_12 = __e_acsl_initialized((void *)(& dest_1[3]), + sizeof(char)); + __e_acsl_assert(! __gen_e_acsl_initialized_12,1,"Assertion", + "test_memory_tracking","!\\initialized(&dest_1[3])", + "tests/builtin/strcpy.c",38); + } + /*@ assert ¬\initialized(&dest_1[3]); */ ; + __e_acsl_delete_block((void *)(src_1)); + __e_acsl_delete_block((void *)(dest_1)); + } + return; +} + /*@ requires valid_string_s: valid_read_string(s); assigns \result; assigns \result @@ -260,89 +463,89 @@ void __e_acsl_globals_init(void) static char __e_acsl_already_run = 0; if (! __e_acsl_already_run) { __e_acsl_already_run = 1; - __gen_e_acsl_literal_string_24 = "tests/builtin/strcpy.c:39"; + __gen_e_acsl_literal_string_24 = "tests/builtin/strcpy.c:72"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_24, - sizeof("tests/builtin/strcpy.c:39")); + sizeof("tests/builtin/strcpy.c:72")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_24); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_24); - __gen_e_acsl_literal_string_23 = "tests/builtin/strcpy.c:38"; + __gen_e_acsl_literal_string_23 = "tests/builtin/strcpy.c:71"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_23, - sizeof("tests/builtin/strcpy.c:38")); + sizeof("tests/builtin/strcpy.c:71")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_23); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_23); - __gen_e_acsl_literal_string_22 = "tests/builtin/strcpy.c:37"; + __gen_e_acsl_literal_string_22 = "tests/builtin/strcpy.c:70"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_22, - sizeof("tests/builtin/strcpy.c:37")); + sizeof("tests/builtin/strcpy.c:70")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_22); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_22); - __gen_e_acsl_literal_string_21 = "tests/builtin/strcpy.c:36"; + __gen_e_acsl_literal_string_21 = "tests/builtin/strcpy.c:69"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_21, - sizeof("tests/builtin/strcpy.c:36")); + sizeof("tests/builtin/strcpy.c:69")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_21); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_21); - __gen_e_acsl_literal_string_20 = "tests/builtin/strcpy.c:35"; + __gen_e_acsl_literal_string_20 = "tests/builtin/strcpy.c:68"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_20, - sizeof("tests/builtin/strcpy.c:35")); + sizeof("tests/builtin/strcpy.c:68")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_20); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_20); - __gen_e_acsl_literal_string_19 = "tests/builtin/strcpy.c:34"; + __gen_e_acsl_literal_string_19 = "tests/builtin/strcpy.c:67"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_19, - sizeof("tests/builtin/strcpy.c:34")); + sizeof("tests/builtin/strcpy.c:67")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_19); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_19); - __gen_e_acsl_literal_string_18 = "tests/builtin/strcpy.c:33"; + __gen_e_acsl_literal_string_18 = "tests/builtin/strcpy.c:66"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_18, - sizeof("tests/builtin/strcpy.c:33")); + sizeof("tests/builtin/strcpy.c:66")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_18); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_18); - __gen_e_acsl_literal_string_17 = "tests/builtin/strcpy.c:32"; + __gen_e_acsl_literal_string_17 = "tests/builtin/strcpy.c:65"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_17, - sizeof("tests/builtin/strcpy.c:32")); + sizeof("tests/builtin/strcpy.c:65")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_17); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_17); - __gen_e_acsl_literal_string_16 = "tests/builtin/strcpy.c:29"; + __gen_e_acsl_literal_string_16 = "tests/builtin/strcpy.c:62"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_16, - sizeof("tests/builtin/strcpy.c:29")); + sizeof("tests/builtin/strcpy.c:62")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_16); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_16); - __gen_e_acsl_literal_string_15 = "tests/builtin/strcpy.c:28"; + __gen_e_acsl_literal_string_15 = "tests/builtin/strcpy.c:61"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_15, - sizeof("tests/builtin/strcpy.c:28")); + sizeof("tests/builtin/strcpy.c:61")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_15); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_15); - __gen_e_acsl_literal_string_14 = "tests/builtin/strcpy.c:27"; + __gen_e_acsl_literal_string_14 = "tests/builtin/strcpy.c:60"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_14, - sizeof("tests/builtin/strcpy.c:27")); + sizeof("tests/builtin/strcpy.c:60")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_14); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_14); - __gen_e_acsl_literal_string_13 = "tests/builtin/strcpy.c:26"; + __gen_e_acsl_literal_string_13 = "tests/builtin/strcpy.c:59"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_13, - sizeof("tests/builtin/strcpy.c:26")); + sizeof("tests/builtin/strcpy.c:59")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_13); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_13); - __gen_e_acsl_literal_string_12 = "tests/builtin/strcpy.c:25"; + __gen_e_acsl_literal_string_12 = "tests/builtin/strcpy.c:58"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_12, - sizeof("tests/builtin/strcpy.c:25")); + sizeof("tests/builtin/strcpy.c:58")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_12); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_12); - __gen_e_acsl_literal_string_11 = "tests/builtin/strcpy.c:24"; + __gen_e_acsl_literal_string_11 = "tests/builtin/strcpy.c:57"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_11, - sizeof("tests/builtin/strcpy.c:24")); + sizeof("tests/builtin/strcpy.c:57")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_11); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_11); - __gen_e_acsl_literal_string_10 = "tests/builtin/strcpy.c:23"; + __gen_e_acsl_literal_string_10 = "tests/builtin/strcpy.c:56"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_10, - sizeof("tests/builtin/strcpy.c:23")); + sizeof("tests/builtin/strcpy.c:56")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_10); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_10); - __gen_e_acsl_literal_string_9 = "tests/builtin/strcpy.c:22"; + __gen_e_acsl_literal_string_9 = "tests/builtin/strcpy.c:55"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_9, - sizeof("tests/builtin/strcpy.c:22")); + sizeof("tests/builtin/strcpy.c:55")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_9); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_9); - __gen_e_acsl_literal_string_7 = "tests/builtin/strcpy.c:21"; + __gen_e_acsl_literal_string_7 = "tests/builtin/strcpy.c:54"; __e_acsl_store_block((void *)__gen_e_acsl_literal_string_7, - sizeof("tests/builtin/strcpy.c:21")); + sizeof("tests/builtin/strcpy.c:54")); __e_acsl_full_init((void *)__gen_e_acsl_literal_string_7); __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_7); __gen_e_acsl_literal_string_6 = "abcd"; @@ -643,6 +846,7 @@ int main(int argc, char const **argv) free((void *)src); free((void *)dest1); free((void *)dest2); + test_memory_tracking(); __retres = 0; __e_acsl_memory_clean(); return __retres; diff --git a/src/plugins/e-acsl/tests/builtin/oracle_dev/strcat.e-acsl.err.log b/src/plugins/e-acsl/tests/builtin/oracle_dev/strcat.e-acsl.err.log index ab8fc09f167..3e0326a3b60 100644 --- a/src/plugins/e-acsl/tests/builtin/oracle_dev/strcat.e-acsl.err.log +++ b/src/plugins/e-acsl/tests/builtin/oracle_dev/strcat.e-acsl.err.log @@ -1,40 +1,40 @@ -TEST 1: OK: Expected execution at tests/builtin/strcat.c:27 -TEST 2: OK: Expected execution at tests/builtin/strcat.c:28 +TEST 1: OK: Expected execution at tests/builtin/strcat.c:66 +TEST 2: OK: Expected execution at tests/builtin/strcat.c:67 strcat: insufficient space in destination string, available: 8 bytes, requires at least 9 bytes -TEST 3: OK: Expected signal at tests/builtin/strcat.c:29 +TEST 3: OK: Expected signal at tests/builtin/strcat.c:68 strcat: destination string string unallocated -TEST 4: OK: Expected signal at tests/builtin/strcat.c:30 +TEST 4: OK: Expected signal at tests/builtin/strcat.c:69 strcat: source string string unallocated -TEST 5: OK: Expected signal at tests/builtin/strcat.c:31 +TEST 5: OK: Expected signal at tests/builtin/strcat.c:70 strcat: destination string string unallocated -TEST 6: OK: Expected signal at tests/builtin/strcat.c:32 +TEST 6: OK: Expected signal at tests/builtin/strcat.c:71 strcat: source string string unallocated -TEST 7: OK: Expected signal at tests/builtin/strcat.c:33 +TEST 7: OK: Expected signal at tests/builtin/strcat.c:72 strcat: destination string string is not writable -TEST 8: OK: Expected signal at tests/builtin/strcat.c:34 +TEST 8: OK: Expected signal at tests/builtin/strcat.c:73 strcat: overlapping memory areas -TEST 9: OK: Expected signal at tests/builtin/strcat.c:35 +TEST 9: OK: Expected signal at tests/builtin/strcat.c:74 strcat: overlapping memory areas -TEST 10: OK: Expected signal at tests/builtin/strcat.c:36 +TEST 10: OK: Expected signal at tests/builtin/strcat.c:75 strcat: overlapping memory areas -TEST 11: OK: Expected signal at tests/builtin/strcat.c:37 -TEST 12: OK: Expected execution at tests/builtin/strcat.c:38 -TEST 13: OK: Expected execution at tests/builtin/strcat.c:51 +TEST 11: OK: Expected signal at tests/builtin/strcat.c:76 +TEST 12: OK: Expected execution at tests/builtin/strcat.c:77 +TEST 13: OK: Expected execution at tests/builtin/strcat.c:90 strncat: insufficient space in destination string, available: 8 bytes, requires at least 9 bytes -TEST 14: OK: Expected signal at tests/builtin/strcat.c:52 +TEST 14: OK: Expected signal at tests/builtin/strcat.c:91 strcat: destination string string unallocated -TEST 15: OK: Expected signal at tests/builtin/strcat.c:53 +TEST 15: OK: Expected signal at tests/builtin/strcat.c:92 strncat: source string string unallocated -TEST 16: OK: Expected signal at tests/builtin/strcat.c:54 +TEST 16: OK: Expected signal at tests/builtin/strcat.c:93 strcat: destination string string unallocated -TEST 17: OK: Expected signal at tests/builtin/strcat.c:55 +TEST 17: OK: Expected signal at tests/builtin/strcat.c:94 strncat: source string string unallocated -TEST 18: OK: Expected signal at tests/builtin/strcat.c:56 +TEST 18: OK: Expected signal at tests/builtin/strcat.c:95 strcat: destination string string is not writable -TEST 19: OK: Expected signal at tests/builtin/strcat.c:57 +TEST 19: OK: Expected signal at tests/builtin/strcat.c:96 strcat: overlapping memory areas -TEST 20: OK: Expected signal at tests/builtin/strcat.c:59 +TEST 20: OK: Expected signal at tests/builtin/strcat.c:98 strncat: insufficient space in destination string, available: 6 bytes, requires at least 7 bytes -TEST 21: OK: Expected signal at tests/builtin/strcat.c:60 +TEST 21: OK: Expected signal at tests/builtin/strcat.c:99 strcat: overlapping memory areas -TEST 22: OK: Expected signal at tests/builtin/strcat.c:61 +TEST 22: OK: Expected signal at tests/builtin/strcat.c:100 diff --git a/src/plugins/e-acsl/tests/builtin/oracle_dev/strcpy.e-acsl.err.log b/src/plugins/e-acsl/tests/builtin/oracle_dev/strcpy.e-acsl.err.log index eba27da3669..478465e4ea3 100644 --- a/src/plugins/e-acsl/tests/builtin/oracle_dev/strcpy.e-acsl.err.log +++ b/src/plugins/e-acsl/tests/builtin/oracle_dev/strcpy.e-acsl.err.log @@ -1,27 +1,27 @@ -TEST 1: OK: Expected execution at tests/builtin/strcpy.c:21 -TEST 2: OK: Expected execution at tests/builtin/strcpy.c:22 +TEST 1: OK: Expected execution at tests/builtin/strcpy.c:54 +TEST 2: OK: Expected execution at tests/builtin/strcpy.c:55 strlen: insufficient space in destination string, at least 5 bytes required -TEST 3: OK: Expected signal at tests/builtin/strcpy.c:23 +TEST 3: OK: Expected signal at tests/builtin/strcpy.c:56 strlen: destination string space unallocated or cannot be written -TEST 4: OK: Expected signal at tests/builtin/strcpy.c:24 +TEST 4: OK: Expected signal at tests/builtin/strcpy.c:57 strlen: destination string space unallocated or cannot be written -TEST 5: OK: Expected signal at tests/builtin/strcpy.c:25 -TEST 6: OK: Expected execution at tests/builtin/strcpy.c:26 +TEST 5: OK: Expected signal at tests/builtin/strcpy.c:58 +TEST 6: OK: Expected execution at tests/builtin/strcpy.c:59 strcpy: overlapping memory areas -TEST 7: OK: Expected signal at tests/builtin/strcpy.c:27 -TEST 8: OK: Expected execution at tests/builtin/strcpy.c:28 +TEST 7: OK: Expected signal at tests/builtin/strcpy.c:60 +TEST 8: OK: Expected execution at tests/builtin/strcpy.c:61 strcpy: overlapping memory areas -TEST 9: OK: Expected signal at tests/builtin/strcpy.c:29 -TEST 10: OK: Expected execution at tests/builtin/strcpy.c:32 +TEST 9: OK: Expected signal at tests/builtin/strcpy.c:62 +TEST 10: OK: Expected execution at tests/builtin/strcpy.c:65 strncpy: insufficient space in destination string , at least 6 bytes required -TEST 11: OK: Expected signal at tests/builtin/strcpy.c:33 +TEST 11: OK: Expected signal at tests/builtin/strcpy.c:66 strncpy: destination string space unallocated or cannot be written -TEST 12: OK: Expected signal at tests/builtin/strcpy.c:34 +TEST 12: OK: Expected signal at tests/builtin/strcpy.c:67 strncpy: destination string space unallocated or cannot be written -TEST 13: OK: Expected signal at tests/builtin/strcpy.c:35 -TEST 14: OK: Expected execution at tests/builtin/strcpy.c:36 +TEST 13: OK: Expected signal at tests/builtin/strcpy.c:68 +TEST 14: OK: Expected execution at tests/builtin/strcpy.c:69 strncpy: overlapping memory areas -TEST 15: OK: Expected signal at tests/builtin/strcpy.c:37 -TEST 16: OK: Expected execution at tests/builtin/strcpy.c:38 +TEST 15: OK: Expected signal at tests/builtin/strcpy.c:70 +TEST 16: OK: Expected execution at tests/builtin/strcpy.c:71 strncpy: overlapping memory areas -TEST 17: OK: Expected signal at tests/builtin/strcpy.c:39 +TEST 17: OK: Expected signal at tests/builtin/strcpy.c:72 diff --git a/src/plugins/e-acsl/tests/builtin/strcat.c b/src/plugins/e-acsl/tests/builtin/strcat.c index 913f1208a13..395d13a3a00 100644 --- a/src/plugins/e-acsl/tests/builtin/strcat.c +++ b/src/plugins/e-acsl/tests/builtin/strcat.c @@ -6,6 +6,45 @@ #include <string.h> #include <stdlib.h> +void test_memory_tracking() { + { + char dest[4]; + strcpy(dest, "a"); + char src[] = "b"; + //@ assert \initialized(&dest[0..1]); + //@ assert !\initialized(&dest[2..3]); + //@ assert \initialized(&src[0..1]); + + strcat(dest, src); + //@ assert \initialized(&dest[0..2]); + //@ assert !\initialized(&dest[3]); + } + { // strncat with n < strlen(src) + char dest[4]; + strcpy(dest, "a"); + char src[] = "bc"; + //@ assert \initialized(&dest[0..1]); + //@ assert !\initialized(&dest[2..3]); + //@ assert \initialized(&src[0..2]); + + strncat(dest, src, 1); + //@ assert \initialized(&dest[0..2]); + //@ assert !\initialized(&dest[3]); + } + { // strncat with n >= strlen(src) + char dest[4]; + strcpy(dest, "a"); + char src[] = "b"; + //@ assert \initialized(&dest[0..1]); + //@ assert !\initialized(&dest[2..3]); + //@ assert \initialized(&src[0..1]); + + strncat(dest, src, 2); + //@ assert \initialized(&dest[0..2]); + //@ assert !\initialized(&dest[3]); + } +} + int main(int argc, const char **argv) { char *const_str = "abcd"; char *unalloc_str = malloc(5); @@ -60,6 +99,7 @@ int main(int argc, const char **argv) { ABRT(strncat(pd1 + 3, pd1, 5)); // overlapping spaces [abort] ABRT(strncat(pd4 + 4, pd4, 5)); // overlapping spaces [abort] } + test_memory_tracking(); return 0; } diff --git a/src/plugins/e-acsl/tests/builtin/strcpy.c b/src/plugins/e-acsl/tests/builtin/strcpy.c index ad599900304..4aaa1722b18 100644 --- a/src/plugins/e-acsl/tests/builtin/strcpy.c +++ b/src/plugins/e-acsl/tests/builtin/strcpy.c @@ -6,6 +6,39 @@ #include <string.h> #include <stdlib.h> +void test_memory_tracking() { + { + char dest[4]; + char src[] = "b"; + //@ assert !\initialized(&dest[0..3]); + //@ assert \initialized(&src[0..1]); + + strcpy(dest, src); + //@ assert \initialized(&dest[0..1]); + //@ assert !\initialized(&dest[2..3]); + } + { // strncpy with n < strlen(src) + char dest[4]; + char src[4] = "ab"; + //@ assert !\initialized(&dest[0..3]); + //@ assert \initialized(&src[0..3]); + + strncpy(dest, src, 1); + //@ assert \initialized(&dest[0]); + //@ assert !\initialized(&dest[1..3]); + } + { // strncpy with n >= strlen(src) + char dest[4]; + char src[4] = "b"; + //@ assert !\initialized(&dest[0..3]); + //@ assert \initialized(&src[0..3]); + + strncpy(dest, src, 3); + //@ assert \initialized(&dest[0..2]); + //@ assert !\initialized(&dest[3]); + } +} + int main(int argc, const char **argv) { char empty_str[1] = ""; char *const_str = "abcd"; @@ -41,5 +74,7 @@ int main(int argc, const char **argv) { free(src); free(dest1); free(dest2); + + test_memory_tracking(); return 0; } diff --git a/src/plugins/e-acsl/tests/format/oracle/gen_printf.c b/src/plugins/e-acsl/tests/format/oracle/gen_printf.c index 1e708d06d7d..b5d7a91b2f1 100644 --- a/src/plugins/e-acsl/tests/format/oracle/gen_printf.c +++ b/src/plugins/e-acsl/tests/format/oracle/gen_printf.c @@ -703,11 +703,40 @@ pid_t __gen_e_acsl_fork(void) char *__gen_e_acsl_strcpy(char * restrict dest, char const * restrict src) { char *__gen_e_acsl_at; + unsigned long __gen_e_acsl_strcpy_src_size; char *__retres; __e_acsl_store_block((void *)(& src),(size_t)8); __e_acsl_store_block((void *)(& dest),(size_t)8); + __gen_e_acsl_strcpy_src_size = __e_acsl_builtin_strlen(src); __gen_e_acsl_at = dest; __retres = strcpy(dest,src); + { + __e_acsl_mpz_t __gen_e_acsl___gen_e_acsl_strcpy_src_size; + __e_acsl_mpz_t __gen_e_acsl_; + __e_acsl_mpz_t __gen_e_acsl_add; + __e_acsl_mpz_t __gen_e_acsl__2; + int __gen_e_acsl_le; + unsigned long __gen_e_acsl_size; + __gmpz_init_set_ui(__gen_e_acsl___gen_e_acsl_strcpy_src_size, + __gen_e_acsl_strcpy_src_size); + __gmpz_init_set_si(__gen_e_acsl_,1L); + __gmpz_init(__gen_e_acsl_add); + __gmpz_add(__gen_e_acsl_add, + (__e_acsl_mpz_struct const *)(__gen_e_acsl___gen_e_acsl_strcpy_src_size), + (__e_acsl_mpz_struct const *)(__gen_e_acsl_)); + __gmpz_init_set_ui(__gen_e_acsl__2,18446744073709551615UL); + __gen_e_acsl_le = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_add), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__2)); + __e_acsl_assert(__gen_e_acsl_le <= 0,1,"RTE","strcpy", + "size_lesser_or_eq_than_SIZE_MAX:\n __gen_e_acsl_strcpy_src_size + 1 <= 18446744073709551615", + "FRAMAC_SHARE/libc/string.h",367); + __gen_e_acsl_size = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add)); + __e_acsl_initialize((void *)dest,__gen_e_acsl_size); + __gmpz_clear(__gen_e_acsl___gen_e_acsl_strcpy_src_size); + __gmpz_clear(__gen_e_acsl_); + __gmpz_clear(__gen_e_acsl_add); + __gmpz_clear(__gen_e_acsl__2); + } __e_acsl_assert(__retres == __gen_e_acsl_at,1,"Postcondition","strcpy", "result_ptr: \\result == \\old(dest)", "FRAMAC_SHARE/libc/string.h",374); diff --git a/src/plugins/e-acsl/tests/format/oracle/gen_sprintf.c b/src/plugins/e-acsl/tests/format/oracle/gen_sprintf.c new file mode 100644 index 00000000000..503129bceba --- /dev/null +++ b/src/plugins/e-acsl/tests/format/oracle/gen_sprintf.c @@ -0,0 +1,173 @@ +/* Generated by Frama-C */ +#include "stddef.h" +#include "stdio.h" +char *__gen_e_acsl_literal_string; +extern __attribute__((__FC_BUILTIN__)) int __e_acsl_sound_verdict; + +void __e_acsl_globals_init(void) +{ + static char __e_acsl_already_run = 0; + if (! __e_acsl_already_run) { + __e_acsl_already_run = 1; + __gen_e_acsl_literal_string = "%d"; + __e_acsl_store_block((void *)__gen_e_acsl_literal_string,sizeof("%d")); + __e_acsl_full_init((void *)__gen_e_acsl_literal_string); + __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string); + } + return; +} + +int main(void) +{ + int __retres; + __e_acsl_memory_init((int *)0,(char ***)0,(size_t)8); + __e_acsl_globals_init(); + { + char buf[4]; + __e_acsl_store_block((void *)(buf),(size_t)4); + { + int __gen_e_acsl_size; + int __gen_e_acsl_if; + int __gen_e_acsl_initialized; + __gen_e_acsl_size = 1 * ((3 - 0) + 1); + if (__gen_e_acsl_size <= 0) __gen_e_acsl_if = 0; + else __gen_e_acsl_if = __gen_e_acsl_size; + __gen_e_acsl_initialized = __e_acsl_initialized((void *)(buf + 1 * 0), + (size_t)__gen_e_acsl_if); + __e_acsl_assert(! __gen_e_acsl_initialized,1,"Assertion","main", + "!\\initialized(&buf[0 .. 3])", + "tests/format/sprintf.c",10); + } + /*@ assert ¬\initialized(&buf[0 .. 3]); */ ; + __e_acsl_builtin_sprintf("d",buf,__gen_e_acsl_literal_string,10); + { + int __gen_e_acsl_size_2; + int __gen_e_acsl_if_2; + int __gen_e_acsl_initialized_2; + __gen_e_acsl_size_2 = 1 * ((2 - 0) + 1); + if (__gen_e_acsl_size_2 <= 0) __gen_e_acsl_if_2 = 0; + else __gen_e_acsl_if_2 = __gen_e_acsl_size_2; + __gen_e_acsl_initialized_2 = __e_acsl_initialized((void *)(buf + 1 * 0), + (size_t)__gen_e_acsl_if_2); + __e_acsl_assert(__gen_e_acsl_initialized_2,1,"Assertion","main", + "\\initialized(&buf[0 .. 2])","tests/format/sprintf.c", + 13); + } + /*@ assert \initialized(&buf[0 .. 2]); */ ; + { + int __gen_e_acsl_initialized_3; + __gen_e_acsl_initialized_3 = __e_acsl_initialized((void *)(& buf[3]), + sizeof(char)); + __e_acsl_assert(! __gen_e_acsl_initialized_3,1,"Assertion","main", + "!\\initialized(&buf[3])","tests/format/sprintf.c",14); + } + /*@ assert ¬\initialized(&buf[3]); */ ; + __e_acsl_delete_block((void *)(buf)); + } + { + char buf_0[4]; + __e_acsl_store_block((void *)(buf_0),(size_t)4); + { + int __gen_e_acsl_size_3; + int __gen_e_acsl_if_3; + int __gen_e_acsl_initialized_4; + __gen_e_acsl_size_3 = 1 * ((3 - 0) + 1); + if (__gen_e_acsl_size_3 <= 0) __gen_e_acsl_if_3 = 0; + else __gen_e_acsl_if_3 = __gen_e_acsl_size_3; + __gen_e_acsl_initialized_4 = __e_acsl_initialized((void *)(buf_0 + + 1 * 0), + (size_t)__gen_e_acsl_if_3); + __e_acsl_assert(! __gen_e_acsl_initialized_4,1,"Assertion","main", + "!\\initialized(&buf_0[0 .. 3])", + "tests/format/sprintf.c",18); + } + /*@ assert ¬\initialized(&buf_0[0 .. 3]); */ ; + __e_acsl_builtin_snprintf("d",buf_0,(unsigned long)2, + __gen_e_acsl_literal_string,10); + { + int __gen_e_acsl_size_4; + int __gen_e_acsl_if_4; + int __gen_e_acsl_initialized_5; + __gen_e_acsl_size_4 = 1 * ((1 - 0) + 1); + if (__gen_e_acsl_size_4 <= 0) __gen_e_acsl_if_4 = 0; + else __gen_e_acsl_if_4 = __gen_e_acsl_size_4; + __gen_e_acsl_initialized_5 = __e_acsl_initialized((void *)(buf_0 + + 1 * 0), + (size_t)__gen_e_acsl_if_4); + __e_acsl_assert(__gen_e_acsl_initialized_5,1,"Assertion","main", + "\\initialized(&buf_0[0 .. 1])", + "tests/format/sprintf.c",21); + } + /*@ assert \initialized(&buf_0[0 .. 1]); */ ; + { + int __gen_e_acsl_initialized_6; + __gen_e_acsl_initialized_6 = __e_acsl_initialized((void *)(& buf_0[2]), + sizeof(char)); + __e_acsl_assert(! __gen_e_acsl_initialized_6,1,"Assertion","main", + "!\\initialized(&buf_0[2])","tests/format/sprintf.c", + 22); + } + /*@ assert ¬\initialized(&buf_0[2]); */ ; + { + int __gen_e_acsl_initialized_7; + __gen_e_acsl_initialized_7 = __e_acsl_initialized((void *)(& buf_0[3]), + sizeof(char)); + __e_acsl_assert(! __gen_e_acsl_initialized_7,1,"Assertion","main", + "!\\initialized(&buf_0[3])","tests/format/sprintf.c", + 23); + } + /*@ assert ¬\initialized(&buf_0[3]); */ ; + __e_acsl_delete_block((void *)(buf_0)); + } + { + char buf_1[4]; + __e_acsl_store_block((void *)(buf_1),(size_t)4); + { + int __gen_e_acsl_size_5; + int __gen_e_acsl_if_5; + int __gen_e_acsl_initialized_8; + __gen_e_acsl_size_5 = 1 * ((3 - 0) + 1); + if (__gen_e_acsl_size_5 <= 0) __gen_e_acsl_if_5 = 0; + else __gen_e_acsl_if_5 = __gen_e_acsl_size_5; + __gen_e_acsl_initialized_8 = __e_acsl_initialized((void *)(buf_1 + + 1 * 0), + (size_t)__gen_e_acsl_if_5); + __e_acsl_assert(! __gen_e_acsl_initialized_8,1,"Assertion","main", + "!\\initialized(&buf_1[0 .. 3])", + "tests/format/sprintf.c",27); + } + /*@ assert ¬\initialized(&buf_1[0 .. 3]); */ ; + __e_acsl_builtin_snprintf("d",buf_1,(unsigned long)4, + __gen_e_acsl_literal_string,10); + { + int __gen_e_acsl_size_6; + int __gen_e_acsl_if_6; + int __gen_e_acsl_initialized_9; + __gen_e_acsl_size_6 = 1 * ((2 - 0) + 1); + if (__gen_e_acsl_size_6 <= 0) __gen_e_acsl_if_6 = 0; + else __gen_e_acsl_if_6 = __gen_e_acsl_size_6; + __gen_e_acsl_initialized_9 = __e_acsl_initialized((void *)(buf_1 + + 1 * 0), + (size_t)__gen_e_acsl_if_6); + __e_acsl_assert(__gen_e_acsl_initialized_9,1,"Assertion","main", + "\\initialized(&buf_1[0 .. 2])", + "tests/format/sprintf.c",30); + } + /*@ assert \initialized(&buf_1[0 .. 2]); */ ; + { + int __gen_e_acsl_initialized_10; + __gen_e_acsl_initialized_10 = __e_acsl_initialized((void *)(& buf_1[3]), + sizeof(char)); + __e_acsl_assert(! __gen_e_acsl_initialized_10,1,"Assertion","main", + "!\\initialized(&buf_1[3])","tests/format/sprintf.c", + 31); + } + /*@ assert ¬\initialized(&buf_1[3]); */ ; + __e_acsl_delete_block((void *)(buf_1)); + } + __retres = 0; + __e_acsl_memory_clean(); + return __retres; +} + + diff --git a/src/plugins/e-acsl/tests/format/oracle/printf.res.oracle b/src/plugins/e-acsl/tests/format/oracle/printf.res.oracle index 8ad5e311180..8ac28fcd5d6 100644 --- a/src/plugins/e-acsl/tests/format/oracle/printf.res.oracle +++ b/src/plugins/e-acsl/tests/format/oracle/printf.res.oracle @@ -14,9 +14,6 @@ [e-acsl] Warning: annotating undefined function `strchr': the generated program may miss memory instrumentation if there are memory-related annotations. -[e-acsl] Warning: annotating undefined function `strcpy': - the generated program may miss memory instrumentation - if there are memory-related annotations. [e-acsl] Warning: annotating undefined function `fork': the generated program may miss memory instrumentation if there are memory-related annotations. diff --git a/src/plugins/e-acsl/tests/format/oracle/sprintf.res.oracle b/src/plugins/e-acsl/tests/format/oracle/sprintf.res.oracle new file mode 100644 index 00000000000..fe875c9a1ac --- /dev/null +++ b/src/plugins/e-acsl/tests/format/oracle/sprintf.res.oracle @@ -0,0 +1,20 @@ +[e-acsl] beginning translation. +[e-acsl] translation done in project "e-acsl". +[kernel:annot:missing-spec] tests/format/sprintf.c:12: Warning: + Neither code nor specification for function __e_acsl_builtin_sprintf, generating default assigns from the prototype +[eva:alarm] tests/format/sprintf.c:13: Warning: + function __e_acsl_assert, behavior blocking: precondition got status invalid. +[eva:alarm] tests/format/sprintf.c:14: Warning: + function __e_acsl_assert, behavior blocking: precondition got status invalid. +[kernel:annot:missing-spec] tests/format/sprintf.c:20: Warning: + Neither code nor specification for function __e_acsl_builtin_snprintf, generating default assigns from the prototype +[eva:alarm] tests/format/sprintf.c:21: Warning: + function __e_acsl_assert, behavior blocking: precondition got status invalid. +[eva:alarm] tests/format/sprintf.c:22: Warning: + function __e_acsl_assert, behavior blocking: precondition got status invalid. +[eva:alarm] tests/format/sprintf.c:23: Warning: + function __e_acsl_assert, behavior blocking: precondition got status invalid. +[eva:alarm] tests/format/sprintf.c:30: Warning: + function __e_acsl_assert, behavior blocking: precondition got status invalid. +[eva:alarm] tests/format/sprintf.c:31: Warning: + function __e_acsl_assert, behavior blocking: precondition got status invalid. diff --git a/src/plugins/e-acsl/tests/format/oracle_dev/printf.e-acsl.err.log b/src/plugins/e-acsl/tests/format/oracle_dev/printf.e-acsl.err.log index 02725ad71ef..2fa4a16bc9b 100644 --- a/src/plugins/e-acsl/tests/format/oracle_dev/printf.e-acsl.err.log +++ b/src/plugins/e-acsl/tests/format/oracle_dev/printf.e-acsl.err.log @@ -29,19 +29,19 @@ TEST 20: OK: Expected execution at tests/format/printf.c:209 TEST 21: OK: Expected execution at tests/format/printf.c:209 TEST 22: OK: Expected execution at tests/format/printf.c:209 TEST 23: OK: Expected execution at tests/format/printf.c:209 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of precision [.] to format specifier [c] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of precision [.] to format specifier [c] TEST 24: OK: Expected signal at tests/format/printf.c:209 TEST 25: OK: Expected execution at tests/format/printf.c:209 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of precision [.] to format specifier [p] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of precision [.] to format specifier [p] TEST 26: OK: Expected signal at tests/format/printf.c:209 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of precision [.] to format specifier [n] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of precision [.] to format specifier [n] TEST 27: OK: Expected signal at tests/format/printf.c:209 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of flag [#] to format specifier [d] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of flag [#] to format specifier [d] TEST 28: OK: Expected signal at tests/format/printf.c:215 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of flag [#] to format specifier [i] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of flag [#] to format specifier [i] TEST 29: OK: Expected signal at tests/format/printf.c:215 TEST 30: OK: Expected execution at tests/format/printf.c:215 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of flag [#] to format specifier [u] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of flag [#] to format specifier [u] TEST 31: OK: Expected signal at tests/format/printf.c:215 TEST 32: OK: Expected execution at tests/format/printf.c:215 TEST 33: OK: Expected execution at tests/format/printf.c:215 @@ -52,13 +52,13 @@ TEST 37: OK: Expected execution at tests/format/printf.c:215 TEST 38: OK: Expected execution at tests/format/printf.c:215 TEST 39: OK: Expected execution at tests/format/printf.c:215 TEST 40: OK: Expected execution at tests/format/printf.c:215 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of flag [#] to format specifier [c] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of flag [#] to format specifier [c] TEST 41: OK: Expected signal at tests/format/printf.c:215 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of flag [#] to format specifier [s] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of flag [#] to format specifier [s] TEST 42: OK: Expected signal at tests/format/printf.c:215 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of flag [#] to format specifier [p] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of flag [#] to format specifier [p] TEST 43: OK: Expected signal at tests/format/printf.c:215 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of flag [#] to format specifier [n] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of flag [#] to format specifier [n] TEST 44: OK: Expected signal at tests/format/printf.c:215 TEST 45: OK: Expected execution at tests/format/printf.c:218 TEST 46: OK: Expected execution at tests/format/printf.c:218 @@ -73,39 +73,39 @@ TEST 54: OK: Expected execution at tests/format/printf.c:218 TEST 55: OK: Expected execution at tests/format/printf.c:218 TEST 56: OK: Expected execution at tests/format/printf.c:218 TEST 57: OK: Expected execution at tests/format/printf.c:218 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of flag [0] to format specifier [c] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of flag [0] to format specifier [c] TEST 58: OK: Expected signal at tests/format/printf.c:218 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of flag [0] to format specifier [s] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of flag [0] to format specifier [s] TEST 59: OK: Expected signal at tests/format/printf.c:218 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of flag [0] to format specifier [p] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of flag [0] to format specifier [p] TEST 60: OK: Expected signal at tests/format/printf.c:218 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of flag [0] to format specifier [n] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of flag [0] to format specifier [n] TEST 61: OK: Expected signal at tests/format/printf.c:218 TEST 62: OK: Expected execution at tests/format/printf.c:224 TEST 63: OK: Expected execution at tests/format/printf.c:225 Format error: illegal format specifier 'l' TEST 64: OK: Expected signal at tests/format/printf.c:226 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [hh] to format specifier [f] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [hh] to format specifier [f] TEST 65: OK: Expected signal at tests/format/printf.c:232 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [hh] to format specifier [F] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [hh] to format specifier [F] TEST 66: OK: Expected signal at tests/format/printf.c:232 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [hh] to format specifier [e] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [hh] to format specifier [e] TEST 67: OK: Expected signal at tests/format/printf.c:232 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [hh] to format specifier [E] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [hh] to format specifier [E] TEST 68: OK: Expected signal at tests/format/printf.c:232 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [hh] to format specifier [g] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [hh] to format specifier [g] TEST 69: OK: Expected signal at tests/format/printf.c:232 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [hh] to format specifier [G] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [hh] to format specifier [G] TEST 70: OK: Expected signal at tests/format/printf.c:232 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [hh] to format specifier [a] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [hh] to format specifier [a] TEST 71: OK: Expected signal at tests/format/printf.c:232 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [hh] to format specifier [A] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [hh] to format specifier [A] TEST 72: OK: Expected signal at tests/format/printf.c:232 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [hh] to format specifier [c] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [hh] to format specifier [c] TEST 73: OK: Expected signal at tests/format/printf.c:232 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [hh] to format specifier [s] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [hh] to format specifier [s] TEST 74: OK: Expected signal at tests/format/printf.c:232 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [hh] to format specifier [p] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [hh] to format specifier [p] TEST 75: OK: Expected signal at tests/format/printf.c:232 TEST 76: OK: Expected execution at tests/format/printf.c:233 TEST 77: OK: Expected execution at tests/format/printf.c:233 @@ -114,27 +114,27 @@ TEST 79: OK: Expected execution at tests/format/printf.c:234 TEST 80: OK: Expected execution at tests/format/printf.c:235 TEST 81: OK: Expected execution at tests/format/printf.c:235 TEST 82: OK: Expected execution at tests/format/printf.c:235 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [h] to format specifier [f] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [h] to format specifier [f] TEST 83: OK: Expected signal at tests/format/printf.c:238 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [h] to format specifier [F] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [h] to format specifier [F] TEST 84: OK: Expected signal at tests/format/printf.c:238 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [h] to format specifier [e] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [h] to format specifier [e] TEST 85: OK: Expected signal at tests/format/printf.c:238 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [h] to format specifier [E] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [h] to format specifier [E] TEST 86: OK: Expected signal at tests/format/printf.c:238 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [h] to format specifier [g] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [h] to format specifier [g] TEST 87: OK: Expected signal at tests/format/printf.c:238 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [h] to format specifier [G] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [h] to format specifier [G] TEST 88: OK: Expected signal at tests/format/printf.c:238 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [h] to format specifier [a] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [h] to format specifier [a] TEST 89: OK: Expected signal at tests/format/printf.c:238 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [h] to format specifier [A] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [h] to format specifier [A] TEST 90: OK: Expected signal at tests/format/printf.c:238 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [h] to format specifier [c] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [h] to format specifier [c] TEST 91: OK: Expected signal at tests/format/printf.c:238 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [h] to format specifier [s] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [h] to format specifier [s] TEST 92: OK: Expected signal at tests/format/printf.c:238 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [h] to format specifier [p] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [h] to format specifier [p] TEST 93: OK: Expected signal at tests/format/printf.c:238 TEST 94: OK: Expected execution at tests/format/printf.c:239 TEST 95: OK: Expected execution at tests/format/printf.c:239 @@ -143,7 +143,7 @@ TEST 97: OK: Expected execution at tests/format/printf.c:240 TEST 98: OK: Expected execution at tests/format/printf.c:241 TEST 99: OK: Expected execution at tests/format/printf.c:241 TEST 100: OK: Expected execution at tests/format/printf.c:241 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [l] to format specifier [p] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [l] to format specifier [p] TEST 101: OK: Expected signal at tests/format/printf.c:244 TEST 102: OK: Expected execution at tests/format/printf.c:245 TEST 103: OK: Expected execution at tests/format/printf.c:245 @@ -168,27 +168,27 @@ TEST 121: OK: Expected execution at tests/format/printf.c:262 TEST 122: OK: Expected execution at tests/format/printf.c:263 TEST 123: OK: Expected execution at tests/format/printf.c:263 TEST 124: OK: Expected execution at tests/format/printf.c:263 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [j] to format specifier [f] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [j] to format specifier [f] TEST 125: OK: Expected signal at tests/format/printf.c:266 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [j] to format specifier [F] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [j] to format specifier [F] TEST 126: OK: Expected signal at tests/format/printf.c:266 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [j] to format specifier [e] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [j] to format specifier [e] TEST 127: OK: Expected signal at tests/format/printf.c:266 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [j] to format specifier [E] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [j] to format specifier [E] TEST 128: OK: Expected signal at tests/format/printf.c:266 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [j] to format specifier [g] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [j] to format specifier [g] TEST 129: OK: Expected signal at tests/format/printf.c:266 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [j] to format specifier [G] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [j] to format specifier [G] TEST 130: OK: Expected signal at tests/format/printf.c:266 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [j] to format specifier [a] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [j] to format specifier [a] TEST 131: OK: Expected signal at tests/format/printf.c:266 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [j] to format specifier [A] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [j] to format specifier [A] TEST 132: OK: Expected signal at tests/format/printf.c:266 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [j] to format specifier [c] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [j] to format specifier [c] TEST 133: OK: Expected signal at tests/format/printf.c:266 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [j] to format specifier [s] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [j] to format specifier [s] TEST 134: OK: Expected signal at tests/format/printf.c:266 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [j] to format specifier [p] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [j] to format specifier [p] TEST 135: OK: Expected signal at tests/format/printf.c:266 TEST 136: OK: Expected execution at tests/format/printf.c:267 TEST 137: OK: Expected execution at tests/format/printf.c:267 @@ -197,27 +197,27 @@ TEST 139: OK: Expected execution at tests/format/printf.c:268 TEST 140: OK: Expected execution at tests/format/printf.c:269 TEST 141: OK: Expected execution at tests/format/printf.c:269 TEST 142: OK: Expected execution at tests/format/printf.c:269 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [z] to format specifier [f] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [z] to format specifier [f] TEST 143: OK: Expected signal at tests/format/printf.c:272 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [z] to format specifier [F] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [z] to format specifier [F] TEST 144: OK: Expected signal at tests/format/printf.c:272 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [z] to format specifier [e] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [z] to format specifier [e] TEST 145: OK: Expected signal at tests/format/printf.c:272 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [z] to format specifier [E] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [z] to format specifier [E] TEST 146: OK: Expected signal at tests/format/printf.c:272 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [z] to format specifier [g] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [z] to format specifier [g] TEST 147: OK: Expected signal at tests/format/printf.c:272 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [z] to format specifier [G] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [z] to format specifier [G] TEST 148: OK: Expected signal at tests/format/printf.c:272 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [z] to format specifier [a] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [z] to format specifier [a] TEST 149: OK: Expected signal at tests/format/printf.c:272 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [z] to format specifier [A] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [z] to format specifier [A] TEST 150: OK: Expected signal at tests/format/printf.c:272 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [z] to format specifier [c] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [z] to format specifier [c] TEST 151: OK: Expected signal at tests/format/printf.c:272 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [z] to format specifier [s] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [z] to format specifier [s] TEST 152: OK: Expected signal at tests/format/printf.c:272 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [z] to format specifier [p] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [z] to format specifier [p] TEST 153: OK: Expected signal at tests/format/printf.c:272 TEST 154: OK: Expected execution at tests/format/printf.c:277 TEST 155: OK: Expected execution at tests/format/printf.c:277 @@ -226,27 +226,27 @@ TEST 157: OK: Expected execution at tests/format/printf.c:281 TEST 158: OK: Expected execution at tests/format/printf.c:282 TEST 159: OK: Expected execution at tests/format/printf.c:282 TEST 160: OK: Expected execution at tests/format/printf.c:282 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [t] to format specifier [f] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [t] to format specifier [f] TEST 161: OK: Expected signal at tests/format/printf.c:287 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [t] to format specifier [F] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [t] to format specifier [F] TEST 162: OK: Expected signal at tests/format/printf.c:287 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [t] to format specifier [e] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [t] to format specifier [e] TEST 163: OK: Expected signal at tests/format/printf.c:287 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [t] to format specifier [E] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [t] to format specifier [E] TEST 164: OK: Expected signal at tests/format/printf.c:287 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [t] to format specifier [g] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [t] to format specifier [g] TEST 165: OK: Expected signal at tests/format/printf.c:287 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [t] to format specifier [G] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [t] to format specifier [G] TEST 166: OK: Expected signal at tests/format/printf.c:287 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [t] to format specifier [a] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [t] to format specifier [a] TEST 167: OK: Expected signal at tests/format/printf.c:287 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [t] to format specifier [A] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [t] to format specifier [A] TEST 168: OK: Expected signal at tests/format/printf.c:287 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [t] to format specifier [c] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [t] to format specifier [c] TEST 169: OK: Expected signal at tests/format/printf.c:287 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [t] to format specifier [s] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [t] to format specifier [s] TEST 170: OK: Expected signal at tests/format/printf.c:287 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [t] to format specifier [p] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [t] to format specifier [p] TEST 171: OK: Expected signal at tests/format/printf.c:287 TEST 172: OK: Expected execution at tests/format/printf.c:289 TEST 173: OK: Expected execution at tests/format/printf.c:289 @@ -255,23 +255,23 @@ TEST 175: OK: Expected execution at tests/format/printf.c:290 TEST 176: OK: Expected execution at tests/format/printf.c:295 TEST 177: OK: Expected execution at tests/format/printf.c:295 TEST 178: OK: Expected execution at tests/format/printf.c:296 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [L] to format specifier [d] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [L] to format specifier [d] TEST 179: OK: Expected signal at tests/format/printf.c:299 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [L] to format specifier [i] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [L] to format specifier [i] TEST 180: OK: Expected signal at tests/format/printf.c:299 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [L] to format specifier [o] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [L] to format specifier [o] TEST 181: OK: Expected signal at tests/format/printf.c:299 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [L] to format specifier [u] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [L] to format specifier [u] TEST 182: OK: Expected signal at tests/format/printf.c:299 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [L] to format specifier [x] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [L] to format specifier [x] TEST 183: OK: Expected signal at tests/format/printf.c:299 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [L] to format specifier [c] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [L] to format specifier [c] TEST 184: OK: Expected signal at tests/format/printf.c:299 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [L] to format specifier [s] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [L] to format specifier [s] TEST 185: OK: Expected signal at tests/format/printf.c:299 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [L] to format specifier [p] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [L] to format specifier [p] TEST 186: OK: Expected signal at tests/format/printf.c:299 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of length modifier [L] to format specifier [n] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of length modifier [L] to format specifier [n] TEST 187: OK: Expected signal at tests/format/printf.c:299 TEST 188: OK: Expected execution at tests/format/printf.c:300 TEST 189: OK: Expected execution at tests/format/printf.c:300 @@ -550,11 +550,11 @@ printf: directive 1 ('%n') expects argument of type 'int*' but the corresponding TEST 368: OK: Expected signal at tests/format/printf.c:460 printf: argument 0 of directive %n not allocated or writeable TEST 369: OK: Expected signal at tests/format/printf.c:461 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of flag ['] to format specifier [n] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of flag ['] to format specifier [n] TEST 370: OK: Expected signal at tests/format/printf.c:464 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of flag [0] to format specifier [n] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of flag [0] to format specifier [n] TEST 371: OK: Expected signal at tests/format/printf.c:465 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of flag [#] to format specifier [n] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of flag [#] to format specifier [n] TEST 372: OK: Expected signal at tests/format/printf.c:466 Format error: one of more flags with [n] specifier TEST 373: OK: Expected signal at tests/format/printf.c:467 @@ -562,11 +562,11 @@ Format error: one of more flags with [n] specifier TEST 374: OK: Expected signal at tests/format/printf.c:468 Format error: one of more flags with [n] specifier TEST 375: OK: Expected signal at tests/format/printf.c:469 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of precision [.] to format specifier [n] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of precision [.] to format specifier [n] TEST 376: OK: Expected signal at tests/format/printf.c:470 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of precision [.] to format specifier [n] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of precision [.] to format specifier [n] TEST 377: OK: Expected signal at tests/format/printf.c:471 -FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:541: Format error: wrong application of precision [.] to format specifier [n] +FRAMAC_SHARE/e-acsl/libc_replacements/e_acsl_stdio.c:542: Format error: wrong application of precision [.] to format specifier [n] TEST 378: OK: Expected signal at tests/format/printf.c:472 Format error: field width used with [n] specifier TEST 379: OK: Expected signal at tests/format/printf.c:473 diff --git a/src/plugins/e-acsl/tests/format/oracle_dev/sprintf.e-acsl.err.log b/src/plugins/e-acsl/tests/format/oracle_dev/sprintf.e-acsl.err.log new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/plugins/e-acsl/tests/format/sprintf.c b/src/plugins/e-acsl/tests/format/sprintf.c new file mode 100644 index 00000000000..9e821831938 --- /dev/null +++ b/src/plugins/e-acsl/tests/format/sprintf.c @@ -0,0 +1,34 @@ +/* run.config_ci,run.config_dev + COMMENT: Check memory tracking of sprintf built-ins +*/ + +#include <stdio.h> + +int main() { + { + char buf[4]; + //@ assert !\initialized(&buf[0..3]); + + sprintf(buf, "%d", 10); + //@ assert \initialized(&buf[0..2]); + //@ assert !\initialized(&buf[3]); + } + { // snprintf with n < what would be printed + char buf[4]; + //@ assert !\initialized(&buf[0..3]); + + snprintf(buf, 2, "%d", 10); + //@ assert \initialized(&buf[0..1]); + //@ assert !\initialized(&buf[2]); + //@ assert !\initialized(&buf[3]); + } + { // snprintf with n >= what would be printed + char buf[4]; + //@ assert !\initialized(&buf[0..3]); + + snprintf(buf, 4, "%d", 10); + //@ assert \initialized(&buf[0..2]); + //@ assert !\initialized(&buf[3]); + } + return 0; +} diff --git a/src/plugins/e-acsl/tests/libc/file.c b/src/plugins/e-acsl/tests/libc/file.c new file mode 100644 index 00000000000..6a44a67ff09 --- /dev/null +++ b/src/plugins/e-acsl/tests/libc/file.c @@ -0,0 +1,40 @@ +/* run.config + COMMENT: Test non built-in `fread` memory tracking +*/ + +#include <stdio.h> + +int main() { + int buf[6]; + FILE *f = fopen("/dev/urandom", "r"); + // we assume this fopen will always succeed, + // to ensure the code below is always tested + int res = fread(buf+1, sizeof(int), 4, f); + //@ assert !\initialized(&buf[0]); + if (res == 0) { + //@ assert !\initialized(&buf[1]); + } + if (res >= 1) { + //@ assert \initialized(&buf[1]); + } + if (res >= 2) { + //@ assert \initialized(&buf[2]); + } + if (res >= 3) { + //@ assert \initialized(&buf[3]); + } + if (res >= 4) { + //@ assert \initialized(&buf[4]); + } + //@ assert !\initialized(&buf[5]); + + // intentionally do not read the return value; + // but we suppose in this test that it will always succeed + // and read 4 elements + int buf2[6]; + fread(buf2+1, sizeof(int), 4, f); + //@ assert !\initialized(&buf2[0]); + //@ assert \initialized(&buf2[1..4]); + //@ assert !\initialized(&buf2[5]); + return 0; +} diff --git a/src/plugins/e-acsl/tests/libc/mem.c b/src/plugins/e-acsl/tests/libc/mem.c new file mode 100644 index 00000000000..a8b038156bb --- /dev/null +++ b/src/plugins/e-acsl/tests/libc/mem.c @@ -0,0 +1,30 @@ +/* run.config + COMMENT: Test non built-in `memset`, `memcpy` and `memmove` memory tracking +*/ + +#include <string.h> + +int main() { + char a[2]; + memset(a, 1, 1); + //@assert \initialized(&a[0]); + //@assert !\initialized(&a[1]); + memset(a+1, 1, 1); + //@assert \initialized(&a[1]); + int b[5]; + memset(&b[2], 42, 2*sizeof(b[0])); + //@assert !\initialized(&b[0]); + //@assert !\initialized(&b[1]); + //@assert \initialized(&b[2..3]); + //@assert !\initialized(&b[4]); + + char c[4]; + memcpy(c+1, a, 2); + //@assert !\initialized(&c[0]); + //@assert \initialized(&c[1..2]); + //@assert !\initialized(&c[3]); + + memmove(c, c+1, 2); + //@ assert \initialized(&c[0..2]); + //@ assert !\initialized(&c[3]); +} diff --git a/src/plugins/e-acsl/tests/libc/oracle/file.res.oracle b/src/plugins/e-acsl/tests/libc/oracle/file.res.oracle new file mode 100644 index 00000000000..12656044ebd --- /dev/null +++ b/src/plugins/e-acsl/tests/libc/oracle/file.res.oracle @@ -0,0 +1,52 @@ +[e-acsl] beginning translation. +[e-acsl] Warning: annotating undefined function `fopen': + the generated program may miss memory instrumentation + if there are memory-related annotations. +[e-acsl] FRAMAC_SHARE/libc/stdio.h:350: Warning: + E-ACSL construct `assigns clause in behavior' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/stdio.h:150: Warning: + E-ACSL construct `logic functions with labels' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/stdio.h:151: Warning: + E-ACSL construct `logic functions with labels' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/stdio.h:149: Warning: + E-ACSL construct `assigns clause in behavior' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/stdio.h:155: Warning: + E-ACSL construct `predicate with no definition nor reads clause' + is not yet supported. + Ignoring annotation. +[e-acsl] translation done in project "e-acsl". +[eva:alarm] tests/libc/file.c:12: Warning: + function __gen_e_acsl_fread: precondition 'valid_stream' got status unknown. +[eva:alarm] FRAMAC_SHARE/libc/stdio.h:351: Warning: + function __e_acsl_assert, behavior blocking: precondition got status unknown. +[eva:alarm] FRAMAC_SHARE/libc/stdio.h:351: Warning: + function __e_acsl_assert, behavior blocking: precondition got status invalid. +[eva:alarm] FRAMAC_SHARE/libc/stdio.h:352: Warning: + function __e_acsl_assert, behavior blocking: precondition got status invalid. +[eva:alarm] FRAMAC_SHARE/libc/stdio.h:350: Warning: + function __e_acsl_assert, behavior blocking: precondition got status unknown. +[eva:alarm] FRAMAC_SHARE/libc/stdio.h:357: Warning: + function __e_acsl_assert, behavior blocking: precondition got status unknown. +[eva:alarm] FRAMAC_SHARE/libc/stdio.h:357: Warning: + function __e_acsl_assert, behavior blocking: precondition got status invalid. +[eva:alarm] FRAMAC_SHARE/libc/stdio.h:357: Warning: + function __gen_e_acsl_fread: postcondition 'initialization' got status unknown. +[eva:alarm] tests/libc/file.c:15: Warning: + function __e_acsl_assert, behavior blocking: precondition got status invalid. +[eva:alarm] tests/libc/file.c:15: Warning: assertion got status unknown. +[eva:alarm] tests/libc/file.c:18: Warning: + function __e_acsl_assert, behavior blocking: precondition got status invalid. +[eva:alarm] tests/libc/file.c:21: Warning: + function __e_acsl_assert, behavior blocking: precondition got status invalid. +[eva:alarm] tests/libc/file.c:24: Warning: + function __e_acsl_assert, behavior blocking: precondition got status invalid. +[eva:alarm] tests/libc/file.c:27: Warning: + function __e_acsl_assert, behavior blocking: precondition got status invalid. +[eva:alarm] tests/libc/file.c:35: Warning: + function __gen_e_acsl_fread: precondition 'valid_stream' got status unknown. +[eva:alarm] tests/libc/file.c:37: Warning: + function __e_acsl_assert, behavior blocking: precondition got status invalid. diff --git a/src/plugins/e-acsl/tests/libc/oracle/gen_file.c b/src/plugins/e-acsl/tests/libc/oracle/gen_file.c new file mode 100644 index 00000000000..c6b6e713f91 --- /dev/null +++ b/src/plugins/e-acsl/tests/libc/oracle/gen_file.c @@ -0,0 +1,434 @@ +/* Generated by Frama-C */ +#include "stddef.h" +#include "stdio.h" +char *__gen_e_acsl_literal_string; +char *__gen_e_acsl_literal_string_2; +extern __attribute__((__FC_BUILTIN__)) int __e_acsl_sound_verdict; + +/*@ requires valid_filename: valid_read_string(filename); + requires valid_mode: valid_read_string(mode); + ensures + result_null_or_valid_fd: + \result ≡ \null ∨ \subset(\result, &__fc_fopen[0 .. 16 - 1]); + assigns \result; + assigns \result + \from (indirect: *(filename + (0 .. strlen{Old}(filename)))), + (indirect: *(mode + (0 .. strlen{Old}(mode)))), __fc_p_fopen; + */ +FILE *__gen_e_acsl_fopen(char const * restrict filename, + char const * restrict mode); + +/*@ requires valid_ptr_block: \valid((char *)ptr + (0 .. nmemb * size - 1)); + requires valid_stream: \valid(stream); + ensures size_read: \result ≤ \old(nmemb); + ensures + initialization: + \initialized((char *)\old(ptr) + (0 .. \result * \old(size) - 1)); + assigns *((char *)ptr + (0 .. nmemb * size - 1)), *stream, \result; + assigns *((char *)ptr + (0 .. nmemb * size - 1)) + \from (indirect: size), (indirect: nmemb), (indirect: *stream); + assigns *stream + \from (indirect: size), (indirect: nmemb), (indirect: *stream); + assigns \result \from size, (indirect: *stream); + */ +size_t __gen_e_acsl_fread(void * restrict ptr, size_t size, size_t nmemb, + FILE * restrict stream); + +/*@ requires valid_ptr_block: \valid((char *)ptr + (0 .. nmemb * size - 1)); + requires valid_stream: \valid(stream); + ensures size_read: \result ≤ \old(nmemb); + ensures + initialization: + \initialized((char *)\old(ptr) + (0 .. \result * \old(size) - 1)); + assigns *((char *)ptr + (0 .. nmemb * size - 1)), *stream, \result; + assigns *((char *)ptr + (0 .. nmemb * size - 1)) + \from (indirect: size), (indirect: nmemb), (indirect: *stream); + assigns *stream + \from (indirect: size), (indirect: nmemb), (indirect: *stream); + assigns \result \from size, (indirect: *stream); + */ +size_t __gen_e_acsl_fread(void * restrict ptr, size_t size, size_t nmemb, + FILE * restrict stream) +{ + __e_acsl_mpz_t __gen_e_acsl_at_3; + void *__gen_e_acsl_at_2; + size_t __gen_e_acsl_at; + size_t __retres; + { + __e_acsl_mpz_t __gen_e_acsl_size; + __e_acsl_mpz_t __gen_e_acsl_sizeof; + __e_acsl_mpz_t __gen_e_acsl_nmemb; + __e_acsl_mpz_t __gen_e_acsl_size_2; + __e_acsl_mpz_t __gen_e_acsl_mul; + __e_acsl_mpz_t __gen_e_acsl_; + __e_acsl_mpz_t __gen_e_acsl_sub; + __e_acsl_mpz_t __gen_e_acsl__2; + __e_acsl_mpz_t __gen_e_acsl_sub_2; + __e_acsl_mpz_t __gen_e_acsl_add; + __e_acsl_mpz_t __gen_e_acsl_mul_2; + int __gen_e_acsl_le; + __e_acsl_mpz_t __gen_e_acsl_if; + __e_acsl_mpz_t __gen_e_acsl__4; + int __gen_e_acsl_le_2; + unsigned long __gen_e_acsl_size_3; + int __gen_e_acsl_valid; + int __gen_e_acsl_valid_2; + __e_acsl_store_block((void *)(& stream),(size_t)8); + __e_acsl_store_block((void *)(& ptr),(size_t)8); + __gmpz_init_set_si(__gen_e_acsl_sizeof,1L); + __gmpz_init_set_ui(__gen_e_acsl_nmemb,nmemb); + __gmpz_init_set_ui(__gen_e_acsl_size_2,size); + __gmpz_init(__gen_e_acsl_mul); + __gmpz_mul(__gen_e_acsl_mul, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_nmemb), + (__e_acsl_mpz_struct const *)(__gen_e_acsl_size_2)); + __gmpz_init_set_si(__gen_e_acsl_,1L); + __gmpz_init(__gen_e_acsl_sub); + __gmpz_sub(__gen_e_acsl_sub, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_mul), + (__e_acsl_mpz_struct const *)(__gen_e_acsl_)); + __gmpz_init_set_si(__gen_e_acsl__2,0L); + __gmpz_init(__gen_e_acsl_sub_2); + __gmpz_sub(__gen_e_acsl_sub_2, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__2)); + __gmpz_init(__gen_e_acsl_add); + __gmpz_add(__gen_e_acsl_add, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub_2), + (__e_acsl_mpz_struct const *)(__gen_e_acsl_)); + __gmpz_init(__gen_e_acsl_mul_2); + __gmpz_mul(__gen_e_acsl_mul_2, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_sizeof), + (__e_acsl_mpz_struct const *)(__gen_e_acsl_add)); + __gmpz_init_set(__gen_e_acsl_size, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_mul_2)); + __gen_e_acsl_le = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_size), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__2)); + if (__gen_e_acsl_le <= 0) { + __e_acsl_mpz_t __gen_e_acsl__3; + __gmpz_init_set_si(__gen_e_acsl__3,0L); + __gmpz_init_set(__gen_e_acsl_if, + (__e_acsl_mpz_struct const *)(__gen_e_acsl__3)); + __gmpz_clear(__gen_e_acsl__3); + } + else __gmpz_init_set(__gen_e_acsl_if, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_size)); + __gmpz_init_set_ui(__gen_e_acsl__4,18446744073709551615UL); + __gen_e_acsl_le_2 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_if), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__4)); + __e_acsl_assert(__gen_e_acsl_le_2 <= 0,1,"RTE","fread", + "offset_lesser_or_eq_than_SIZE_MAX:\n (\\let size = sizeof(char) * (((nmemb * size - 1) - 0) + 1);\n size <= 0? 0: size)\n <= 18446744073709551615", + "FRAMAC_SHARE/libc/stdio.h",351); + __gen_e_acsl_size_3 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_if)); + __gen_e_acsl_valid = __e_acsl_valid((void *)((char *)ptr + 1 * 0), + __gen_e_acsl_size_3,ptr, + (void *)(& ptr)); + __e_acsl_assert(__gen_e_acsl_valid,1,"Precondition","fread", + "valid_ptr_block: \\valid((char *)ptr + (0 .. nmemb * size - 1))", + "FRAMAC_SHARE/libc/stdio.h",351); + __gen_e_acsl_valid_2 = __e_acsl_valid((void *)stream,sizeof(FILE), + (void *)stream,(void *)(& stream)); + __e_acsl_assert(__gen_e_acsl_valid_2,1,"Precondition","fread", + "valid_stream: \\valid(stream)", + "FRAMAC_SHARE/libc/stdio.h",352); + __gmpz_clear(__gen_e_acsl_size); + __gmpz_clear(__gen_e_acsl_sizeof); + __gmpz_clear(__gen_e_acsl_nmemb); + __gmpz_clear(__gen_e_acsl_size_2); + __gmpz_clear(__gen_e_acsl_mul); + __gmpz_clear(__gen_e_acsl_); + __gmpz_clear(__gen_e_acsl_sub); + __gmpz_clear(__gen_e_acsl__2); + __gmpz_clear(__gen_e_acsl_sub_2); + __gmpz_clear(__gen_e_acsl_add); + __gmpz_clear(__gen_e_acsl_mul_2); + __gmpz_clear(__gen_e_acsl_if); + __gmpz_clear(__gen_e_acsl__4); + } + { + __e_acsl_mpz_t __gen_e_acsl_size_7; + __gmpz_init_set_ui(__gen_e_acsl_size_7,size); + __gmpz_init_set(__gen_e_acsl_at_3, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_size_7)); + __gmpz_clear(__gen_e_acsl_size_7); + } + __gen_e_acsl_at_2 = ptr; + __gen_e_acsl_at = nmemb; + __retres = fread(ptr,size,nmemb,stream); + { + __e_acsl_mpz_t __gen_e_acsl___retres; + __e_acsl_mpz_t __gen_e_acsl_size_4; + __e_acsl_mpz_t __gen_e_acsl_mul_3; + __e_acsl_mpz_t __gen_e_acsl__5; + int __gen_e_acsl_le_3; + unsigned long __gen_e_acsl_size_5; + __gmpz_init_set_ui(__gen_e_acsl___retres,__retres); + __gmpz_init_set_ui(__gen_e_acsl_size_4,size); + __gmpz_init(__gen_e_acsl_mul_3); + __gmpz_mul(__gen_e_acsl_mul_3, + (__e_acsl_mpz_struct const *)(__gen_e_acsl___retres), + (__e_acsl_mpz_struct const *)(__gen_e_acsl_size_4)); + __gmpz_init_set_ui(__gen_e_acsl__5,18446744073709551615UL); + __gen_e_acsl_le_3 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_mul_3), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__5)); + __e_acsl_assert(__gen_e_acsl_le_3 <= 0,1,"RTE","fread", + "size_lesser_or_eq_than_SIZE_MAX: __retres * size <= 18446744073709551615", + "FRAMAC_SHARE/libc/stdio.h",350); + __gen_e_acsl_size_5 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_mul_3)); + __e_acsl_initialize(ptr,__gen_e_acsl_size_5); + __gmpz_clear(__gen_e_acsl___retres); + __gmpz_clear(__gen_e_acsl_size_4); + __gmpz_clear(__gen_e_acsl_mul_3); + __gmpz_clear(__gen_e_acsl__5); + } + { + __e_acsl_mpz_t __gen_e_acsl_size_6; + __e_acsl_mpz_t __gen_e_acsl_sizeof_2; + __e_acsl_mpz_t __gen_e_acsl_result; + __e_acsl_mpz_t __gen_e_acsl_mul_4; + __e_acsl_mpz_t __gen_e_acsl__6; + __e_acsl_mpz_t __gen_e_acsl_sub_3; + __e_acsl_mpz_t __gen_e_acsl__7; + __e_acsl_mpz_t __gen_e_acsl_sub_4; + __e_acsl_mpz_t __gen_e_acsl_add_2; + __e_acsl_mpz_t __gen_e_acsl_mul_5; + int __gen_e_acsl_le_4; + __e_acsl_mpz_t __gen_e_acsl_if_2; + __e_acsl_mpz_t __gen_e_acsl__9; + int __gen_e_acsl_le_5; + unsigned long __gen_e_acsl_size_8; + int __gen_e_acsl_initialized; + __e_acsl_assert(__retres <= __gen_e_acsl_at,1,"Postcondition","fread", + "size_read: \\result <= \\old(nmemb)", + "FRAMAC_SHARE/libc/stdio.h",356); + __gmpz_init_set_si(__gen_e_acsl_sizeof_2,1L); + __gmpz_init_set_ui(__gen_e_acsl_result,__retres); + __gmpz_init(__gen_e_acsl_mul_4); + __gmpz_mul(__gen_e_acsl_mul_4, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_result), + (__e_acsl_mpz_struct const *)(__gen_e_acsl_at_3)); + __gmpz_init_set_si(__gen_e_acsl__6,1L); + __gmpz_init(__gen_e_acsl_sub_3); + __gmpz_sub(__gen_e_acsl_sub_3, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_mul_4), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__6)); + __gmpz_init_set_si(__gen_e_acsl__7,0L); + __gmpz_init(__gen_e_acsl_sub_4); + __gmpz_sub(__gen_e_acsl_sub_4, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub_3), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__7)); + __gmpz_init(__gen_e_acsl_add_2); + __gmpz_add(__gen_e_acsl_add_2, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub_4), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__6)); + __gmpz_init(__gen_e_acsl_mul_5); + __gmpz_mul(__gen_e_acsl_mul_5, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_sizeof_2), + (__e_acsl_mpz_struct const *)(__gen_e_acsl_add_2)); + __gmpz_init_set(__gen_e_acsl_size_6, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_mul_5)); + __gen_e_acsl_le_4 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_size_6), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__7)); + if (__gen_e_acsl_le_4 <= 0) { + __e_acsl_mpz_t __gen_e_acsl__8; + __gmpz_init_set_si(__gen_e_acsl__8,0L); + __gmpz_init_set(__gen_e_acsl_if_2, + (__e_acsl_mpz_struct const *)(__gen_e_acsl__8)); + __gmpz_clear(__gen_e_acsl__8); + } + else __gmpz_init_set(__gen_e_acsl_if_2, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_size_6)); + __gmpz_init_set_ui(__gen_e_acsl__9,18446744073709551615UL); + __gen_e_acsl_le_5 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_if_2), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__9)); + __e_acsl_assert(__gen_e_acsl_le_5 <= 0,1,"RTE","fread", + "offset_lesser_or_eq_than_SIZE_MAX:\n (\\let size = sizeof(char) * (((\\result * \\old(size) - 1) - 0) + 1);\n size <= 0? 0: size)\n <= 18446744073709551615", + "FRAMAC_SHARE/libc/stdio.h",357); + __gen_e_acsl_size_8 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_if_2)); + __gen_e_acsl_initialized = __e_acsl_initialized((void *)((char *)__gen_e_acsl_at_2 + + 1 * 0), + __gen_e_acsl_size_8); + __e_acsl_assert(__gen_e_acsl_initialized,1,"Postcondition","fread", + "initialization:\n \\initialized((char *)\\old(ptr) + (0 .. \\result * \\old(size) - 1))", + "FRAMAC_SHARE/libc/stdio.h",357); + __e_acsl_delete_block((void *)(& stream)); + __e_acsl_delete_block((void *)(& ptr)); + __gmpz_clear(__gen_e_acsl_size_6); + __gmpz_clear(__gen_e_acsl_sizeof_2); + __gmpz_clear(__gen_e_acsl_result); + __gmpz_clear(__gen_e_acsl_mul_4); + __gmpz_clear(__gen_e_acsl__6); + __gmpz_clear(__gen_e_acsl_sub_3); + __gmpz_clear(__gen_e_acsl__7); + __gmpz_clear(__gen_e_acsl_sub_4); + __gmpz_clear(__gen_e_acsl_add_2); + __gmpz_clear(__gen_e_acsl_mul_5); + __gmpz_clear(__gen_e_acsl_if_2); + __gmpz_clear(__gen_e_acsl__9); + __gmpz_clear(__gen_e_acsl_at_3); + return __retres; + } +} + +/*@ requires valid_filename: valid_read_string(filename); + requires valid_mode: valid_read_string(mode); + ensures + result_null_or_valid_fd: + \result ≡ \null ∨ \subset(\result, &__fc_fopen[0 .. 16 - 1]); + assigns \result; + assigns \result + \from (indirect: *(filename + (0 .. strlen{Old}(filename)))), + (indirect: *(mode + (0 .. strlen{Old}(mode)))), __fc_p_fopen; + */ +FILE *__gen_e_acsl_fopen(char const * restrict filename, + char const * restrict mode) +{ + FILE *__retres; + __e_acsl_store_block((void *)(& __retres),(size_t)8); + __retres = fopen(filename,mode); + __e_acsl_delete_block((void *)(& __retres)); + return __retres; +} + +void __e_acsl_globals_init(void) +{ + static char __e_acsl_already_run = 0; + if (! __e_acsl_already_run) { + __e_acsl_already_run = 1; + __gen_e_acsl_literal_string = "r"; + __e_acsl_store_block((void *)__gen_e_acsl_literal_string,sizeof("r")); + __e_acsl_full_init((void *)__gen_e_acsl_literal_string); + __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string); + __gen_e_acsl_literal_string_2 = "/dev/urandom"; + __e_acsl_store_block((void *)__gen_e_acsl_literal_string_2, + sizeof("/dev/urandom")); + __e_acsl_full_init((void *)__gen_e_acsl_literal_string_2); + __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string_2); + } + return; +} + +int main(void) +{ + int __retres; + int buf[6]; + size_t tmp_0; + int buf2[6]; + __e_acsl_memory_init((int *)0,(char ***)0,(size_t)8); + __e_acsl_globals_init(); + __e_acsl_store_block((void *)(buf2),(size_t)24); + __e_acsl_store_block((void *)(buf),(size_t)24); + FILE *f = + __gen_e_acsl_fopen(__gen_e_acsl_literal_string_2, + __gen_e_acsl_literal_string); + __e_acsl_store_block((void *)(& f),(size_t)8); + __e_acsl_full_init((void *)(& f)); + tmp_0 = __gen_e_acsl_fread((void *)(& buf[1]),sizeof(int),(unsigned long)4, + f); + int res = (int)tmp_0; + { + int __gen_e_acsl_initialized; + __gen_e_acsl_initialized = __e_acsl_initialized((void *)(buf), + sizeof(int)); + __e_acsl_assert(! __gen_e_acsl_initialized,1,"Assertion","main", + "!\\initialized((int *)buf)","tests/libc/file.c",13); + } + /*@ assert ¬\initialized((int *)buf); */ ; + if (res == 0) { + { + int __gen_e_acsl_initialized_2; + __gen_e_acsl_initialized_2 = __e_acsl_initialized((void *)(& buf[1]), + sizeof(int)); + __e_acsl_assert(! __gen_e_acsl_initialized_2,1,"Assertion","main", + "!\\initialized(&buf[1])","tests/libc/file.c",15); + } + /*@ assert ¬\initialized(&buf[1]); */ ; + } + if (res >= 1) { + { + int __gen_e_acsl_initialized_3; + __gen_e_acsl_initialized_3 = __e_acsl_initialized((void *)(& buf[1]), + sizeof(int)); + __e_acsl_assert(__gen_e_acsl_initialized_3,1,"Assertion","main", + "\\initialized(&buf[1])","tests/libc/file.c",18); + } + /*@ assert \initialized(&buf[1]); */ ; + } + if (res >= 2) { + { + int __gen_e_acsl_initialized_4; + __gen_e_acsl_initialized_4 = __e_acsl_initialized((void *)(& buf[2]), + sizeof(int)); + __e_acsl_assert(__gen_e_acsl_initialized_4,1,"Assertion","main", + "\\initialized(&buf[2])","tests/libc/file.c",21); + } + /*@ assert \initialized(&buf[2]); */ ; + } + if (res >= 3) { + { + int __gen_e_acsl_initialized_5; + __gen_e_acsl_initialized_5 = __e_acsl_initialized((void *)(& buf[3]), + sizeof(int)); + __e_acsl_assert(__gen_e_acsl_initialized_5,1,"Assertion","main", + "\\initialized(&buf[3])","tests/libc/file.c",24); + } + /*@ assert \initialized(&buf[3]); */ ; + } + if (res >= 4) { + { + int __gen_e_acsl_initialized_6; + __gen_e_acsl_initialized_6 = __e_acsl_initialized((void *)(& buf[4]), + sizeof(int)); + __e_acsl_assert(__gen_e_acsl_initialized_6,1,"Assertion","main", + "\\initialized(&buf[4])","tests/libc/file.c",27); + } + /*@ assert \initialized(&buf[4]); */ ; + } + { + int __gen_e_acsl_initialized_7; + __gen_e_acsl_initialized_7 = __e_acsl_initialized((void *)(& buf[5]), + sizeof(int)); + __e_acsl_assert(! __gen_e_acsl_initialized_7,1,"Assertion","main", + "!\\initialized(&buf[5])","tests/libc/file.c",29); + } + /*@ assert ¬\initialized(&buf[5]); */ ; + __gen_e_acsl_fread((void *)(& buf2[1]),sizeof(int),(unsigned long)4,f); + { + int __gen_e_acsl_initialized_8; + __gen_e_acsl_initialized_8 = __e_acsl_initialized((void *)(buf2), + sizeof(int)); + __e_acsl_assert(! __gen_e_acsl_initialized_8,1,"Assertion","main", + "!\\initialized((int *)buf2)","tests/libc/file.c",36); + } + /*@ assert ¬\initialized((int *)buf2); */ ; + { + int __gen_e_acsl_size; + int __gen_e_acsl_if; + int __gen_e_acsl_initialized_9; + __gen_e_acsl_size = 4 * ((4 - 1) + 1); + if (__gen_e_acsl_size <= 0) __gen_e_acsl_if = 0; + else __gen_e_acsl_if = __gen_e_acsl_size; + __gen_e_acsl_initialized_9 = __e_acsl_initialized((void *)((char *)(buf2) + + 4 * 1), + (size_t)__gen_e_acsl_if); + __e_acsl_assert(__gen_e_acsl_initialized_9,1,"Assertion","main", + "\\initialized(&buf2[1 .. 4])","tests/libc/file.c",37); + } + /*@ assert \initialized(&buf2[1 .. 4]); */ ; + { + int __gen_e_acsl_initialized_10; + __gen_e_acsl_initialized_10 = __e_acsl_initialized((void *)(& buf2[5]), + sizeof(int)); + __e_acsl_assert(! __gen_e_acsl_initialized_10,1,"Assertion","main", + "!\\initialized(&buf2[5])","tests/libc/file.c",38); + } + /*@ assert ¬\initialized(&buf2[5]); */ ; + __retres = 0; + __e_acsl_delete_block((void *)(buf2)); + __e_acsl_delete_block((void *)(& f)); + __e_acsl_delete_block((void *)(buf)); + __e_acsl_memory_clean(); + return __retres; +} + + diff --git a/src/plugins/e-acsl/tests/libc/oracle/gen_mem.c b/src/plugins/e-acsl/tests/libc/oracle/gen_mem.c new file mode 100644 index 00000000000..2416c3eb591 --- /dev/null +++ b/src/plugins/e-acsl/tests/libc/oracle/gen_mem.c @@ -0,0 +1,351 @@ +/* Generated by Frama-C */ +#include "stddef.h" +#include "stdio.h" +#include "string.h" +extern __attribute__((__FC_BUILTIN__)) int __e_acsl_sound_verdict; + +/*@ requires valid_dest: valid_or_empty(dest, n); + requires valid_src: valid_read_or_empty(src, n); + requires + separation: + \separated((char *)dest + (0 .. n - 1), (char *)src + (0 .. n - 1)); + ensures + copied_contents: + memcmp{Post, Pre}((char *)\old(dest), (char *)\old(src), \old(n)) ≡ + 0; + ensures result_ptr: \result ≡ \old(dest); + assigns *((char *)dest + (0 .. n - 1)), \result; + assigns *((char *)dest + (0 .. n - 1)) + \from *((char *)src + (0 .. n - 1)); + assigns \result \from dest; + */ +void *__gen_e_acsl_memcpy(void * restrict dest, void const * restrict src, + size_t n); + +/*@ requires valid_dest: valid_or_empty(dest, n); + requires valid_src: valid_read_or_empty(src, n); + ensures + copied_contents: + memcmp{Post, Pre}((char *)\old(dest), (char *)\old(src), \old(n)) ≡ + 0; + ensures result_ptr: \result ≡ \old(dest); + assigns *((char *)dest + (0 .. n - 1)), \result; + assigns *((char *)dest + (0 .. n - 1)) + \from *((char *)src + (0 .. n - 1)); + assigns \result \from dest; + */ +void *__gen_e_acsl_memmove(void *dest, void const *src, size_t n); + +/*@ requires valid_s: valid_or_empty(s, n); + ensures + acsl_c_equiv: memset((char *)\old(s), \old(c), \old(n)) ≡ \true; + ensures result_ptr: \result ≡ \old(s); + assigns *((char *)s + (0 .. n - 1)), \result; + assigns *((char *)s + (0 .. n - 1)) \from c; + assigns \result \from s; + */ +void *__gen_e_acsl_memset(void *s, int c, size_t n); + +int main(void) +{ + int __retres; + char a[2]; + int b[5]; + char c[4]; + __e_acsl_memory_init((int *)0,(char ***)0,(size_t)8); + __e_acsl_store_block((void *)(c),(size_t)4); + __e_acsl_store_block((void *)(b),(size_t)20); + __e_acsl_store_block((void *)(a),(size_t)2); + __gen_e_acsl_memset((void *)(a),1,(unsigned long)1); + { + int __gen_e_acsl_initialized; + __gen_e_acsl_initialized = __e_acsl_initialized((void *)(a),sizeof(char)); + __e_acsl_assert(__gen_e_acsl_initialized,1,"Assertion","main", + "\\initialized((char *)a)","tests/libc/mem.c",10); + } + /*@ assert \initialized((char *)a); */ ; + { + int __gen_e_acsl_initialized_2; + __gen_e_acsl_initialized_2 = __e_acsl_initialized((void *)(& a[1]), + sizeof(char)); + __e_acsl_assert(! __gen_e_acsl_initialized_2,1,"Assertion","main", + "!\\initialized(&a[1])","tests/libc/mem.c",11); + } + /*@ assert ¬\initialized(&a[1]); */ ; + __gen_e_acsl_memset((void *)(& a[1]),1,(unsigned long)1); + { + int __gen_e_acsl_initialized_3; + __gen_e_acsl_initialized_3 = __e_acsl_initialized((void *)(& a[1]), + sizeof(char)); + __e_acsl_assert(__gen_e_acsl_initialized_3,1,"Assertion","main", + "\\initialized(&a[1])","tests/libc/mem.c",13); + } + /*@ assert \initialized(&a[1]); */ ; + __gen_e_acsl_memset((void *)(& b[2]),42,(unsigned long)2 * sizeof(b[0])); + { + int __gen_e_acsl_initialized_4; + __gen_e_acsl_initialized_4 = __e_acsl_initialized((void *)(b), + sizeof(int)); + __e_acsl_assert(! __gen_e_acsl_initialized_4,1,"Assertion","main", + "!\\initialized((int *)b)","tests/libc/mem.c",16); + } + /*@ assert ¬\initialized((int *)b); */ ; + { + int __gen_e_acsl_initialized_5; + __gen_e_acsl_initialized_5 = __e_acsl_initialized((void *)(& b[1]), + sizeof(int)); + __e_acsl_assert(! __gen_e_acsl_initialized_5,1,"Assertion","main", + "!\\initialized(&b[1])","tests/libc/mem.c",17); + } + /*@ assert ¬\initialized(&b[1]); */ ; + { + int __gen_e_acsl_size; + int __gen_e_acsl_if; + int __gen_e_acsl_initialized_6; + __gen_e_acsl_size = 4 * ((3 - 2) + 1); + if (__gen_e_acsl_size <= 0) __gen_e_acsl_if = 0; + else __gen_e_acsl_if = __gen_e_acsl_size; + __gen_e_acsl_initialized_6 = __e_acsl_initialized((void *)((char *)(b) + + 4 * 2), + (size_t)__gen_e_acsl_if); + __e_acsl_assert(__gen_e_acsl_initialized_6,1,"Assertion","main", + "\\initialized(&b[2 .. 3])","tests/libc/mem.c",18); + } + /*@ assert \initialized(&b[2 .. 3]); */ ; + { + int __gen_e_acsl_initialized_7; + __gen_e_acsl_initialized_7 = __e_acsl_initialized((void *)(& b[4]), + sizeof(int)); + __e_acsl_assert(! __gen_e_acsl_initialized_7,1,"Assertion","main", + "!\\initialized(&b[4])","tests/libc/mem.c",19); + } + /*@ assert ¬\initialized(&b[4]); */ ; + __gen_e_acsl_memcpy((void *)(& c[1]),(void const *)(a),(unsigned long)2); + { + int __gen_e_acsl_initialized_8; + __gen_e_acsl_initialized_8 = __e_acsl_initialized((void *)(c), + sizeof(char)); + __e_acsl_assert(! __gen_e_acsl_initialized_8,1,"Assertion","main", + "!\\initialized((char *)c)","tests/libc/mem.c",23); + } + /*@ assert ¬\initialized((char *)c); */ ; + { + int __gen_e_acsl_size_2; + int __gen_e_acsl_if_2; + int __gen_e_acsl_initialized_9; + __gen_e_acsl_size_2 = 1 * ((2 - 1) + 1); + if (__gen_e_acsl_size_2 <= 0) __gen_e_acsl_if_2 = 0; + else __gen_e_acsl_if_2 = __gen_e_acsl_size_2; + __gen_e_acsl_initialized_9 = __e_acsl_initialized((void *)(c + 1 * 1), + (size_t)__gen_e_acsl_if_2); + __e_acsl_assert(__gen_e_acsl_initialized_9,1,"Assertion","main", + "\\initialized(&c[1 .. 2])","tests/libc/mem.c",24); + } + /*@ assert \initialized(&c[1 .. 2]); */ ; + { + int __gen_e_acsl_initialized_10; + __gen_e_acsl_initialized_10 = __e_acsl_initialized((void *)(& c[3]), + sizeof(char)); + __e_acsl_assert(! __gen_e_acsl_initialized_10,1,"Assertion","main", + "!\\initialized(&c[3])","tests/libc/mem.c",25); + } + /*@ assert ¬\initialized(&c[3]); */ ; + __gen_e_acsl_memmove((void *)(c),(void const *)(& c[1]),(unsigned long)2); + { + int __gen_e_acsl_size_3; + int __gen_e_acsl_if_3; + int __gen_e_acsl_initialized_11; + __gen_e_acsl_size_3 = 1 * ((2 - 0) + 1); + if (__gen_e_acsl_size_3 <= 0) __gen_e_acsl_if_3 = 0; + else __gen_e_acsl_if_3 = __gen_e_acsl_size_3; + __gen_e_acsl_initialized_11 = __e_acsl_initialized((void *)(c + 1 * 0), + (size_t)__gen_e_acsl_if_3); + __e_acsl_assert(__gen_e_acsl_initialized_11,1,"Assertion","main", + "\\initialized(&c[0 .. 2])","tests/libc/mem.c",28); + } + /*@ assert \initialized(&c[0 .. 2]); */ ; + { + int __gen_e_acsl_initialized_12; + __gen_e_acsl_initialized_12 = __e_acsl_initialized((void *)(& c[3]), + sizeof(char)); + __e_acsl_assert(! __gen_e_acsl_initialized_12,1,"Assertion","main", + "!\\initialized(&c[3])","tests/libc/mem.c",29); + } + /*@ assert ¬\initialized(&c[3]); */ ; + __retres = 0; + __e_acsl_delete_block((void *)(c)); + __e_acsl_delete_block((void *)(b)); + __e_acsl_delete_block((void *)(a)); + __e_acsl_memory_clean(); + return __retres; +} + +/*@ requires valid_s: valid_or_empty(s, n); + ensures + acsl_c_equiv: memset((char *)\old(s), \old(c), \old(n)) ≡ \true; + ensures result_ptr: \result ≡ \old(s); + assigns *((char *)s + (0 .. n - 1)), \result; + assigns *((char *)s + (0 .. n - 1)) \from c; + assigns \result \from s; + */ +void *__gen_e_acsl_memset(void *s, int c, size_t n) +{ + void *__gen_e_acsl_at; + void *__retres; + __e_acsl_store_block((void *)(& s),(size_t)8); + __gen_e_acsl_at = s; + __retres = memset(s,c,n); + __e_acsl_initialize(s,n); + __e_acsl_assert(__retres == __gen_e_acsl_at,1,"Postcondition","memset", + "result_ptr: \\result == \\old(s)", + "FRAMAC_SHARE/libc/string.h",135); + __e_acsl_delete_block((void *)(& s)); + return __retres; +} + +/*@ requires valid_dest: valid_or_empty(dest, n); + requires valid_src: valid_read_or_empty(src, n); + ensures + copied_contents: + memcmp{Post, Pre}((char *)\old(dest), (char *)\old(src), \old(n)) ≡ + 0; + ensures result_ptr: \result ≡ \old(dest); + assigns *((char *)dest + (0 .. n - 1)), \result; + assigns *((char *)dest + (0 .. n - 1)) + \from *((char *)src + (0 .. n - 1)); + assigns \result \from dest; + */ +void *__gen_e_acsl_memmove(void *dest, void const *src, size_t n) +{ + void *__gen_e_acsl_at; + void *__retres; + __e_acsl_store_block((void *)(& src),(size_t)8); + __e_acsl_store_block((void *)(& dest),(size_t)8); + __gen_e_acsl_at = dest; + __retres = memmove(dest,src,n); + __e_acsl_initialize(dest,n); + __e_acsl_assert(__retres == __gen_e_acsl_at,1,"Postcondition","memmove", + "result_ptr: \\result == \\old(dest)", + "FRAMAC_SHARE/libc/string.h",125); + __e_acsl_delete_block((void *)(& src)); + __e_acsl_delete_block((void *)(& dest)); + return __retres; +} + +/*@ requires valid_dest: valid_or_empty(dest, n); + requires valid_src: valid_read_or_empty(src, n); + requires + separation: + \separated((char *)dest + (0 .. n - 1), (char *)src + (0 .. n - 1)); + ensures + copied_contents: + memcmp{Post, Pre}((char *)\old(dest), (char *)\old(src), \old(n)) ≡ + 0; + ensures result_ptr: \result ≡ \old(dest); + assigns *((char *)dest + (0 .. n - 1)), \result; + assigns *((char *)dest + (0 .. n - 1)) + \from *((char *)src + (0 .. n - 1)); + assigns \result \from dest; + */ +void *__gen_e_acsl_memcpy(void * restrict dest, void const * restrict src, + size_t n) +{ + void *__gen_e_acsl_at; + void *__retres; + { + unsigned long __gen_e_acsl_size; + __e_acsl_mpz_t __gen_e_acsl_n; + __e_acsl_mpz_t __gen_e_acsl_; + __e_acsl_mpz_t __gen_e_acsl_sub; + __e_acsl_mpz_t __gen_e_acsl__2; + __e_acsl_mpz_t __gen_e_acsl_sub_2; + __e_acsl_mpz_t __gen_e_acsl_add; + unsigned long __gen_e_acsl__3; + unsigned long __gen_e_acsl_if; + int __gen_e_acsl_valid_read; + unsigned long __gen_e_acsl_size_2; + unsigned long __gen_e_acsl__4; + unsigned long __gen_e_acsl_if_2; + int __gen_e_acsl_valid_read_2; + unsigned long __gen_e_acsl_size_3; + unsigned long __gen_e_acsl__5; + unsigned long __gen_e_acsl_if_3; + unsigned long __gen_e_acsl_size_4; + unsigned long __gen_e_acsl__6; + unsigned long __gen_e_acsl_if_4; + int __gen_e_acsl_separated; + __e_acsl_store_block((void *)(& src),(size_t)8); + __e_acsl_store_block((void *)(& dest),(size_t)8); + __gmpz_init_set_ui(__gen_e_acsl_n,n); + __gmpz_init_set_si(__gen_e_acsl_,1L); + __gmpz_init(__gen_e_acsl_sub); + __gmpz_sub(__gen_e_acsl_sub, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_n), + (__e_acsl_mpz_struct const *)(__gen_e_acsl_)); + __gmpz_init_set_si(__gen_e_acsl__2,0L); + __gmpz_init(__gen_e_acsl_sub_2); + __gmpz_sub(__gen_e_acsl_sub_2, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__2)); + __gmpz_init(__gen_e_acsl_add); + __gmpz_add(__gen_e_acsl_add, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub_2), + (__e_acsl_mpz_struct const *)(__gen_e_acsl_)); + __gen_e_acsl__3 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add)); + __gen_e_acsl_size = 1UL * __gen_e_acsl__3; + if (__gen_e_acsl_size <= 0UL) __gen_e_acsl_if = 0UL; + else __gen_e_acsl_if = __gen_e_acsl_size; + __gen_e_acsl_valid_read = __e_acsl_valid_read((void *)((char *)dest + + 1 * 0), + __gen_e_acsl_if,dest, + (void *)(& dest)); + __e_acsl_assert(__gen_e_acsl_valid_read,1,"RTE","memcpy", + "separated_guard: \\valid_read((char *)dest + (0 .. n - 1))", + "FRAMAC_SHARE/libc/string.h",98); + __gen_e_acsl__4 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add)); + __gen_e_acsl_size_2 = 1UL * __gen_e_acsl__4; + if (__gen_e_acsl_size_2 <= 0UL) __gen_e_acsl_if_2 = 0UL; + else __gen_e_acsl_if_2 = __gen_e_acsl_size_2; + __gen_e_acsl_valid_read_2 = __e_acsl_valid_read((void *)((char *)src + + 1 * 0), + __gen_e_acsl_if_2, + (void *)src, + (void *)(& src)); + __e_acsl_assert(__gen_e_acsl_valid_read_2,1,"RTE","memcpy", + "separated_guard: \\valid_read((char *)src + (0 .. n - 1))", + "FRAMAC_SHARE/libc/string.h",98); + __gen_e_acsl__5 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add)); + __gen_e_acsl_size_3 = 1UL * __gen_e_acsl__5; + if (__gen_e_acsl_size_3 <= 0UL) __gen_e_acsl_if_3 = 0UL; + else __gen_e_acsl_if_3 = __gen_e_acsl_size_3; + __gen_e_acsl__6 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add)); + __gen_e_acsl_size_4 = 1UL * __gen_e_acsl__6; + if (__gen_e_acsl_size_4 <= 0UL) __gen_e_acsl_if_4 = 0UL; + else __gen_e_acsl_if_4 = __gen_e_acsl_size_4; + __gen_e_acsl_separated = __e_acsl_separated((size_t)2, + (char *)dest + 1 * 0, + __gen_e_acsl_if_3, + (char *)src + 1 * 0, + __gen_e_acsl_if_4); + __e_acsl_assert(__gen_e_acsl_separated,1,"Precondition","memcpy", + "separation:\n \\separated((char *)dest + (0 .. n - 1), (char *)src + (0 .. n - 1))", + "FRAMAC_SHARE/libc/string.h",98); + __gmpz_clear(__gen_e_acsl_n); + __gmpz_clear(__gen_e_acsl_); + __gmpz_clear(__gen_e_acsl_sub); + __gmpz_clear(__gen_e_acsl__2); + __gmpz_clear(__gen_e_acsl_sub_2); + __gmpz_clear(__gen_e_acsl_add); + } + __gen_e_acsl_at = dest; + __retres = memcpy(dest,src,n); + __e_acsl_initialize(dest,n); + __e_acsl_assert(__retres == __gen_e_acsl_at,1,"Postcondition","memcpy", + "result_ptr: \\result == \\old(dest)", + "FRAMAC_SHARE/libc/string.h",102); + __e_acsl_delete_block((void *)(& src)); + __e_acsl_delete_block((void *)(& dest)); + return __retres; +} + + diff --git a/src/plugins/e-acsl/tests/libc/oracle/gen_sprintf.c b/src/plugins/e-acsl/tests/libc/oracle/gen_sprintf.c new file mode 100644 index 00000000000..4686cea0c6b --- /dev/null +++ b/src/plugins/e-acsl/tests/libc/oracle/gen_sprintf.c @@ -0,0 +1,186 @@ +/* Generated by Frama-C */ +#include "stddef.h" +#include "stdio.h" +char *__gen_e_acsl_literal_string; +extern __attribute__((__FC_BUILTIN__)) int __e_acsl_sound_verdict; + +void __e_acsl_globals_init(void) +{ + static char __e_acsl_already_run = 0; + if (! __e_acsl_already_run) { + __e_acsl_already_run = 1; + __gen_e_acsl_literal_string = "%d"; + __e_acsl_store_block((void *)__gen_e_acsl_literal_string,sizeof("%d")); + __e_acsl_full_init((void *)__gen_e_acsl_literal_string); + __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string); + } + return; +} + +int main(void) +{ + int __gen_e_acsl_snprintf_res_2; + int __gen_e_acsl_snprintf_res; + int __gen_e_acsl_sprintf_res; + int __retres; + __e_acsl_memory_init((int *)0,(char ***)0,(size_t)8); + __e_acsl_globals_init(); + { + char buf[4]; + __e_acsl_store_block((void *)(buf),(size_t)4); + { + int __gen_e_acsl_size; + int __gen_e_acsl_if; + int __gen_e_acsl_initialized; + __gen_e_acsl_size = 1 * ((3 - 0) + 1); + if (__gen_e_acsl_size <= 0) __gen_e_acsl_if = 0; + else __gen_e_acsl_if = __gen_e_acsl_size; + __gen_e_acsl_initialized = __e_acsl_initialized((void *)(buf + 1 * 0), + (size_t)__gen_e_acsl_if); + __e_acsl_assert(! __gen_e_acsl_initialized,1,"Assertion","main", + "!\\initialized(&buf[0 .. 3])","tests/libc/sprintf.c", + 10); + } + /*@ assert ¬\initialized(&buf[0 .. 3]); */ ; + __gen_e_acsl_sprintf_res = sprintf(buf,__gen_e_acsl_literal_string,10); /* sprintf_va_1 */ + if (__gen_e_acsl_sprintf_res >= 0) __e_acsl_initialize((void *)(buf), + (size_t)(__gen_e_acsl_sprintf_res + 1L)); + { + int __gen_e_acsl_size_2; + int __gen_e_acsl_if_2; + int __gen_e_acsl_initialized_2; + __gen_e_acsl_size_2 = 1 * ((2 - 0) + 1); + if (__gen_e_acsl_size_2 <= 0) __gen_e_acsl_if_2 = 0; + else __gen_e_acsl_if_2 = __gen_e_acsl_size_2; + __gen_e_acsl_initialized_2 = __e_acsl_initialized((void *)(buf + 1 * 0), + (size_t)__gen_e_acsl_if_2); + __e_acsl_assert(__gen_e_acsl_initialized_2,1,"Assertion","main", + "\\initialized(&buf[0 .. 2])","tests/libc/sprintf.c", + 13); + } + /*@ assert \initialized(&buf[0 .. 2]); */ ; + { + int __gen_e_acsl_initialized_3; + __gen_e_acsl_initialized_3 = __e_acsl_initialized((void *)(& buf[3]), + sizeof(char)); + __e_acsl_assert(! __gen_e_acsl_initialized_3,1,"Assertion","main", + "!\\initialized(&buf[3])","tests/libc/sprintf.c",14); + } + /*@ assert ¬\initialized(&buf[3]); */ ; + __e_acsl_delete_block((void *)(buf)); + } + { + char buf_0[4]; + __e_acsl_store_block((void *)(buf_0),(size_t)4); + { + int __gen_e_acsl_size_3; + int __gen_e_acsl_if_3; + int __gen_e_acsl_initialized_4; + __gen_e_acsl_size_3 = 1 * ((3 - 0) + 1); + if (__gen_e_acsl_size_3 <= 0) __gen_e_acsl_if_3 = 0; + else __gen_e_acsl_if_3 = __gen_e_acsl_size_3; + __gen_e_acsl_initialized_4 = __e_acsl_initialized((void *)(buf_0 + + 1 * 0), + (size_t)__gen_e_acsl_if_3); + __e_acsl_assert(! __gen_e_acsl_initialized_4,1,"Assertion","main", + "!\\initialized(&buf_0[0 .. 3])", + "tests/libc/sprintf.c",18); + } + /*@ assert ¬\initialized(&buf_0[0 .. 3]); */ ; + __gen_e_acsl_snprintf_res = snprintf(buf_0,(unsigned long)2, + __gen_e_acsl_literal_string,10); /* snprintf_va_1 */ + if (__gen_e_acsl_snprintf_res >= 0) { + unsigned long __gen_e_acsl_n; + if (2UL <= (unsigned long)__gen_e_acsl_snprintf_res) __gen_e_acsl_n = (unsigned long)2; + else __gen_e_acsl_n = __gen_e_acsl_snprintf_res + 1L; + __e_acsl_initialize((void *)(buf_0),__gen_e_acsl_n); + } + { + int __gen_e_acsl_size_4; + int __gen_e_acsl_if_4; + int __gen_e_acsl_initialized_5; + __gen_e_acsl_size_4 = 1 * ((1 - 0) + 1); + if (__gen_e_acsl_size_4 <= 0) __gen_e_acsl_if_4 = 0; + else __gen_e_acsl_if_4 = __gen_e_acsl_size_4; + __gen_e_acsl_initialized_5 = __e_acsl_initialized((void *)(buf_0 + + 1 * 0), + (size_t)__gen_e_acsl_if_4); + __e_acsl_assert(__gen_e_acsl_initialized_5,1,"Assertion","main", + "\\initialized(&buf_0[0 .. 1])","tests/libc/sprintf.c", + 21); + } + /*@ assert \initialized(&buf_0[0 .. 1]); */ ; + { + int __gen_e_acsl_size_5; + int __gen_e_acsl_if_5; + int __gen_e_acsl_initialized_6; + __gen_e_acsl_size_5 = 1 * ((3 - 2) + 1); + if (__gen_e_acsl_size_5 <= 0) __gen_e_acsl_if_5 = 0; + else __gen_e_acsl_if_5 = __gen_e_acsl_size_5; + __gen_e_acsl_initialized_6 = __e_acsl_initialized((void *)(buf_0 + + 1 * 2), + (size_t)__gen_e_acsl_if_5); + __e_acsl_assert(! __gen_e_acsl_initialized_6,1,"Assertion","main", + "!\\initialized(&buf_0[2 .. 3])", + "tests/libc/sprintf.c",22); + } + /*@ assert ¬\initialized(&buf_0[2 .. 3]); */ ; + __e_acsl_delete_block((void *)(buf_0)); + } + { + char buf_1[4]; + __e_acsl_store_block((void *)(buf_1),(size_t)4); + { + int __gen_e_acsl_size_6; + int __gen_e_acsl_if_6; + int __gen_e_acsl_initialized_7; + __gen_e_acsl_size_6 = 1 * ((3 - 0) + 1); + if (__gen_e_acsl_size_6 <= 0) __gen_e_acsl_if_6 = 0; + else __gen_e_acsl_if_6 = __gen_e_acsl_size_6; + __gen_e_acsl_initialized_7 = __e_acsl_initialized((void *)(buf_1 + + 1 * 0), + (size_t)__gen_e_acsl_if_6); + __e_acsl_assert(! __gen_e_acsl_initialized_7,1,"Assertion","main", + "!\\initialized(&buf_1[0 .. 3])", + "tests/libc/sprintf.c",26); + } + /*@ assert ¬\initialized(&buf_1[0 .. 3]); */ ; + __gen_e_acsl_snprintf_res_2 = snprintf(buf_1,(unsigned long)4, + __gen_e_acsl_literal_string,10); /* snprintf_va_2 */ + if (__gen_e_acsl_snprintf_res_2 >= 0) { + unsigned long __gen_e_acsl_n_2; + if (4UL <= (unsigned long)__gen_e_acsl_snprintf_res_2) __gen_e_acsl_n_2 = (unsigned long)4; + else __gen_e_acsl_n_2 = __gen_e_acsl_snprintf_res_2 + 1L; + __e_acsl_initialize((void *)(buf_1),__gen_e_acsl_n_2); + } + { + int __gen_e_acsl_size_7; + int __gen_e_acsl_if_7; + int __gen_e_acsl_initialized_8; + __gen_e_acsl_size_7 = 1 * ((2 - 0) + 1); + if (__gen_e_acsl_size_7 <= 0) __gen_e_acsl_if_7 = 0; + else __gen_e_acsl_if_7 = __gen_e_acsl_size_7; + __gen_e_acsl_initialized_8 = __e_acsl_initialized((void *)(buf_1 + + 1 * 0), + (size_t)__gen_e_acsl_if_7); + __e_acsl_assert(__gen_e_acsl_initialized_8,1,"Assertion","main", + "\\initialized(&buf_1[0 .. 2])","tests/libc/sprintf.c", + 29); + } + /*@ assert \initialized(&buf_1[0 .. 2]); */ ; + { + int __gen_e_acsl_initialized_9; + __gen_e_acsl_initialized_9 = __e_acsl_initialized((void *)(& buf_1[3]), + sizeof(char)); + __e_acsl_assert(! __gen_e_acsl_initialized_9,1,"Assertion","main", + "!\\initialized(&buf_1[3])","tests/libc/sprintf.c",30); + } + /*@ assert ¬\initialized(&buf_1[3]); */ ; + __e_acsl_delete_block((void *)(buf_1)); + } + __retres = 0; + __e_acsl_memory_clean(); + return __retres; +} + + diff --git a/src/plugins/e-acsl/tests/libc/oracle/gen_str.c b/src/plugins/e-acsl/tests/libc/oracle/gen_str.c new file mode 100644 index 00000000000..ce223677a59 --- /dev/null +++ b/src/plugins/e-acsl/tests/libc/oracle/gen_str.c @@ -0,0 +1,959 @@ +/* Generated by Frama-C */ +#include "stddef.h" +#include "stdio.h" +#include "string.h" +char *__gen_e_acsl_literal_string; +extern __attribute__((__FC_BUILTIN__)) int __e_acsl_sound_verdict; + +/*@ requires valid_string_src: valid_read_string(src); + requires room_string: \valid(dest + (0 .. strlen(src))); + requires + separation: + \separated(dest + (0 .. strlen(src)), src + (0 .. strlen(src))); + ensures equal_contents: strcmp(\old(dest), \old(src)) ≡ 0; + ensures result_ptr: \result ≡ \old(dest); + assigns *(dest + (0 .. strlen{Old}(src))), \result; + assigns *(dest + (0 .. strlen{Old}(src))) + \from *(src + (0 .. strlen{Old}(src))); + assigns \result \from dest; + */ +char *__gen_e_acsl_strcpy(char * restrict dest, char const * restrict src); + +/*@ requires valid_nstring_src: valid_read_nstring(src, n); + requires room_nstring: \valid(dest + (0 .. n - 1)); + requires separation: \separated(dest + (0 .. n - 1), src + (0 .. n - 1)); + ensures result_ptr: \result ≡ \old(dest); + ensures initialization: \initialized(\old(dest) + (0 .. \old(n) - 1)); + assigns *(dest + (0 .. n - 1)), \result; + assigns *(dest + (0 .. n - 1)) \from *(src + (0 .. n - 1)); + assigns \result \from dest; + + behavior complete: + assumes src_fits: strlen(src) < n; + ensures equal_after_copy: strcmp(\old(dest), \old(src)) ≡ 0; + + behavior partial: + assumes src_too_long: n ≤ strlen(src); + ensures + equal_prefix: + memcmp{Post, Post}(\old(dest), \old(src), \old(n)) ≡ 0; + */ +char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src, + size_t n); + +/*@ requires valid_string_src: valid_read_string(src); + requires valid_string_dest: valid_string(dest); + requires room_string: \valid(dest + (0 .. strlen(dest) + strlen(src))); + ensures + sum_of_lengths: strlen(\old(dest)) ≡ \old(strlen(dest) + strlen(src)); + ensures + initialization: dest: + \initialized(\old(dest) + (0 .. \old(strlen(dest) + strlen(src)))); + ensures + dest_null_terminated: + *(\old(dest) + \old(strlen(dest) + strlen(src))) ≡ 0; + ensures result_ptr: \result ≡ \old(dest); + assigns *(dest + + (strlen{Old}(dest) .. strlen{Old}(dest) + strlen{Old}(src))), + \result; + assigns + *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + strlen{Old}(src))) + \from *(src + (0 .. strlen{Old}(src))); + assigns \result \from dest; + */ +char *__gen_e_acsl_strcat(char * restrict dest, char const * restrict src); + +/*@ requires valid_nstring_src: valid_read_nstring(src, n); + requires valid_string_dest: valid_string(dest); + ensures result_ptr: \result ≡ \old(dest); + assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n)), \result; + assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n)) + \from *(src + (0 .. n)); + assigns \result \from dest; + + behavior complete: + assumes + valid_string_src_fits: valid_read_string(src) ∧ strlen(src) ≤ n; + requires + room_string: \valid((dest + strlen(dest)) + (0 .. strlen(src))); + ensures + sum_of_lengths: + strlen(\old(dest)) ≡ \old(strlen(dest) + strlen(src)); + assigns *(dest + + (strlen{Old}(dest) .. strlen{Old}(dest) + strlen{Old}(src))), + \result; + assigns + *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + strlen{Old}(src))) + \from *(src + (0 .. strlen{Old}(src))); + assigns \result \from dest; + + behavior partial: + assumes + valid_string_src_too_large: + ¬(valid_read_string(src) ∧ strlen(src) ≤ n); + requires room_string: \valid((dest + strlen(dest)) + (0 .. n)); + ensures + sum_of_bounded_lengths: + strlen(\old(dest)) ≡ \old(strlen(dest)) + \old(n); + assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n)), + \result; + assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n)) + \from *(src + (0 .. strlen{Old}(src))); + assigns \result \from dest; + */ +char *__gen_e_acsl_strncat(char * restrict dest, char const * restrict src, + size_t n); + +/*@ requires valid_nstring_src: valid_read_nstring(src, n); + requires valid_string_dest: valid_string(dest); + ensures result_ptr: \result ≡ \old(dest); + assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n)), \result; + assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n)) + \from *(src + (0 .. n)); + assigns \result \from dest; + + behavior complete: + assumes + valid_string_src_fits: valid_read_string(src) ∧ strlen(src) ≤ n; + requires + room_string: \valid((dest + strlen(dest)) + (0 .. strlen(src))); + ensures + sum_of_lengths: + strlen(\old(dest)) ≡ \old(strlen(dest) + strlen(src)); + assigns *(dest + + (strlen{Old}(dest) .. strlen{Old}(dest) + strlen{Old}(src))), + \result; + assigns + *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + strlen{Old}(src))) + \from *(src + (0 .. strlen{Old}(src))); + assigns \result \from dest; + + behavior partial: + assumes + valid_string_src_too_large: + ¬(valid_read_string(src) ∧ strlen(src) ≤ n); + requires room_string: \valid((dest + strlen(dest)) + (0 .. n)); + ensures + sum_of_bounded_lengths: + strlen(\old(dest)) ≡ \old(strlen(dest)) + \old(n); + assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n)), + \result; + assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n)) + \from *(src + (0 .. strlen{Old}(src))); + assigns \result \from dest; + */ +char *__gen_e_acsl_strncat(char * restrict dest, char const * restrict src, + size_t n) +{ + char *__gen_e_acsl_at; + unsigned long __gen_e_acsl_strcat_dest_size; + unsigned long __gen_e_acsl_strcat_src_size; + __e_acsl_contract_t *__gen_e_acsl_contract; + char *__retres; + __e_acsl_store_block((void *)(& dest),(size_t)8); + __gen_e_acsl_contract = __e_acsl_contract_init((size_t)2); + __gen_e_acsl_strcat_src_size = __e_acsl_builtin_strlen(src); + if (n < __gen_e_acsl_strcat_src_size) __gen_e_acsl_strcat_src_size = n; + __gen_e_acsl_strcat_dest_size = __e_acsl_builtin_strlen((char const *)dest); + __gen_e_acsl_at = dest; + __retres = strncat(dest,src,n); + { + __e_acsl_mpz_t __gen_e_acsl___gen_e_acsl_strcat_src_size; + __e_acsl_mpz_t __gen_e_acsl___gen_e_acsl_strcat_dest_size; + __e_acsl_mpz_t __gen_e_acsl_add; + __e_acsl_mpz_t __gen_e_acsl_; + __e_acsl_mpz_t __gen_e_acsl_add_2; + __e_acsl_mpz_t __gen_e_acsl__2; + int __gen_e_acsl_le; + unsigned long __gen_e_acsl_size; + __gmpz_init_set_ui(__gen_e_acsl___gen_e_acsl_strcat_src_size, + __gen_e_acsl_strcat_src_size); + __gmpz_init_set_ui(__gen_e_acsl___gen_e_acsl_strcat_dest_size, + __gen_e_acsl_strcat_dest_size); + __gmpz_init(__gen_e_acsl_add); + __gmpz_add(__gen_e_acsl_add, + (__e_acsl_mpz_struct const *)(__gen_e_acsl___gen_e_acsl_strcat_src_size), + (__e_acsl_mpz_struct const *)(__gen_e_acsl___gen_e_acsl_strcat_dest_size)); + __gmpz_init_set_si(__gen_e_acsl_,1L); + __gmpz_init(__gen_e_acsl_add_2); + __gmpz_add(__gen_e_acsl_add_2, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_add), + (__e_acsl_mpz_struct const *)(__gen_e_acsl_)); + __gmpz_init_set_ui(__gen_e_acsl__2,18446744073709551615UL); + __gen_e_acsl_le = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_2), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__2)); + __e_acsl_assert(__gen_e_acsl_le <= 0,1,"RTE","strncat", + "size_lesser_or_eq_than_SIZE_MAX:\n (__gen_e_acsl_strcat_src_size + __gen_e_acsl_strcat_dest_size) + 1 <=\n 18446744073709551615", + "FRAMAC_SHARE/libc/string.h",438); + __gen_e_acsl_size = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_2)); + __e_acsl_initialize((void *)dest,__gen_e_acsl_size); + __gmpz_clear(__gen_e_acsl___gen_e_acsl_strcat_src_size); + __gmpz_clear(__gen_e_acsl___gen_e_acsl_strcat_dest_size); + __gmpz_clear(__gen_e_acsl_add); + __gmpz_clear(__gen_e_acsl_); + __gmpz_clear(__gen_e_acsl_add_2); + __gmpz_clear(__gen_e_acsl__2); + } + __e_acsl_assert(__retres == __gen_e_acsl_at,1,"Postcondition","strncat", + "result_ptr: \\result == \\old(dest)", + "FRAMAC_SHARE/libc/string.h",443); + __e_acsl_contract_clean(__gen_e_acsl_contract); + __e_acsl_delete_block((void *)(& dest)); + return __retres; +} + +/*@ requires valid_string_src: valid_read_string(src); + requires valid_string_dest: valid_string(dest); + requires room_string: \valid(dest + (0 .. strlen(dest) + strlen(src))); + ensures + sum_of_lengths: strlen(\old(dest)) ≡ \old(strlen(dest) + strlen(src)); + ensures + initialization: dest: + \initialized(\old(dest) + (0 .. \old(strlen(dest) + strlen(src)))); + ensures + dest_null_terminated: + *(\old(dest) + \old(strlen(dest) + strlen(src))) ≡ 0; + ensures result_ptr: \result ≡ \old(dest); + assigns *(dest + + (strlen{Old}(dest) .. strlen{Old}(dest) + strlen{Old}(src))), + \result; + assigns + *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + strlen{Old}(src))) + \from *(src + (0 .. strlen{Old}(src))); + assigns \result \from dest; + */ +char *__gen_e_acsl_strcat(char * restrict dest, char const * restrict src) +{ + char *__gen_e_acsl_at; + unsigned long __gen_e_acsl_strcat_dest_size; + unsigned long __gen_e_acsl_strcat_src_size; + char *__retres; + __e_acsl_store_block((void *)(& dest),(size_t)8); + __gen_e_acsl_strcat_src_size = __e_acsl_builtin_strlen(src); + __gen_e_acsl_strcat_dest_size = __e_acsl_builtin_strlen((char const *)dest); + __gen_e_acsl_at = dest; + __retres = strcat(dest,src); + { + __e_acsl_mpz_t __gen_e_acsl___gen_e_acsl_strcat_src_size; + __e_acsl_mpz_t __gen_e_acsl___gen_e_acsl_strcat_dest_size; + __e_acsl_mpz_t __gen_e_acsl_add; + __e_acsl_mpz_t __gen_e_acsl_; + __e_acsl_mpz_t __gen_e_acsl_add_2; + __e_acsl_mpz_t __gen_e_acsl__2; + int __gen_e_acsl_le; + unsigned long __gen_e_acsl_size; + __gmpz_init_set_ui(__gen_e_acsl___gen_e_acsl_strcat_src_size, + __gen_e_acsl_strcat_src_size); + __gmpz_init_set_ui(__gen_e_acsl___gen_e_acsl_strcat_dest_size, + __gen_e_acsl_strcat_dest_size); + __gmpz_init(__gen_e_acsl_add); + __gmpz_add(__gen_e_acsl_add, + (__e_acsl_mpz_struct const *)(__gen_e_acsl___gen_e_acsl_strcat_src_size), + (__e_acsl_mpz_struct const *)(__gen_e_acsl___gen_e_acsl_strcat_dest_size)); + __gmpz_init_set_si(__gen_e_acsl_,1L); + __gmpz_init(__gen_e_acsl_add_2); + __gmpz_add(__gen_e_acsl_add_2, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_add), + (__e_acsl_mpz_struct const *)(__gen_e_acsl_)); + __gmpz_init_set_ui(__gen_e_acsl__2,18446744073709551615UL); + __gen_e_acsl_le = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_2), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__2)); + __e_acsl_assert(__gen_e_acsl_le <= 0,1,"RTE","strcat", + "size_lesser_or_eq_than_SIZE_MAX:\n (__gen_e_acsl_strcat_src_size + __gen_e_acsl_strcat_dest_size) + 1 <=\n 18446744073709551615", + "FRAMAC_SHARE/libc/string.h",423); + __gen_e_acsl_size = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_2)); + __e_acsl_initialize((void *)dest,__gen_e_acsl_size); + __gmpz_clear(__gen_e_acsl___gen_e_acsl_strcat_src_size); + __gmpz_clear(__gen_e_acsl___gen_e_acsl_strcat_dest_size); + __gmpz_clear(__gen_e_acsl_add); + __gmpz_clear(__gen_e_acsl_); + __gmpz_clear(__gen_e_acsl_add_2); + __gmpz_clear(__gen_e_acsl__2); + } + __e_acsl_assert(__retres == __gen_e_acsl_at,1,"Postcondition","strcat", + "result_ptr: \\result == \\old(dest)", + "FRAMAC_SHARE/libc/string.h",434); + __e_acsl_delete_block((void *)(& dest)); + return __retres; +} + +/*@ requires valid_nstring_src: valid_read_nstring(src, n); + requires room_nstring: \valid(dest + (0 .. n - 1)); + requires separation: \separated(dest + (0 .. n - 1), src + (0 .. n - 1)); + ensures result_ptr: \result ≡ \old(dest); + ensures initialization: \initialized(\old(dest) + (0 .. \old(n) - 1)); + assigns *(dest + (0 .. n - 1)), \result; + assigns *(dest + (0 .. n - 1)) \from *(src + (0 .. n - 1)); + assigns \result \from dest; + + behavior complete: + assumes src_fits: strlen(src) < n; + ensures equal_after_copy: strcmp(\old(dest), \old(src)) ≡ 0; + + behavior partial: + assumes src_too_long: n ≤ strlen(src); + ensures + equal_prefix: + memcmp{Post, Post}(\old(dest), \old(src), \old(n)) ≡ 0; + */ +char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src, + size_t n) +{ + __e_acsl_mpz_t __gen_e_acsl_at_3; + char *__gen_e_acsl_at_2; + char *__gen_e_acsl_at; + __e_acsl_contract_t *__gen_e_acsl_contract; + char *__retres; + { + unsigned long __gen_e_acsl_size; + __e_acsl_mpz_t __gen_e_acsl_n; + __e_acsl_mpz_t __gen_e_acsl_; + __e_acsl_mpz_t __gen_e_acsl_sub; + __e_acsl_mpz_t __gen_e_acsl__2; + __e_acsl_mpz_t __gen_e_acsl_sub_2; + __e_acsl_mpz_t __gen_e_acsl_add; + unsigned long __gen_e_acsl__3; + unsigned long __gen_e_acsl_if; + int __gen_e_acsl_valid; + unsigned long __gen_e_acsl_size_2; + unsigned long __gen_e_acsl__4; + unsigned long __gen_e_acsl_if_2; + int __gen_e_acsl_valid_read; + unsigned long __gen_e_acsl_size_3; + unsigned long __gen_e_acsl__5; + unsigned long __gen_e_acsl_if_3; + int __gen_e_acsl_valid_read_2; + unsigned long __gen_e_acsl_size_4; + unsigned long __gen_e_acsl__6; + unsigned long __gen_e_acsl_if_4; + unsigned long __gen_e_acsl_size_5; + unsigned long __gen_e_acsl__7; + unsigned long __gen_e_acsl_if_5; + int __gen_e_acsl_separated; + __e_acsl_store_block((void *)(& src),(size_t)8); + __e_acsl_store_block((void *)(& dest),(size_t)8); + __gen_e_acsl_contract = __e_acsl_contract_init((size_t)2); + __gmpz_init_set_ui(__gen_e_acsl_n,n); + __gmpz_init_set_si(__gen_e_acsl_,1L); + __gmpz_init(__gen_e_acsl_sub); + __gmpz_sub(__gen_e_acsl_sub, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_n), + (__e_acsl_mpz_struct const *)(__gen_e_acsl_)); + __gmpz_init_set_si(__gen_e_acsl__2,0L); + __gmpz_init(__gen_e_acsl_sub_2); + __gmpz_sub(__gen_e_acsl_sub_2, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__2)); + __gmpz_init(__gen_e_acsl_add); + __gmpz_add(__gen_e_acsl_add, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub_2), + (__e_acsl_mpz_struct const *)(__gen_e_acsl_)); + __gen_e_acsl__3 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add)); + __gen_e_acsl_size = 1UL * __gen_e_acsl__3; + if (__gen_e_acsl_size <= 0UL) __gen_e_acsl_if = 0UL; + else __gen_e_acsl_if = __gen_e_acsl_size; + __gen_e_acsl_valid = __e_acsl_valid((void *)(dest + 1 * 0), + __gen_e_acsl_if,(void *)dest, + (void *)(& dest)); + __e_acsl_assert(__gen_e_acsl_valid,1,"Precondition","strncpy", + "room_nstring: \\valid(dest + (0 .. n - 1))", + "FRAMAC_SHARE/libc/string.h",380); + __gen_e_acsl__4 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add)); + __gen_e_acsl_size_2 = 1UL * __gen_e_acsl__4; + if (__gen_e_acsl_size_2 <= 0UL) __gen_e_acsl_if_2 = 0UL; + else __gen_e_acsl_if_2 = __gen_e_acsl_size_2; + __gen_e_acsl_valid_read = __e_acsl_valid_read((void *)(dest + 1 * 0), + __gen_e_acsl_if_2, + (void *)dest, + (void *)(& dest)); + __e_acsl_assert(__gen_e_acsl_valid_read,1,"RTE","strncpy", + "separated_guard: \\valid_read(dest + (0 .. n - 1))", + "FRAMAC_SHARE/libc/string.h",382); + __gen_e_acsl__5 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add)); + __gen_e_acsl_size_3 = 1UL * __gen_e_acsl__5; + if (__gen_e_acsl_size_3 <= 0UL) __gen_e_acsl_if_3 = 0UL; + else __gen_e_acsl_if_3 = __gen_e_acsl_size_3; + __gen_e_acsl_valid_read_2 = __e_acsl_valid_read((void *)(src + 1 * 0), + __gen_e_acsl_if_3, + (void *)src, + (void *)(& src)); + __e_acsl_assert(__gen_e_acsl_valid_read_2,1,"RTE","strncpy", + "separated_guard: \\valid_read(src + (0 .. n - 1))", + "FRAMAC_SHARE/libc/string.h",382); + __gen_e_acsl__6 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add)); + __gen_e_acsl_size_4 = 1UL * __gen_e_acsl__6; + if (__gen_e_acsl_size_4 <= 0UL) __gen_e_acsl_if_4 = 0UL; + else __gen_e_acsl_if_4 = __gen_e_acsl_size_4; + __gen_e_acsl__7 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add)); + __gen_e_acsl_size_5 = 1UL * __gen_e_acsl__7; + if (__gen_e_acsl_size_5 <= 0UL) __gen_e_acsl_if_5 = 0UL; + else __gen_e_acsl_if_5 = __gen_e_acsl_size_5; + __gen_e_acsl_separated = __e_acsl_separated((size_t)2,dest + 1 * 0, + __gen_e_acsl_if_4, + src + 1 * 0, + __gen_e_acsl_if_5); + __e_acsl_assert(__gen_e_acsl_separated,1,"Precondition","strncpy", + "separation: \\separated(dest + (0 .. n - 1), src + (0 .. n - 1))", + "FRAMAC_SHARE/libc/string.h",382); + __gmpz_clear(__gen_e_acsl_n); + __gmpz_clear(__gen_e_acsl_); + __gmpz_clear(__gen_e_acsl_sub); + __gmpz_clear(__gen_e_acsl__2); + __gmpz_clear(__gen_e_acsl_sub_2); + __gmpz_clear(__gen_e_acsl_add); + } + { + __e_acsl_mpz_t __gen_e_acsl_n_2; + __gmpz_init_set_ui(__gen_e_acsl_n_2,n); + __gmpz_init_set(__gen_e_acsl_at_3, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_n_2)); + __gmpz_clear(__gen_e_acsl_n_2); + } + __gen_e_acsl_at_2 = dest; + __gen_e_acsl_at = dest; + __retres = strncpy(dest,src,n); + __e_acsl_initialize((void *)dest,n); + { + unsigned long __gen_e_acsl_size_6; + __e_acsl_mpz_t __gen_e_acsl__8; + __e_acsl_mpz_t __gen_e_acsl_sub_3; + __e_acsl_mpz_t __gen_e_acsl__9; + __e_acsl_mpz_t __gen_e_acsl_sub_4; + __e_acsl_mpz_t __gen_e_acsl_add_2; + unsigned long __gen_e_acsl__10; + unsigned long __gen_e_acsl_if_6; + int __gen_e_acsl_initialized; + __e_acsl_assert(__retres == __gen_e_acsl_at,1,"Postcondition","strncpy", + "result_ptr: \\result == \\old(dest)", + "FRAMAC_SHARE/libc/string.h",385); + __gmpz_init_set_si(__gen_e_acsl__8,1L); + __gmpz_init(__gen_e_acsl_sub_3); + __gmpz_sub(__gen_e_acsl_sub_3, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_at_3), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__8)); + __gmpz_init_set_si(__gen_e_acsl__9,0L); + __gmpz_init(__gen_e_acsl_sub_4); + __gmpz_sub(__gen_e_acsl_sub_4, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub_3), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__9)); + __gmpz_init(__gen_e_acsl_add_2); + __gmpz_add(__gen_e_acsl_add_2, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub_4), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__8)); + __gen_e_acsl__10 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_2)); + __gen_e_acsl_size_6 = 1UL * __gen_e_acsl__10; + if (__gen_e_acsl_size_6 <= 0UL) __gen_e_acsl_if_6 = 0UL; + else __gen_e_acsl_if_6 = __gen_e_acsl_size_6; + __gen_e_acsl_initialized = __e_acsl_initialized((void *)(__gen_e_acsl_at_2 + + 1 * 0), + __gen_e_acsl_if_6); + __e_acsl_assert(__gen_e_acsl_initialized,1,"Postcondition","strncpy", + "initialization: \\initialized(\\old(dest) + (0 .. \\old(n) - 1))", + "FRAMAC_SHARE/libc/string.h",386); + __e_acsl_contract_clean(__gen_e_acsl_contract); + __e_acsl_delete_block((void *)(& src)); + __e_acsl_delete_block((void *)(& dest)); + __gmpz_clear(__gen_e_acsl__8); + __gmpz_clear(__gen_e_acsl_sub_3); + __gmpz_clear(__gen_e_acsl__9); + __gmpz_clear(__gen_e_acsl_sub_4); + __gmpz_clear(__gen_e_acsl_add_2); + __gmpz_clear(__gen_e_acsl_at_3); + return __retres; + } +} + +/*@ requires valid_string_src: valid_read_string(src); + requires room_string: \valid(dest + (0 .. strlen(src))); + requires + separation: + \separated(dest + (0 .. strlen(src)), src + (0 .. strlen(src))); + ensures equal_contents: strcmp(\old(dest), \old(src)) ≡ 0; + ensures result_ptr: \result ≡ \old(dest); + assigns *(dest + (0 .. strlen{Old}(src))), \result; + assigns *(dest + (0 .. strlen{Old}(src))) + \from *(src + (0 .. strlen{Old}(src))); + assigns \result \from dest; + */ +char *__gen_e_acsl_strcpy(char * restrict dest, char const * restrict src) +{ + char *__gen_e_acsl_at; + unsigned long __gen_e_acsl_strcpy_src_size; + char *__retres; + __e_acsl_store_block((void *)(& src),(size_t)8); + __e_acsl_store_block((void *)(& dest),(size_t)8); + __gen_e_acsl_strcpy_src_size = __e_acsl_builtin_strlen(src); + __gen_e_acsl_at = dest; + __retres = strcpy(dest,src); + { + __e_acsl_mpz_t __gen_e_acsl___gen_e_acsl_strcpy_src_size; + __e_acsl_mpz_t __gen_e_acsl_; + __e_acsl_mpz_t __gen_e_acsl_add; + __e_acsl_mpz_t __gen_e_acsl__2; + int __gen_e_acsl_le; + unsigned long __gen_e_acsl_size; + __gmpz_init_set_ui(__gen_e_acsl___gen_e_acsl_strcpy_src_size, + __gen_e_acsl_strcpy_src_size); + __gmpz_init_set_si(__gen_e_acsl_,1L); + __gmpz_init(__gen_e_acsl_add); + __gmpz_add(__gen_e_acsl_add, + (__e_acsl_mpz_struct const *)(__gen_e_acsl___gen_e_acsl_strcpy_src_size), + (__e_acsl_mpz_struct const *)(__gen_e_acsl_)); + __gmpz_init_set_ui(__gen_e_acsl__2,18446744073709551615UL); + __gen_e_acsl_le = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_add), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__2)); + __e_acsl_assert(__gen_e_acsl_le <= 0,1,"RTE","strcpy", + "size_lesser_or_eq_than_SIZE_MAX:\n __gen_e_acsl_strcpy_src_size + 1 <= 18446744073709551615", + "FRAMAC_SHARE/libc/string.h",367); + __gen_e_acsl_size = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add)); + __e_acsl_initialize((void *)dest,__gen_e_acsl_size); + __gmpz_clear(__gen_e_acsl___gen_e_acsl_strcpy_src_size); + __gmpz_clear(__gen_e_acsl_); + __gmpz_clear(__gen_e_acsl_add); + __gmpz_clear(__gen_e_acsl__2); + } + __e_acsl_assert(__retres == __gen_e_acsl_at,1,"Postcondition","strcpy", + "result_ptr: \\result == \\old(dest)", + "FRAMAC_SHARE/libc/string.h",374); + __e_acsl_delete_block((void *)(& src)); + __e_acsl_delete_block((void *)(& dest)); + return __retres; +} + +void __e_acsl_globals_init(void) +{ + static char __e_acsl_already_run = 0; + if (! __e_acsl_already_run) { + __e_acsl_already_run = 1; + __gen_e_acsl_literal_string = "a"; + __e_acsl_store_block((void *)__gen_e_acsl_literal_string,sizeof("a")); + __e_acsl_full_init((void *)__gen_e_acsl_literal_string); + __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string); + } + return; +} + +int main(void) +{ + int __retres; + __e_acsl_memory_init((int *)0,(char ***)0,(size_t)8); + __e_acsl_globals_init(); + { + char dest[4]; + __e_acsl_store_block((void *)(dest),(size_t)4); + char src[2] = {(char)'b', (char)'\000'}; + __e_acsl_store_block((void *)(src),(size_t)2); + __e_acsl_full_init((void *)(& src)); + { + int __gen_e_acsl_size; + int __gen_e_acsl_if; + int __gen_e_acsl_initialized; + __gen_e_acsl_size = 1 * ((3 - 0) + 1); + if (__gen_e_acsl_size <= 0) __gen_e_acsl_if = 0; + else __gen_e_acsl_if = __gen_e_acsl_size; + __gen_e_acsl_initialized = __e_acsl_initialized((void *)(dest + 1 * 0), + (size_t)__gen_e_acsl_if); + __e_acsl_assert(! __gen_e_acsl_initialized,1,"Assertion","main", + "!\\initialized(&dest[0 .. 3])","tests/libc/str.c",12); + } + /*@ assert ¬\initialized(&dest[0 .. 3]); */ ; + { + int __gen_e_acsl_size_2; + int __gen_e_acsl_if_2; + int __gen_e_acsl_initialized_2; + __gen_e_acsl_size_2 = 1 * ((1 - 0) + 1); + if (__gen_e_acsl_size_2 <= 0) __gen_e_acsl_if_2 = 0; + else __gen_e_acsl_if_2 = __gen_e_acsl_size_2; + __gen_e_acsl_initialized_2 = __e_acsl_initialized((void *)(src + 1 * 0), + (size_t)__gen_e_acsl_if_2); + __e_acsl_assert(__gen_e_acsl_initialized_2,1,"Assertion","main", + "\\initialized(&src[0 .. 1])","tests/libc/str.c",13); + } + /*@ assert \initialized(&src[0 .. 1]); */ ; + __gen_e_acsl_strcpy(dest,(char const *)(src)); + { + int __gen_e_acsl_size_3; + int __gen_e_acsl_if_3; + int __gen_e_acsl_initialized_3; + __gen_e_acsl_size_3 = 1 * ((1 - 0) + 1); + if (__gen_e_acsl_size_3 <= 0) __gen_e_acsl_if_3 = 0; + else __gen_e_acsl_if_3 = __gen_e_acsl_size_3; + __gen_e_acsl_initialized_3 = __e_acsl_initialized((void *)(dest + 1 * 0), + (size_t)__gen_e_acsl_if_3); + __e_acsl_assert(__gen_e_acsl_initialized_3,1,"Assertion","main", + "\\initialized(&dest[0 .. 1])","tests/libc/str.c",16); + } + /*@ assert \initialized(&dest[0 .. 1]); */ ; + { + int __gen_e_acsl_size_4; + int __gen_e_acsl_if_4; + int __gen_e_acsl_initialized_4; + __gen_e_acsl_size_4 = 1 * ((3 - 2) + 1); + if (__gen_e_acsl_size_4 <= 0) __gen_e_acsl_if_4 = 0; + else __gen_e_acsl_if_4 = __gen_e_acsl_size_4; + __gen_e_acsl_initialized_4 = __e_acsl_initialized((void *)(dest + 1 * 2), + (size_t)__gen_e_acsl_if_4); + __e_acsl_assert(! __gen_e_acsl_initialized_4,1,"Assertion","main", + "!\\initialized(&dest[2 .. 3])","tests/libc/str.c",17); + } + /*@ assert ¬\initialized(&dest[2 .. 3]); */ ; + __e_acsl_delete_block((void *)(src)); + __e_acsl_delete_block((void *)(dest)); + } + { + char dest_0[4]; + __e_acsl_store_block((void *)(dest_0),(size_t)4); + char src_0[4] = {(char)'a', (char)'b', (char)'\000'}; + __e_acsl_store_block((void *)(src_0),(size_t)4); + __e_acsl_full_init((void *)(& src_0)); + { + int __gen_e_acsl_size_5; + int __gen_e_acsl_if_5; + int __gen_e_acsl_initialized_5; + __gen_e_acsl_size_5 = 1 * ((3 - 0) + 1); + if (__gen_e_acsl_size_5 <= 0) __gen_e_acsl_if_5 = 0; + else __gen_e_acsl_if_5 = __gen_e_acsl_size_5; + __gen_e_acsl_initialized_5 = __e_acsl_initialized((void *)(dest_0 + + 1 * 0), + (size_t)__gen_e_acsl_if_5); + __e_acsl_assert(! __gen_e_acsl_initialized_5,1,"Assertion","main", + "!\\initialized(&dest_0[0 .. 3])","tests/libc/str.c", + 22); + } + /*@ assert ¬\initialized(&dest_0[0 .. 3]); */ ; + { + int __gen_e_acsl_size_6; + int __gen_e_acsl_if_6; + int __gen_e_acsl_initialized_6; + __gen_e_acsl_size_6 = 1 * ((3 - 0) + 1); + if (__gen_e_acsl_size_6 <= 0) __gen_e_acsl_if_6 = 0; + else __gen_e_acsl_if_6 = __gen_e_acsl_size_6; + __gen_e_acsl_initialized_6 = __e_acsl_initialized((void *)(src_0 + + 1 * 0), + (size_t)__gen_e_acsl_if_6); + __e_acsl_assert(__gen_e_acsl_initialized_6,1,"Assertion","main", + "\\initialized(&src_0[0 .. 3])","tests/libc/str.c",23); + } + /*@ assert \initialized(&src_0[0 .. 3]); */ ; + __gen_e_acsl_strncpy(dest_0,(char const *)(src_0),(unsigned long)1); + { + int __gen_e_acsl_initialized_7; + __gen_e_acsl_initialized_7 = __e_acsl_initialized((void *)(dest_0), + sizeof(char)); + __e_acsl_assert(__gen_e_acsl_initialized_7,1,"Assertion","main", + "\\initialized((char *)dest_0)","tests/libc/str.c",26); + } + /*@ assert \initialized((char *)dest_0); */ ; + { + int __gen_e_acsl_size_7; + int __gen_e_acsl_if_7; + int __gen_e_acsl_initialized_8; + __gen_e_acsl_size_7 = 1 * ((3 - 1) + 1); + if (__gen_e_acsl_size_7 <= 0) __gen_e_acsl_if_7 = 0; + else __gen_e_acsl_if_7 = __gen_e_acsl_size_7; + __gen_e_acsl_initialized_8 = __e_acsl_initialized((void *)(dest_0 + + 1 * 1), + (size_t)__gen_e_acsl_if_7); + __e_acsl_assert(! __gen_e_acsl_initialized_8,1,"Assertion","main", + "!\\initialized(&dest_0[1 .. 3])","tests/libc/str.c", + 27); + } + /*@ assert ¬\initialized(&dest_0[1 .. 3]); */ ; + __e_acsl_delete_block((void *)(src_0)); + __e_acsl_delete_block((void *)(dest_0)); + } + { + char dest_1[4]; + __e_acsl_store_block((void *)(dest_1),(size_t)4); + char src_1[4] = {(char)'b', (char)'\000'}; + __e_acsl_store_block((void *)(src_1),(size_t)4); + __e_acsl_full_init((void *)(& src_1)); + { + int __gen_e_acsl_size_8; + int __gen_e_acsl_if_8; + int __gen_e_acsl_initialized_9; + __gen_e_acsl_size_8 = 1 * ((3 - 0) + 1); + if (__gen_e_acsl_size_8 <= 0) __gen_e_acsl_if_8 = 0; + else __gen_e_acsl_if_8 = __gen_e_acsl_size_8; + __gen_e_acsl_initialized_9 = __e_acsl_initialized((void *)(dest_1 + + 1 * 0), + (size_t)__gen_e_acsl_if_8); + __e_acsl_assert(! __gen_e_acsl_initialized_9,1,"Assertion","main", + "!\\initialized(&dest_1[0 .. 3])","tests/libc/str.c", + 32); + } + /*@ assert ¬\initialized(&dest_1[0 .. 3]); */ ; + { + int __gen_e_acsl_size_9; + int __gen_e_acsl_if_9; + int __gen_e_acsl_initialized_10; + __gen_e_acsl_size_9 = 1 * ((3 - 0) + 1); + if (__gen_e_acsl_size_9 <= 0) __gen_e_acsl_if_9 = 0; + else __gen_e_acsl_if_9 = __gen_e_acsl_size_9; + __gen_e_acsl_initialized_10 = __e_acsl_initialized((void *)(src_1 + + 1 * 0), + (size_t)__gen_e_acsl_if_9); + __e_acsl_assert(__gen_e_acsl_initialized_10,1,"Assertion","main", + "\\initialized(&src_1[0 .. 3])","tests/libc/str.c",33); + } + /*@ assert \initialized(&src_1[0 .. 3]); */ ; + __gen_e_acsl_strncpy(dest_1,(char const *)(src_1),(unsigned long)3); + { + int __gen_e_acsl_size_10; + int __gen_e_acsl_if_10; + int __gen_e_acsl_initialized_11; + __gen_e_acsl_size_10 = 1 * ((2 - 0) + 1); + if (__gen_e_acsl_size_10 <= 0) __gen_e_acsl_if_10 = 0; + else __gen_e_acsl_if_10 = __gen_e_acsl_size_10; + __gen_e_acsl_initialized_11 = __e_acsl_initialized((void *)(dest_1 + + 1 * 0), + (size_t)__gen_e_acsl_if_10); + __e_acsl_assert(__gen_e_acsl_initialized_11,1,"Assertion","main", + "\\initialized(&dest_1[0 .. 2])","tests/libc/str.c",36); + } + /*@ assert \initialized(&dest_1[0 .. 2]); */ ; + { + int __gen_e_acsl_initialized_12; + __gen_e_acsl_initialized_12 = __e_acsl_initialized((void *)(& dest_1[3]), + sizeof(char)); + __e_acsl_assert(! __gen_e_acsl_initialized_12,1,"Assertion","main", + "!\\initialized(&dest_1[3])","tests/libc/str.c",37); + } + /*@ assert ¬\initialized(&dest_1[3]); */ ; + __e_acsl_delete_block((void *)(src_1)); + __e_acsl_delete_block((void *)(dest_1)); + } + { + char dest_2[4]; + __e_acsl_store_block((void *)(dest_2),(size_t)4); + __gen_e_acsl_strcpy(dest_2,__gen_e_acsl_literal_string); + char src_2[2] = {(char)'b', (char)'\000'}; + __e_acsl_store_block((void *)(src_2),(size_t)2); + __e_acsl_full_init((void *)(& src_2)); + { + int __gen_e_acsl_size_11; + int __gen_e_acsl_if_11; + int __gen_e_acsl_initialized_13; + __gen_e_acsl_size_11 = 1 * ((1 - 0) + 1); + if (__gen_e_acsl_size_11 <= 0) __gen_e_acsl_if_11 = 0; + else __gen_e_acsl_if_11 = __gen_e_acsl_size_11; + __gen_e_acsl_initialized_13 = __e_acsl_initialized((void *)(dest_2 + + 1 * 0), + (size_t)__gen_e_acsl_if_11); + __e_acsl_assert(__gen_e_acsl_initialized_13,1,"Assertion","main", + "\\initialized(&dest_2[0 .. 1])","tests/libc/str.c",43); + } + /*@ assert \initialized(&dest_2[0 .. 1]); */ ; + { + int __gen_e_acsl_size_12; + int __gen_e_acsl_if_12; + int __gen_e_acsl_initialized_14; + __gen_e_acsl_size_12 = 1 * ((3 - 2) + 1); + if (__gen_e_acsl_size_12 <= 0) __gen_e_acsl_if_12 = 0; + else __gen_e_acsl_if_12 = __gen_e_acsl_size_12; + __gen_e_acsl_initialized_14 = __e_acsl_initialized((void *)(dest_2 + + 1 * 2), + (size_t)__gen_e_acsl_if_12); + __e_acsl_assert(! __gen_e_acsl_initialized_14,1,"Assertion","main", + "!\\initialized(&dest_2[2 .. 3])","tests/libc/str.c", + 44); + } + /*@ assert ¬\initialized(&dest_2[2 .. 3]); */ ; + { + int __gen_e_acsl_size_13; + int __gen_e_acsl_if_13; + int __gen_e_acsl_initialized_15; + __gen_e_acsl_size_13 = 1 * ((1 - 0) + 1); + if (__gen_e_acsl_size_13 <= 0) __gen_e_acsl_if_13 = 0; + else __gen_e_acsl_if_13 = __gen_e_acsl_size_13; + __gen_e_acsl_initialized_15 = __e_acsl_initialized((void *)(src_2 + + 1 * 0), + (size_t)__gen_e_acsl_if_13); + __e_acsl_assert(__gen_e_acsl_initialized_15,1,"Assertion","main", + "\\initialized(&src_2[0 .. 1])","tests/libc/str.c",45); + } + /*@ assert \initialized(&src_2[0 .. 1]); */ ; + __gen_e_acsl_strcat(dest_2,(char const *)(src_2)); + { + int __gen_e_acsl_size_14; + int __gen_e_acsl_if_14; + int __gen_e_acsl_initialized_16; + __gen_e_acsl_size_14 = 1 * ((2 - 0) + 1); + if (__gen_e_acsl_size_14 <= 0) __gen_e_acsl_if_14 = 0; + else __gen_e_acsl_if_14 = __gen_e_acsl_size_14; + __gen_e_acsl_initialized_16 = __e_acsl_initialized((void *)(dest_2 + + 1 * 0), + (size_t)__gen_e_acsl_if_14); + __e_acsl_assert(__gen_e_acsl_initialized_16,1,"Assertion","main", + "\\initialized(&dest_2[0 .. 2])","tests/libc/str.c",48); + } + /*@ assert \initialized(&dest_2[0 .. 2]); */ ; + { + int __gen_e_acsl_initialized_17; + __gen_e_acsl_initialized_17 = __e_acsl_initialized((void *)(& dest_2[3]), + sizeof(char)); + __e_acsl_assert(! __gen_e_acsl_initialized_17,1,"Assertion","main", + "!\\initialized(&dest_2[3])","tests/libc/str.c",49); + } + /*@ assert ¬\initialized(&dest_2[3]); */ ; + __e_acsl_delete_block((void *)(src_2)); + __e_acsl_delete_block((void *)(dest_2)); + } + { + char dest_3[4]; + __e_acsl_store_block((void *)(dest_3),(size_t)4); + __gen_e_acsl_strcpy(dest_3,__gen_e_acsl_literal_string); + char src_3[3] = {(char)'b', (char)'c', (char)'\000'}; + __e_acsl_store_block((void *)(src_3),(size_t)3); + __e_acsl_full_init((void *)(& src_3)); + { + int __gen_e_acsl_size_15; + int __gen_e_acsl_if_15; + int __gen_e_acsl_initialized_18; + __gen_e_acsl_size_15 = 1 * ((1 - 0) + 1); + if (__gen_e_acsl_size_15 <= 0) __gen_e_acsl_if_15 = 0; + else __gen_e_acsl_if_15 = __gen_e_acsl_size_15; + __gen_e_acsl_initialized_18 = __e_acsl_initialized((void *)(dest_3 + + 1 * 0), + (size_t)__gen_e_acsl_if_15); + __e_acsl_assert(__gen_e_acsl_initialized_18,1,"Assertion","main", + "\\initialized(&dest_3[0 .. 1])","tests/libc/str.c",55); + } + /*@ assert \initialized(&dest_3[0 .. 1]); */ ; + { + int __gen_e_acsl_size_16; + int __gen_e_acsl_if_16; + int __gen_e_acsl_initialized_19; + __gen_e_acsl_size_16 = 1 * ((3 - 2) + 1); + if (__gen_e_acsl_size_16 <= 0) __gen_e_acsl_if_16 = 0; + else __gen_e_acsl_if_16 = __gen_e_acsl_size_16; + __gen_e_acsl_initialized_19 = __e_acsl_initialized((void *)(dest_3 + + 1 * 2), + (size_t)__gen_e_acsl_if_16); + __e_acsl_assert(! __gen_e_acsl_initialized_19,1,"Assertion","main", + "!\\initialized(&dest_3[2 .. 3])","tests/libc/str.c", + 56); + } + /*@ assert ¬\initialized(&dest_3[2 .. 3]); */ ; + { + int __gen_e_acsl_size_17; + int __gen_e_acsl_if_17; + int __gen_e_acsl_initialized_20; + __gen_e_acsl_size_17 = 1 * ((2 - 0) + 1); + if (__gen_e_acsl_size_17 <= 0) __gen_e_acsl_if_17 = 0; + else __gen_e_acsl_if_17 = __gen_e_acsl_size_17; + __gen_e_acsl_initialized_20 = __e_acsl_initialized((void *)(src_3 + + 1 * 0), + (size_t)__gen_e_acsl_if_17); + __e_acsl_assert(__gen_e_acsl_initialized_20,1,"Assertion","main", + "\\initialized(&src_3[0 .. 2])","tests/libc/str.c",57); + } + /*@ assert \initialized(&src_3[0 .. 2]); */ ; + __gen_e_acsl_strncat(dest_3,(char const *)(src_3),(unsigned long)1); + { + int __gen_e_acsl_size_18; + int __gen_e_acsl_if_18; + int __gen_e_acsl_initialized_21; + __gen_e_acsl_size_18 = 1 * ((2 - 0) + 1); + if (__gen_e_acsl_size_18 <= 0) __gen_e_acsl_if_18 = 0; + else __gen_e_acsl_if_18 = __gen_e_acsl_size_18; + __gen_e_acsl_initialized_21 = __e_acsl_initialized((void *)(dest_3 + + 1 * 0), + (size_t)__gen_e_acsl_if_18); + __e_acsl_assert(__gen_e_acsl_initialized_21,1,"Assertion","main", + "\\initialized(&dest_3[0 .. 2])","tests/libc/str.c",60); + } + /*@ assert \initialized(&dest_3[0 .. 2]); */ ; + { + int __gen_e_acsl_initialized_22; + __gen_e_acsl_initialized_22 = __e_acsl_initialized((void *)(& dest_3[3]), + sizeof(char)); + __e_acsl_assert(! __gen_e_acsl_initialized_22,1,"Assertion","main", + "!\\initialized(&dest_3[3])","tests/libc/str.c",61); + } + /*@ assert ¬\initialized(&dest_3[3]); */ ; + __e_acsl_delete_block((void *)(src_3)); + __e_acsl_delete_block((void *)(dest_3)); + } + { + char dest_4[4]; + __e_acsl_store_block((void *)(dest_4),(size_t)4); + __gen_e_acsl_strcpy(dest_4,__gen_e_acsl_literal_string); + char src_4[2] = {(char)'b', (char)'\000'}; + __e_acsl_store_block((void *)(src_4),(size_t)2); + __e_acsl_full_init((void *)(& src_4)); + { + int __gen_e_acsl_size_19; + int __gen_e_acsl_if_19; + int __gen_e_acsl_initialized_23; + __gen_e_acsl_size_19 = 1 * ((1 - 0) + 1); + if (__gen_e_acsl_size_19 <= 0) __gen_e_acsl_if_19 = 0; + else __gen_e_acsl_if_19 = __gen_e_acsl_size_19; + __gen_e_acsl_initialized_23 = __e_acsl_initialized((void *)(dest_4 + + 1 * 0), + (size_t)__gen_e_acsl_if_19); + __e_acsl_assert(__gen_e_acsl_initialized_23,1,"Assertion","main", + "\\initialized(&dest_4[0 .. 1])","tests/libc/str.c",67); + } + /*@ assert \initialized(&dest_4[0 .. 1]); */ ; + { + int __gen_e_acsl_size_20; + int __gen_e_acsl_if_20; + int __gen_e_acsl_initialized_24; + __gen_e_acsl_size_20 = 1 * ((3 - 2) + 1); + if (__gen_e_acsl_size_20 <= 0) __gen_e_acsl_if_20 = 0; + else __gen_e_acsl_if_20 = __gen_e_acsl_size_20; + __gen_e_acsl_initialized_24 = __e_acsl_initialized((void *)(dest_4 + + 1 * 2), + (size_t)__gen_e_acsl_if_20); + __e_acsl_assert(! __gen_e_acsl_initialized_24,1,"Assertion","main", + "!\\initialized(&dest_4[2 .. 3])","tests/libc/str.c", + 68); + } + /*@ assert ¬\initialized(&dest_4[2 .. 3]); */ ; + { + int __gen_e_acsl_size_21; + int __gen_e_acsl_if_21; + int __gen_e_acsl_initialized_25; + __gen_e_acsl_size_21 = 1 * ((1 - 0) + 1); + if (__gen_e_acsl_size_21 <= 0) __gen_e_acsl_if_21 = 0; + else __gen_e_acsl_if_21 = __gen_e_acsl_size_21; + __gen_e_acsl_initialized_25 = __e_acsl_initialized((void *)(src_4 + + 1 * 0), + (size_t)__gen_e_acsl_if_21); + __e_acsl_assert(__gen_e_acsl_initialized_25,1,"Assertion","main", + "\\initialized(&src_4[0 .. 1])","tests/libc/str.c",69); + } + /*@ assert \initialized(&src_4[0 .. 1]); */ ; + __gen_e_acsl_strncat(dest_4,(char const *)(src_4),(unsigned long)2); + { + int __gen_e_acsl_size_22; + int __gen_e_acsl_if_22; + int __gen_e_acsl_initialized_26; + __gen_e_acsl_size_22 = 1 * ((2 - 0) + 1); + if (__gen_e_acsl_size_22 <= 0) __gen_e_acsl_if_22 = 0; + else __gen_e_acsl_if_22 = __gen_e_acsl_size_22; + __gen_e_acsl_initialized_26 = __e_acsl_initialized((void *)(dest_4 + + 1 * 0), + (size_t)__gen_e_acsl_if_22); + __e_acsl_assert(__gen_e_acsl_initialized_26,1,"Assertion","main", + "\\initialized(&dest_4[0 .. 2])","tests/libc/str.c",72); + } + /*@ assert \initialized(&dest_4[0 .. 2]); */ ; + { + int __gen_e_acsl_initialized_27; + __gen_e_acsl_initialized_27 = __e_acsl_initialized((void *)(& dest_4[3]), + sizeof(char)); + __e_acsl_assert(! __gen_e_acsl_initialized_27,1,"Assertion","main", + "!\\initialized(&dest_4[3])","tests/libc/str.c",73); + } + /*@ assert ¬\initialized(&dest_4[3]); */ ; + __e_acsl_delete_block((void *)(src_4)); + __e_acsl_delete_block((void *)(dest_4)); + } + __retres = 0; + __e_acsl_memory_clean(); + return __retres; +} + + diff --git a/src/plugins/e-acsl/tests/libc/oracle/mem.res.oracle b/src/plugins/e-acsl/tests/libc/oracle/mem.res.oracle new file mode 100644 index 00000000000..0cb515ff9dc --- /dev/null +++ b/src/plugins/e-acsl/tests/libc/oracle/mem.res.oracle @@ -0,0 +1,45 @@ +[e-acsl] beginning translation. +[e-acsl] FRAMAC_SHARE/libc/string.h:131: Warning: + E-ACSL construct `logic functions with labels' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:131: Warning: + E-ACSL construct `assigns clause in behavior' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:134: Warning: + E-ACSL construct `user-defined logic type' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:120: Warning: + E-ACSL construct `logic functions with labels' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:121: Warning: + E-ACSL construct `logic functions with labels' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:120: Warning: + E-ACSL construct `assigns clause in behavior' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:124: Warning: + E-ACSL construct `logic functions performing read accesses' + is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:95: Warning: + E-ACSL construct `logic functions with labels' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:96: Warning: + E-ACSL construct `logic functions with labels' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:95: Warning: + E-ACSL construct `assigns clause in behavior' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:101: Warning: + E-ACSL construct `logic functions performing read accesses' + is not yet supported. + Ignoring annotation. +[e-acsl] translation done in project "e-acsl". +[eva:alarm] FRAMAC_SHARE/libc/string.h:134: Warning: + function __gen_e_acsl_memset: postcondition 'acsl_c_equiv' got status unknown. +[eva:alarm] FRAMAC_SHARE/libc/string.h:98: Warning: + function __e_acsl_assert, behavior blocking: precondition got status invalid. +[eva:alarm] FRAMAC_SHARE/libc/string.h:101: Warning: + function __gen_e_acsl_memcpy: postcondition 'copied_contents' got status unknown. +[eva:alarm] FRAMAC_SHARE/libc/string.h:124: Warning: + function __gen_e_acsl_memmove: postcondition 'copied_contents' got status unknown. diff --git a/src/plugins/e-acsl/tests/libc/oracle/sprintf.res.oracle b/src/plugins/e-acsl/tests/libc/oracle/sprintf.res.oracle new file mode 100644 index 00000000000..11886784cad --- /dev/null +++ b/src/plugins/e-acsl/tests/libc/oracle/sprintf.res.oracle @@ -0,0 +1,15 @@ +[e-acsl] beginning translation. +[e-acsl] translation done in project "e-acsl". +[eva:alarm] tests/libc/sprintf.c:13: Warning: + function __e_acsl_assert, behavior blocking: precondition got status invalid. +[eva:alarm] tests/libc/sprintf.c:14: Warning: + function __e_acsl_assert, behavior blocking: precondition got status invalid. +[eva:alarm] tests/libc/sprintf.c:21: Warning: + function __e_acsl_assert, behavior blocking: precondition got status invalid. +[eva:alarm] tests/libc/sprintf.c:22: Warning: + function __e_acsl_assert, behavior blocking: precondition got status invalid. +[eva:alarm] tests/libc/sprintf.c:22: Warning: assertion got status unknown. +[eva:alarm] tests/libc/sprintf.c:29: Warning: + function __e_acsl_assert, behavior blocking: precondition got status invalid. +[eva:alarm] tests/libc/sprintf.c:30: Warning: + function __e_acsl_assert, behavior blocking: precondition got status invalid. diff --git a/src/plugins/e-acsl/tests/libc/oracle/str.res.oracle b/src/plugins/e-acsl/tests/libc/oracle/str.res.oracle new file mode 100644 index 00000000000..c78ac288df7 --- /dev/null +++ b/src/plugins/e-acsl/tests/libc/oracle/str.res.oracle @@ -0,0 +1,118 @@ +[e-acsl] beginning translation. +[e-acsl] FRAMAC_SHARE/libc/string.h:445: Warning: + E-ACSL construct `logic functions performing read accesses' + is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:453: Warning: + E-ACSL construct `logic functions performing read accesses' + is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:439: Warning: + E-ACSL construct `logic functions with labels' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:440: Warning: + E-ACSL construct `logic functions with labels' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:446: Warning: + E-ACSL construct `logic functions performing read accesses' + is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:454: Warning: + E-ACSL construct `logic functions performing read accesses' + is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:438: Warning: + Some assumes clauses could not be translated. + Ignoring complete and disjoint behaviors annotations. +[e-acsl] FRAMAC_SHARE/libc/string.h:438: Warning: + E-ACSL construct `assigns clause in behavior' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:443: Warning: + E-ACSL construct `assigns clause in behavior' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:450: Warning: + E-ACSL construct `logic functions performing read accesses' + is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:450: Warning: + E-ACSL construct `assigns clause in behavior' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:458: Warning: + E-ACSL construct `logic functions performing read accesses' + is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:424: Warning: + E-ACSL construct `logic functions with labels' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:425: Warning: + E-ACSL construct `logic functions with labels' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:426: Warning: + E-ACSL construct `logic functions performing read accesses' + is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:423: Warning: + E-ACSL construct `assigns clause in behavior' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:429: Warning: + E-ACSL construct `logic functions performing read accesses' + is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:432: Warning: + E-ACSL construct `logic functions performing read accesses' + is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:433: Warning: + E-ACSL construct `logic functions performing read accesses' + is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:388: Warning: + E-ACSL construct `logic functions performing read accesses' + is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:391: Warning: + E-ACSL construct `logic functions performing read accesses' + is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:379: Warning: + E-ACSL construct `logic functions with labels' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:378: Warning: + Some assumes clauses could not be translated. + Ignoring complete and disjoint behaviors annotations. +[e-acsl] FRAMAC_SHARE/libc/string.h:378: Warning: + E-ACSL construct `assigns clause in behavior' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:389: Warning: + E-ACSL construct `logic functions performing read accesses' + is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:392: Warning: + E-ACSL construct `logic functions performing read accesses' + is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:367: Warning: + E-ACSL construct `logic functions with labels' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:368: Warning: + E-ACSL construct `logic functions performing read accesses' + is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:370: Warning: + E-ACSL construct `logic functions performing read accesses' + is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:367: Warning: + E-ACSL construct `assigns clause in behavior' is not yet supported. + Ignoring annotation. +[e-acsl] FRAMAC_SHARE/libc/string.h:373: Warning: + E-ACSL construct `logic functions performing read accesses' + is not yet supported. + Ignoring annotation. +[e-acsl] translation done in project "e-acsl". +[eva:alarm] FRAMAC_SHARE/libc/string.h:367: Warning: + function __e_acsl_assert, behavior blocking: precondition got status unknown. +[eva:alarm] FRAMAC_SHARE/libc/string.h:373: Warning: + function __gen_e_acsl_strcpy: postcondition 'equal_contents' got status unknown. +[eva:alarm] tests/libc/str.c:16: Warning: + function __e_acsl_assert, behavior blocking: precondition got status invalid. diff --git a/src/plugins/e-acsl/tests/libc/oracle_dev/file.e-acsl.err.log b/src/plugins/e-acsl/tests/libc/oracle_dev/file.e-acsl.err.log new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/plugins/e-acsl/tests/libc/oracle_dev/mem.e-acsl.err.log b/src/plugins/e-acsl/tests/libc/oracle_dev/mem.e-acsl.err.log new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/plugins/e-acsl/tests/libc/oracle_dev/sprintf.e-acsl.err.log b/src/plugins/e-acsl/tests/libc/oracle_dev/sprintf.e-acsl.err.log new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/plugins/e-acsl/tests/libc/oracle_dev/str.e-acsl.err.log b/src/plugins/e-acsl/tests/libc/oracle_dev/str.e-acsl.err.log new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/plugins/e-acsl/tests/libc/sprintf.c b/src/plugins/e-acsl/tests/libc/sprintf.c new file mode 100644 index 00000000000..3dab08bceda --- /dev/null +++ b/src/plugins/e-acsl/tests/libc/sprintf.c @@ -0,0 +1,33 @@ +/* run.config + COMMENT: Test non built-in `sprintf` memory tracking +*/ + +#include <stdio.h> + +int main() { + { + char buf[4]; + //@ assert !\initialized(&buf[0..3]); + + sprintf(buf, "%d", 10); + //@ assert \initialized(&buf[0..2]); + //@ assert !\initialized(&buf[3]); + } + { // snprintf with n < what would be printed + char buf[4]; + //@ assert !\initialized(&buf[0..3]); + + snprintf(buf, 2, "%d", 10); + //@ assert \initialized(&buf[0..1]); + //@ assert !\initialized(&buf[2..3]); + } + { // snprintf with n >= what would be printed + char buf[4]; + //@ assert !\initialized(&buf[0..3]); + + snprintf(buf, 4, "%d", 10); + //@ assert \initialized(&buf[0..2]); + //@ assert !\initialized(&buf[3]); + } + return 0; +} diff --git a/src/plugins/e-acsl/tests/libc/str.c b/src/plugins/e-acsl/tests/libc/str.c new file mode 100644 index 00000000000..dca113d6d15 --- /dev/null +++ b/src/plugins/e-acsl/tests/libc/str.c @@ -0,0 +1,76 @@ +/* run.config + COMMENT: Test non built-in `strcpy`, `strncpy`, `strcat` and `strncat` memory + COMMENT: tracking +*/ + +#include <string.h> + +int main() { + { + char dest[4]; + char src[] = "b"; + //@ assert !\initialized(&dest[0..3]); + //@ assert \initialized(&src[0..1]); + + strcpy(dest, src); + //@ assert \initialized(&dest[0..1]); + //@ assert !\initialized(&dest[2..3]); + } + { // strncpy with n < strlen(src) + char dest[4]; + char src[4] = "ab"; + //@ assert !\initialized(&dest[0..3]); + //@ assert \initialized(&src[0..3]); + + strncpy(dest, src, 1); + //@ assert \initialized(&dest[0]); + //@ assert !\initialized(&dest[1..3]); + } + { // strncpy with n >= strlen(src) + char dest[4]; + char src[4] = "b"; + //@ assert !\initialized(&dest[0..3]); + //@ assert \initialized(&src[0..3]); + + strncpy(dest, src, 3); + //@ assert \initialized(&dest[0..2]); + //@ assert !\initialized(&dest[3]); + } + { + char dest[4]; + strcpy(dest, "a"); + char src[] = "b"; + //@ assert \initialized(&dest[0..1]); + //@ assert !\initialized(&dest[2..3]); + //@ assert \initialized(&src[0..1]); + + strcat(dest, src); + //@ assert \initialized(&dest[0..2]); + //@ assert !\initialized(&dest[3]); + } + { // strncat with n < strlen(src) + char dest[4]; + strcpy(dest, "a"); + char src[] = "bc"; + //@ assert \initialized(&dest[0..1]); + //@ assert !\initialized(&dest[2..3]); + //@ assert \initialized(&src[0..2]); + + strncat(dest, src, 1); + //@ assert \initialized(&dest[0..2]); + //@ assert !\initialized(&dest[3]); + } + { // strncat with n >= strlen(src) + char dest[4]; + strcpy(dest, "a"); + char src[] = "b"; + //@ assert \initialized(&dest[0..1]); + //@ assert !\initialized(&dest[2..3]); + //@ assert \initialized(&src[0..1]); + + strncat(dest, src, 2); + //@ assert \initialized(&dest[0..2]); + //@ assert !\initialized(&dest[3]); + } + return 0; +} diff --git a/src/plugins/e-acsl/tests/temporal/oracle/gen_t_memcpy.c b/src/plugins/e-acsl/tests/temporal/oracle/gen_t_memcpy.c index 8af8c087c3b..74706f9a7b5 100644 --- a/src/plugins/e-acsl/tests/temporal/oracle/gen_t_memcpy.c +++ b/src/plugins/e-acsl/tests/temporal/oracle/gen_t_memcpy.c @@ -406,6 +406,7 @@ void *__gen_e_acsl_memset(void *s, int c, size_t n) __e_acsl_temporal_memset(s,c,n); __gen_e_acsl_at = s; __retres = memset(s,c,n); + __e_acsl_initialize(s,n); __e_acsl_assert(__retres == __gen_e_acsl_at,1,"Postcondition","memset", "result_ptr: \\result == \\old(s)", "FRAMAC_SHARE/libc/string.h",135); @@ -527,6 +528,7 @@ void *__gen_e_acsl_memcpy(void * restrict dest, void const * restrict src, } __gen_e_acsl_at = dest; __retres = memcpy(dest,src,n); + __e_acsl_initialize(dest,n); __e_acsl_assert(__retres == __gen_e_acsl_at,1,"Postcondition","memcpy", "result_ptr: \\result == \\old(dest)", "FRAMAC_SHARE/libc/string.h",102); diff --git a/src/plugins/e-acsl/tests/temporal/oracle/t_memcpy.res.oracle b/src/plugins/e-acsl/tests/temporal/oracle/t_memcpy.res.oracle index b2e2ee7e00a..e7b1b71eea0 100644 --- a/src/plugins/e-acsl/tests/temporal/oracle/t_memcpy.res.oracle +++ b/src/plugins/e-acsl/tests/temporal/oracle/t_memcpy.res.oracle @@ -1,10 +1,4 @@ [e-acsl] beginning translation. -[e-acsl] Warning: annotating undefined function `memcpy': - the generated program may miss memory instrumentation - if there are memory-related annotations. -[e-acsl] Warning: annotating undefined function `memset': - the generated program may miss memory instrumentation - if there are memory-related annotations. [e-acsl] FRAMAC_SHARE/libc/string.h:131: Warning: E-ACSL construct `logic functions with labels' is not yet supported. Ignoring annotation. -- GitLab