diff --git a/regression/cbmc-concurrency/thread_chain_cbmc1/main.c b/regression/cbmc-concurrency/thread_chain_cbmc1/main.c index f9e0ab46b64..ed0471a5b18 100644 --- a/regression/cbmc-concurrency/thread_chain_cbmc1/main.c +++ b/regression/cbmc-concurrency/thread_chain_cbmc1/main.c @@ -18,7 +18,7 @@ typedef unsigned long thread_id_t; // Internal unbounded array indexed by local thread identifiers -extern __CPROVER_bool __CPROVER_threads_exited[]; +__CPROVER_bool __CPROVER_threads_exited[__CPROVER_constant_infinity_uint]; // A thread_chain is like a chain of threads `f, g, ...` where `f` // must terminate before `g` can start to run, and so forth. diff --git a/regression/cbmc-concurrency/thread_chain_cbmc2/main.c b/regression/cbmc-concurrency/thread_chain_cbmc2/main.c index f9e0ab46b64..ed0471a5b18 100644 --- a/regression/cbmc-concurrency/thread_chain_cbmc2/main.c +++ b/regression/cbmc-concurrency/thread_chain_cbmc2/main.c @@ -18,7 +18,7 @@ typedef unsigned long thread_id_t; // Internal unbounded array indexed by local thread identifiers -extern __CPROVER_bool __CPROVER_threads_exited[]; +__CPROVER_bool __CPROVER_threads_exited[__CPROVER_constant_infinity_uint]; // A thread_chain is like a chain of threads `f, g, ...` where `f` // must terminate before `g` can start to run, and so forth. diff --git a/regression/cbmc-library/__atomic_always_lock_free-01/main.c b/regression/cbmc-library/__atomic_always_lock_free-01/main.c index cfb762868e4..5b88bd587df 100644 --- a/regression/cbmc-library/__atomic_always_lock_free-01/main.c +++ b/regression/cbmc-library/__atomic_always_lock_free-01/main.c @@ -1,5 +1,9 @@ #include +#ifndef __GNUC__ +_Bool __atomic_always_lock_free(__CPROVER_size_t, void *); +#endif + int main() { assert(__atomic_always_lock_free(sizeof(int), 0)); diff --git a/regression/cbmc-library/__atomic_clear-01/main.c b/regression/cbmc-library/__atomic_clear-01/main.c index 94a759177c5..57bf57abbc2 100644 --- a/regression/cbmc-library/__atomic_clear-01/main.c +++ b/regression/cbmc-library/__atomic_clear-01/main.c @@ -1,5 +1,9 @@ #include +#ifndef __GNUC__ +void __atomic_clear(_Bool *, int); +#endif + int main() { _Bool n; diff --git a/regression/cbmc-library/__atomic_is_lock_free-01/main.c b/regression/cbmc-library/__atomic_is_lock_free-01/main.c index 514abeaac5d..3ac747b7976 100644 --- a/regression/cbmc-library/__atomic_is_lock_free-01/main.c +++ b/regression/cbmc-library/__atomic_is_lock_free-01/main.c @@ -1,5 +1,9 @@ #include +#ifndef __GNUC__ +_Bool __atomic_is_lock_free(__CPROVER_size_t, void *); +#endif + int main() { assert(__atomic_is_lock_free(sizeof(int), 0)); diff --git a/regression/cbmc-library/__atomic_signal_fence-01/main.c b/regression/cbmc-library/__atomic_signal_fence-01/main.c index 3a809cf651f..539a54287e5 100644 --- a/regression/cbmc-library/__atomic_signal_fence-01/main.c +++ b/regression/cbmc-library/__atomic_signal_fence-01/main.c @@ -1,5 +1,9 @@ #include +#ifndef __GNUC__ +void __atomic_signal_fence(int); +#endif + int main() { __atomic_signal_fence(0); diff --git a/regression/cbmc-library/__atomic_test_and_set-01/main.c b/regression/cbmc-library/__atomic_test_and_set-01/main.c index 9a9150b3766..4fdcf0ffb68 100644 --- a/regression/cbmc-library/__atomic_test_and_set-01/main.c +++ b/regression/cbmc-library/__atomic_test_and_set-01/main.c @@ -1,5 +1,9 @@ #include +#ifndef __GNUC__ +_Bool __atomic_test_and_set(void *, int); +#endif + int main() { char c = 0; diff --git a/regression/cbmc-library/__atomic_thread_fence-01/main.c b/regression/cbmc-library/__atomic_thread_fence-01/main.c index b9001b81810..dd08b8e1801 100644 --- a/regression/cbmc-library/__atomic_thread_fence-01/main.c +++ b/regression/cbmc-library/__atomic_thread_fence-01/main.c @@ -1,5 +1,9 @@ #include +#ifndef __GNUC__ +void __atomic_thread_fence(int); +#endif + int main() { __atomic_thread_fence(0); diff --git a/regression/cbmc-library/__errno_location-01/main.c b/regression/cbmc-library/__errno_location-01/main.c index 24329d09ff5..c32d17bf73b 100644 --- a/regression/cbmc-library/__errno_location-01/main.c +++ b/regression/cbmc-library/__errno_location-01/main.c @@ -1,9 +1,9 @@ #include #include -int main() +int main(int arc, char *argv[]) { - __errno_location(); - assert(0); + // errno expands to use of __errno_location() with glibc + assert(errno == 0); return 0; } diff --git a/regression/cbmc-library/__errno_location-01/test.desc b/regression/cbmc-library/__errno_location-01/test.desc index 9542d988e8d..96c9b4bcd7b 100644 --- a/regression/cbmc-library/__errno_location-01/test.desc +++ b/regression/cbmc-library/__errno_location-01/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG +CORE main.c --pointer-check --bounds-check ^EXIT=0$ diff --git a/regression/cbmc-library/_longjmp-01/main.c b/regression/cbmc-library/_longjmp-01/main.c index cdac71afdc5..5be8777c4ed 100644 --- a/regression/cbmc-library/_longjmp-01/main.c +++ b/regression/cbmc-library/_longjmp-01/main.c @@ -1,5 +1,9 @@ #include +#ifndef __GNUC__ +# define _longjmp(a, b) longjmp(a, b) +#endif + static jmp_buf env; int main() diff --git a/regression/cbmc-library/_longjmp-01/test.desc b/regression/cbmc-library/_longjmp-01/test.desc index c07910fc69d..b7d7e2001ce 100644 --- a/regression/cbmc-library/_longjmp-01/test.desc +++ b/regression/cbmc-library/_longjmp-01/test.desc @@ -1,8 +1,8 @@ CORE main.c --pointer-check --bounds-check -^\[_longjmp.assertion.1\] line 12 _longjmp requires instrumentation: FAILURE$ -^\[main.assertion.1\] line 8 unreachable: SUCCESS$ +^\[_?longjmp.assertion.1\] line 12 _?longjmp requires instrumentation: FAILURE$ +^\[main.assertion.1\] line 12 unreachable: SUCCESS$ ^VERIFICATION FAILED$ ^EXIT=10$ ^SIGNAL=0$ diff --git a/regression/cbmc-library/alloca-02/main.c b/regression/cbmc-library/alloca-02/main.c index 27dd244c4ad..d23244d6a88 100644 --- a/regression/cbmc-library/alloca-02/main.c +++ b/regression/cbmc-library/alloca-02/main.c @@ -4,9 +4,14 @@ void *alloca(size_t alloca_size); #endif +// intentionally type conflicting: the built-in library uses const void*; this +// is to check that object type updates are performed +extern const char *__CPROVER_alloca_object; + int *foo() { int *foo_ptr = alloca(sizeof(int)); + __CPROVER_assert(foo_ptr == __CPROVER_alloca_object, "may fail"); return foo_ptr; } diff --git a/regression/cbmc-library/alloca-02/test.desc b/regression/cbmc-library/alloca-02/test.desc index 3c2405a8436..273ea7118de 100644 --- a/regression/cbmc-library/alloca-02/test.desc +++ b/regression/cbmc-library/alloca-02/test.desc @@ -2,7 +2,7 @@ CORE main.c --pointer-check dereference failure: dead object in \*from_foo: FAILURE$ -^\*\* 1 of 6 failed +^\*\* 2 of 7 failed ^VERIFICATION FAILED$ ^EXIT=10$ ^SIGNAL=0$ diff --git a/regression/cbmc-library/memcpy-07/main.c b/regression/cbmc-library/memcpy-07/main.c index 06ad39e2b74..971509901fc 100644 --- a/regression/cbmc-library/memcpy-07/main.c +++ b/regression/cbmc-library/memcpy-07/main.c @@ -1,4 +1,5 @@ // #include intentionally omitted +void *memcpy(); struct c { diff --git a/regression/cbmc/String_Abstraction17/strcpy-no-decl.c b/regression/cbmc/String_Abstraction17/strcpy-no-decl.c index 0e7a93df5e6..17c80a7a2d5 100644 --- a/regression/cbmc/String_Abstraction17/strcpy-no-decl.c +++ b/regression/cbmc/String_Abstraction17/strcpy-no-decl.c @@ -1,4 +1,5 @@ -void *malloc(unsigned); +#include +// string.h intentionally omitted char *make_str() { diff --git a/regression/cbmc/String_Abstraction17/test.desc b/regression/cbmc/String_Abstraction17/test.desc index ea2896bae68..ad0106474bd 100644 --- a/regression/cbmc/String_Abstraction17/test.desc +++ b/regression/cbmc/String_Abstraction17/test.desc @@ -1,11 +1,13 @@ CORE strcpy-no-decl.c --string-abstraction --validate-goto-model -Condition: strlen type inconsistency -^EXIT=(127|134)$ +^EXIT=10$ ^SIGNAL=0$ -- ^warning: ignoring -- -While this test currently passes when omitting --validate-goto-model, we should -expect a report of type inconsistencies as no forward declarations are present. +The linker is able to fix up type inconsistencies of the missing function +declarations, but the absence of a declaration of strlen results in not picking +up the library model. Consequently the assumption does not work as intended, and +verification fails. Adding #include makes verification pass as +expected. diff --git a/regression/cbmc/array_of_bool_as_bitvec/main.c b/regression/cbmc/array_of_bool_as_bitvec/main.c index 19888bb1a45..07106dde3d2 100644 --- a/regression/cbmc/array_of_bool_as_bitvec/main.c +++ b/regression/cbmc/array_of_bool_as_bitvec/main.c @@ -3,6 +3,7 @@ #include __CPROVER_bool w[8]; +__CPROVER_bool v[__CPROVER_constant_infinity_uint]; void main() { diff --git a/regression/cbmc/array_of_bool_as_bitvec/test-smt2-outfile.desc b/regression/cbmc/array_of_bool_as_bitvec/test-smt2-outfile.desc index ae228a04e44..a7ede3fc945 100644 --- a/regression/cbmc/array_of_bool_as_bitvec/test-smt2-outfile.desc +++ b/regression/cbmc/array_of_bool_as_bitvec/test-smt2-outfile.desc @@ -1,15 +1,15 @@ CORE broken-smt-backend main.c --smt2 --outfile - -\(= \(select array_of\.2 i\) \(ite false #b1 #b0\)\) -\(= \(select array\.3 \(\(_ zero_extend 32\) \|main::1::idx!0@1#1\|\)\) #b1\) -\(= \(select array\.3 \(_ bv\d+ 64\)\) \(ite false #b1 #b0\)\) +\(= \(select array_of\.0 i\) \(ite false #b1 #b0\)\) +\(= \(select array\.1 \(\(_ zero_extend 32\) \|main::1::idx!0@1#1\|\)\) #b1\) +\(= \(select array\.1 \(_ bv\d+ 64\)\) \(ite false #b1 #b0\)\) ^EXIT=0$ ^SIGNAL=0$ -- -\(= \(select array_of\.2 i\) false\) -\(= \(select array\.3 \(\(_ zero_extend 32\) \|main::1::idx!0@1#1\|\)\) #b1 #b0\) -\(= \(select array\.3 \(_ bv\d+ 64\)\) false\) +\(= \(select array_of\.0 i\) false\) +\(= \(select array\.1 \(\(_ zero_extend 32\) \|main::1::idx!0@1#1\|\)\) #b1 #b0\) +\(= \(select array\.1 \(_ bv\d+ 64\)\) false\) -- This test checks for correctness of BitVec-array encoding of Boolean arrays. diff --git a/regression/cbmc/enum-trace1/main.c b/regression/cbmc/enum-trace1/main.c index b4e8ce48d74..2256efc27c1 100644 --- a/regression/cbmc/enum-trace1/main.c +++ b/regression/cbmc/enum-trace1/main.c @@ -16,6 +16,9 @@ typedef enum ENUMT void test(enum ENUM e, enum_t t) { + // ensure sane input values + __CPROVER_assume(__CPROVER_enum_is_in_range(e)); + __CPROVER_assume(__CPROVER_enum_is_in_range(t)); enum ENUM ee = e; enum_t tt = t; diff --git a/regression/cbmc/xml-escaping/debug_output.desc b/regression/cbmc/xml-escaping/debug_output.desc index ddfb415c818..af4f42c9fa8 100644 --- a/regression/cbmc/xml-escaping/debug_output.desc +++ b/regression/cbmc/xml-escaping/debug_output.desc @@ -4,7 +4,6 @@ main.c ^EXIT=10$ ^SIGNAL=0$ VERIFICATION FAILED -⇔ false \¬main\:\:1\:\:x\!0\@1\#1 -- XML does not support escaping non-printable character diff --git a/regression/cbmc/xml-trace/test.desc b/regression/cbmc/xml-trace/test.desc index 5ed215d69a5..999afcec05a 100644 --- a/regression/cbmc/xml-trace/test.desc +++ b/regression/cbmc/xml-trace/test.desc @@ -7,7 +7,7 @@ activate-multi-line-match VERIFICATION FAILED