Description: Mark non-portable tests as KNOWNBUG
 Also includes fixes to perform proper cleanup
 .
 cbmc (5.84.0-1) unstable; urgency=low
 .
   * New upstream release
   * Includes bugfix for unintentional copy (Closes: #984008)
   * Updated Standards version to 4.6.0 (no changes required)
Author: Michael Tautschnig <mt@debian.org>
Bug-Debian: https://bugs.debian.org/984008

---
The information above should follow the Patch Tagging Guidelines, please
checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here
are templates for supplementary fields that you might want to add:

Origin: <vendor|upstream|other>, <url of original patch>
Bug: <url in upstream bugtracker>
Bug-Debian: https://bugs.debian.org/<bugnumber>
Bug-Ubuntu: https://launchpad.net/bugs/<bugnumber>
Forwarded: <no|not-needed|url proving that it has been forwarded>
Reviewed-By: <name and email of someone who approved the patch>
Last-Update: 2023-06-01

--- cbmc-5.84.0.orig/regression/Makefile
+++ cbmc-5.84.0/regression/Makefile
@@ -33,11 +33,9 @@ DIRS = cbmc-shadow-memory \
        goto-cl \
        goto-cc-cbmc \
        goto-cc-cbmc-shared-options \
-       cbmc-cpp \
        goto-cc-goto-analyzer \
        goto-analyzer-simplify \
        statement-list \
-       systemc \
        contracts \
        contracts-dfcc \
        goto-synthesizer \
@@ -53,8 +51,6 @@ DIRS = cbmc-shadow-memory \
        solver-hardness \
        goto-ld \
        validate-trace-xml-schema \
-       cbmc-primitives \
-       goto-interpreter \
        cbmc-sequentialization \
        cpp-linter \
        catch-framework \
--- cbmc-5.84.0.orig/regression/catch-framework/Makefile
+++ cbmc-5.84.0/regression/catch-framework/Makefile
@@ -6,4 +6,5 @@ test:
 tests.log: ../test.pl test
 
 clean:
+	find . -name '*.out' -execdir $(RM) '{}' \;
 	$(RM) tests*.log
--- cbmc-5.84.0.orig/regression/cbmc-incr-smt2/Makefile
+++ cbmc-5.84.0/regression/cbmc-incr-smt2/Makefile
@@ -9,7 +9,7 @@ else
 	exclude_broken_windows_tests=
 endif
 
-test: test.z3 test.cvc5
+test: test.z3
 
 test.z3:
 	@../test.pl -e -p -c "../../../src/cbmc/cbmc --incremental-smt2-solver 'z3 --smt2 -in' --validate-goto-model --validate-ssa-equation" $(exclude_broken_windows_tests)
--- cbmc-5.84.0.orig/regression/cbmc-incr-smt2/arrays_traces/array_write.desc
+++ cbmc-5.84.0/regression/cbmc-incr-smt2/arrays_traces/array_write.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 array_write.c
 --trace
 Passing problem to incremental SMT2 solving
--- cbmc-5.84.0.orig/regression/cbmc-incr-smt2/nondeterministic-int-assert/stdout-match.desc
+++ cbmc-5.84.0/regression/cbmc-incr-smt2/nondeterministic-int-assert/stdout-match.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 test.c
 --outfile -
 Starting Bounded Model Checking
--- cbmc-5.84.0.orig/regression/cbmc-incr-smt2/pointers-relational-operators/pointers_assume.desc
+++ cbmc-5.84.0/regression/cbmc-incr-smt2/pointers-relational-operators/pointers_assume.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 pointers_assume.c
 --trace
 \[main\.assertion\.1\] line \d+ x != y: expected successful: SUCCESS
--- cbmc-5.84.0.orig/regression/cbmc-incr-smt2/pointers/null_pointer.desc
+++ cbmc-5.84.0/regression/cbmc-incr-smt2/pointers/null_pointer.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 null_pointer.c
 --trace
 Passing problem to incremental SMT2 solving
--- cbmc-5.84.0.orig/regression/cbmc-incr-smt2/pointers/object_size.desc
+++ cbmc-5.84.0/regression/cbmc-incr-smt2/pointers/object_size.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 object_size.c
 --trace
 line 12 Expected int sizes\.: SUCCESS
--- cbmc-5.84.0.orig/regression/cbmc-library/fprintf-01/test.desc
+++ cbmc-5.84.0/regression/cbmc-library/fprintf-01/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --pointer-check --bounds-check
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/cbmc-library/write-01/test.desc
+++ cbmc-5.84.0/regression/cbmc-library/write-01/test.desc
@@ -1,4 +1,4 @@
-CORE unix
+KNOWNBUG
 main.c
 --pointer-check --bounds-check --conversion-check --unwind 1
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/cbmc-output-file/dump-smt-formula/cvc5-match.desc
+++ cbmc-5.84.0/regression/cbmc-output-file/dump-smt-formula/cvc5-match.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 test.c
 --incremental-smt2-solver 'cvc5 --lang=smtlib2.6 --incremental' --dump-smt-formula %out-file-name%
 Passing problem to incremental SMT2 solving via "cvc5 --lang=smtlib2.6 --incremental"
--- cbmc-5.84.0.orig/regression/cbmc-output-file/dump-smt-formula/cvc5-no-match.desc
+++ cbmc-5.84.0/regression/cbmc-output-file/dump-smt-formula/cvc5-no-match.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 test.c
 --incremental-smt2-solver 'cvc5 --lang=smtlib2.6 --incremental' --dump-smt-formula %out-file-name%
 Passing problem to incremental SMT2 solving via "cvc5 --lang=smtlib2.6 --incremental"
--- cbmc-5.84.0.orig/regression/cbmc-primitives/exists_memory_checks/invalid_index_range.desc
+++ cbmc-5.84.0/regression/cbmc-primitives/exists_memory_checks/invalid_index_range.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 invalid_index_range.c
 --pointer-check
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/cbmc-primitives/exists_memory_checks/negated_exists.desc
+++ cbmc-5.84.0/regression/cbmc-primitives/exists_memory_checks/negated_exists.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 negated_exists.c
 --pointer-check
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/cbmc-primitives/exists_memory_checks/smt_missing_range_check.desc
+++ cbmc-5.84.0/regression/cbmc-primitives/exists_memory_checks/smt_missing_range_check.desc
@@ -1,4 +1,4 @@
-CORE smt-backend
+KNOWNBUG
 smt_missing_range_check.c
 --pointer-check -z3
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/cbmc-primitives/exists_memory_checks/valid_index_range.desc
+++ cbmc-5.84.0/regression/cbmc-primitives/exists_memory_checks/valid_index_range.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 valid_index_range.c
 --pointer-check
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/cbmc-primitives/forall_6231_1/test.desc
+++ cbmc-5.84.0/regression/cbmc-primitives/forall_6231_1/test.desc
@@ -1,4 +1,4 @@
-CORE new-smt-backend
+KNOWNBUG
 test.c
 --pointer-check
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/cbmc-primitives/forall_6231_2/test.desc
+++ cbmc-5.84.0/regression/cbmc-primitives/forall_6231_2/test.desc
@@ -1,4 +1,4 @@
-CORE new-smt-backend
+KNOWNBUG
 test.c
 --pointer-check
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/cbmc-primitives/forall_6231_3/test.desc
+++ cbmc-5.84.0/regression/cbmc-primitives/forall_6231_3/test.desc
@@ -1,4 +1,4 @@
-CORE new-smt-backend
+KNOWNBUG
 test.c
 --pointer-check
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/cbmc-primitives/forall_6231_3/test_malloc_less_than_bound.desc
+++ cbmc-5.84.0/regression/cbmc-primitives/forall_6231_3/test_malloc_less_than_bound.desc
@@ -1,4 +1,4 @@
-CORE new-smt-backend
+KNOWNBUG
 test_malloc_less_than_bound.c
 --pointer-check
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/cbmc/Pointer2/test.desc
+++ cbmc-5.84.0/regression/cbmc/Pointer2/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 
 ^VERIFICATION SUCCESSFUL$
--- cbmc-5.84.0.orig/regression/cbmc/Pointer_byte_extract8/test.desc
+++ cbmc-5.84.0/regression/cbmc/Pointer_byte_extract8/test.desc
@@ -1,4 +1,4 @@
-CORE new-smt-backend
+KNOWNBUG
 main.c
 --64 --unwind 4 --unwinding-assertions
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/cbmc/argc-and-argv/argv1.desc
+++ cbmc-5.84.0/regression/cbmc/argc-and-argv/argv1.desc
@@ -1,4 +1,4 @@
-CORE new-smt-backend
+KNOWNBUG
 argv1.c
 --bounds-check --pointer-check
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/cbmc/array-cell-sensitivity2/test.desc
+++ cbmc-5.84.0/regression/cbmc/array-cell-sensitivity2/test.desc
@@ -1,4 +1,4 @@
-CORE new-smt-backend
+KNOWNBUG
 test.c
 --show-vcc
 main::1::array!0@1#2 = with\(main::1::array!0@1#1, cast\(main::argc!0@1#1 \+ -1, signedbv\[64\]\), 1\)
--- cbmc-5.84.0.orig/regression/cbmc/array-function-parameters/test.desc
+++ cbmc-5.84.0/regression/cbmc/array-function-parameters/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 test.c
 --function test --min-null-tree-depth 2 --max-nondet-tree-depth 2 --bounds-check
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/cbmc/array_of_bool_as_bitvec/test-smt2-outfile.desc
+++ cbmc-5.84.0/regression/cbmc/array_of_bool_as_bitvec/test-smt2-outfile.desc
@@ -1,4 +1,4 @@
-CORE broken-smt-backend
+KNOWNBUG
 main.c
 --smt2 --outfile -
 \(= \(select array_of\.0 i\) \(ite false #b1 #b0\)\)
--- cbmc-5.84.0.orig/regression/cbmc/assigning_nullpointers_should_not_crash_symex/test.desc
+++ cbmc-5.84.0/regression/cbmc/assigning_nullpointers_should_not_crash_symex/test.desc
@@ -1,4 +1,4 @@
-CORE new-smt-backend
+KNOWNBUG
 main.c
 
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/cbmc/bounds_check2/test.desc
+++ cbmc-5.84.0/regression/cbmc/bounds_check2/test.desc
@@ -1,4 +1,4 @@
-CORE new-smt-backend
+KNOWNBUG
 main.c
 --bounds-check --retain-trivial-checks
 ^Generated \d+ VCC\(s\), 0 remaining after simplification$
--- cbmc-5.84.0.orig/regression/cbmc/byte_update11/test.desc
+++ cbmc-5.84.0/regression/cbmc/byte_update11/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --little-endian
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/cbmc/double_deref/double_deref_with_pointer_arithmetic.desc
+++ cbmc-5.84.0/regression/cbmc/double_deref/double_deref_with_pointer_arithmetic.desc
@@ -1,4 +1,4 @@
-CORE new-smt-backend
+KNOWNBUG
 double_deref_with_pointer_arithmetic.c
 --show-vcc
 ^\{-[0-9]+\} derefd_pointer::derefd_pointer!0#1 = \{ symex_dynamic::dynamic_object#3\[\[0\]\], symex_dynamic::dynamic_object#3\[\[1\]\] \}\[cast\(mod\(main::argc!0@1#1, 2\), signedbv\[64\]\)\]
--- cbmc-5.84.0.orig/regression/cbmc/export-symex-ready-goto/test-bad-usage.desc
+++ cbmc-5.84.0/regression/cbmc/export-symex-ready-goto/test-bad-usage.desc
@@ -1,4 +1,4 @@
-CORE winbug
+KNOWNBUG
 test.c
 --export-symex-ready-goto ""
 ^ERROR: Please provide a filename to write the goto-binary to.$
--- cbmc-5.84.0.orig/regression/cbmc/gcc_builtin_sub_overflow/test.desc
+++ cbmc-5.84.0/regression/cbmc/gcc_builtin_sub_overflow/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 
 \[check_int.assertion.1\] line \d+ assertion !__builtin_ssub_overflow\(1, 1, &result\): SUCCESS
--- cbmc-5.84.0.orig/regression/cbmc/graphml_witness2/test.desc
+++ cbmc-5.84.0/regression/cbmc/graphml_witness2/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --graphml-witness - --unwindset main.0:1 --unwinding-assertions --stack-trace
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/cbmc/havoc_slice/test_struct_raw_bytes.desc
+++ cbmc-5.84.0/regression/cbmc/havoc_slice/test_struct_raw_bytes.desc
@@ -1,4 +1,4 @@
-CORE broken-cprover-smt-backend
+KNOWNBUG
 test_struct_raw_bytes.c
 
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/cbmc/memory_allocation2/test.desc
+++ cbmc-5.84.0/regression/cbmc/memory_allocation2/test.desc
@@ -1,4 +1,4 @@
-CORE new-smt-backend
+KNOWNBUG
 main.c
 --bounds-check
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/cbmc/pointer-overflow2/test.desc
+++ cbmc-5.84.0/regression/cbmc/pointer-overflow2/test.desc
@@ -1,4 +1,4 @@
-CORE new-smt-backend
+KNOWNBUG
 main.c
 --pointer-overflow-check
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/cbmc/pointer-overflow3/no-simplify.desc
+++ cbmc-5.84.0/regression/cbmc/pointer-overflow3/no-simplify.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --pointer-overflow-check --no-simplify
 ^\[main.pointer_arithmetic.\d+\] line 6 pointer arithmetic: pointer outside object bounds in p \+ \(signed (long (long )?)?int\)10: FAILURE
--- cbmc-5.84.0.orig/regression/cbmc/pointer-overflow3/test.desc
+++ cbmc-5.84.0/regression/cbmc/pointer-overflow3/test.desc
@@ -1,4 +1,4 @@
-CORE new-smt-backend
+KNOWNBUG
 main.c
 --pointer-overflow-check
 ^\[main.pointer_arithmetic.\d+\] line 6 pointer arithmetic: pointer outside object bounds in p \+ \(signed (long (long )?)?int\)10: FAILURE
--- cbmc-5.84.0.orig/regression/cbmc/pragma_cprover1/test.desc
+++ cbmc-5.84.0/regression/cbmc/pragma_cprover1/test.desc
@@ -1,4 +1,4 @@
-CORE new-smt-backend
+KNOWNBUG
 main.c
 --signed-overflow-check --bounds-check
 line 14 array 'y' upper bound in y\[\(signed long( long)? int\)1\]: FAILURE$
--- cbmc-5.84.0.orig/regression/cbmc/pragma_cprover_enable_all/test.desc
+++ cbmc-5.84.0/regression/cbmc/pragma_cprover_enable_all/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --object-bits 8 --bounds-check --pointer-check --pointer-primitive-check --div-by-zero-check --enum-range-check --unsigned-overflow-check --signed-overflow-check --pointer-overflow-check --float-overflow-check --conversion-check --undefined-shift-check --nan-check --pointer-primitive-check
 ^\[main\.pointer_primitives\.\d+\] line 77 pointer invalid in R_OK\(q, \(unsigned (long (long )?)?int\)1\): FAILURE$
--- cbmc-5.84.0.orig/regression/cbmc/ptr_arithmetic_on_null/test.desc
+++ cbmc-5.84.0/regression/cbmc/ptr_arithmetic_on_null/test.desc
@@ -1,4 +1,4 @@
-CORE gcc-only
+KNOWNBUG
 main.c
 
 ^\[main.assertion.1\] line .* assertion \(\(char \*\)NULL\) != \(char \*\)\(void \*\)0 \+ \(.*\)1: SUCCESS$
--- cbmc-5.84.0.orig/regression/cbmc/return9/test.desc
+++ cbmc-5.84.0/regression/cbmc/return9/test.desc
@@ -1,4 +1,4 @@
-CORE new-smt-backend
+KNOWNBUG
 tcas_v23_523.c
 --bounds-check
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns-enforce-malloc-zero/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns-enforce-malloc-zero/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --malloc-may-fail --malloc-fail-null --dfcc main --enforce-contract foo
 ^\[foo.assigns.\d+\] line \d+ Check that a\[\(signed long (long )?int\)i\] is assignable: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns-frees-clauses-check-side-effects/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns-frees-clauses-check-side-effects/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract foo --malloc-may-fail --malloc-fail-null
 ^\[foo_assigns.assigns.\d+\] line \d+ Check that ptr\[\(.* int\)0\] is assignable: FAILURE$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns-local-composite/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns-local-composite/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract foo
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns-replace-malloc-zero/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns-replace-malloc-zero/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --replace-call-with-contract foo --malloc-may-fail --malloc-fail-null
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns-slice-targets/test-enforce.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns-slice-targets/test-enforce.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main-enforce.c
 --dfcc main --enforce-contract foo
 ^\[foo.assigns.\d+\].* Check that s->arr1\[\(.*\)0\] is assignable: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns-slice-targets/test-replace.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns-slice-targets/test-replace.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main-replace.c
 --dfcc main --replace-call-with-contract foo
 ^\[main.assertion.\d+\].*assertion s.a == 0: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_enforce_15/test-foo.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_enforce_15/test-foo.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract foo
 ^VERIFICATION SUCCESSFUL$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_enforce_18/test-bar.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_enforce_18/test-bar.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract bar _ --pointer-primitive-check
 ^\[bar.assigns.\d+\] line 20 Check that \*b is assignable: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_enforce_19_a/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_enforce_19_a/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract f
 ^\[f.assigns.\d+\] .* Check that a is assignable: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_enforce_arrays_01/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_enforce_arrays_01/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract f1
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_enforce_arrays_02/test-f2.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_enforce_arrays_02/test-f2.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract f2
 ^\[f2.assigns.\d+\] line \d+ Check that a\[.*0\] is assignable: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_enforce_conditional_pointer_object/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_enforce_conditional_pointer_object/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract foo
 main.c function foo
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_enforce_conditional_pointer_object_list/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_enforce_conditional_pointer_object_list/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract foo
 main.c function foo
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_enforce_malloc_01/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_enforce_malloc_01/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract f
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_enforce_malloc_02/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_enforce_malloc_02/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract f
 main.c function f
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_enforce_malloc_03/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_enforce_malloc_03/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract foo
 ^\[foo.assigns.\d+\].* Check that \*loc1 is assignable: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_enforce_multi_file_02/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_enforce_multi_file_02/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract f1
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_enforce_offsets_2/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_enforce_offsets_2/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract foo _ --pointer-check
 ^\[foo.assigns.*\d+\].* line 8 Check that x\[\(.*\)1\] is assignable: (SUCCESS|FAILURE)$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_enforce_statics/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_enforce_statics/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract foo _ --pointer-primitive-check
 ^\[foo.assigns.\d+\] line \d+ Check that y is assignable: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_enforce_structs_01/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_enforce_structs_01/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract f
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_enforce_structs_02/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_enforce_structs_02/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract f
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_enforce_structs_03/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_enforce_structs_03/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract f
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_enforce_structs_05/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_enforce_structs_05/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract f1
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_enforce_structs_06/test-f1.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_enforce_structs_06/test-f1.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract f1
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_enforce_structs_06/test-f2.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_enforce_structs_06/test-f2.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract f2
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_enforce_structs_07/test-f1.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_enforce_structs_07/test-f1.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --malloc-may-fail --malloc-fail-null --dfcc main --enforce-contract f1 _ --pointer-check
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_enforce_structs_07/test-f2.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_enforce_structs_07/test-f2.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --malloc-may-fail --malloc-fail-null --dfcc main --enforce-contract f2 _ --pointer-check
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_enforce_structs_08/test-f1.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_enforce_structs_08/test-f1.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract f1 _ --malloc-may-fail --malloc-fail-null --pointer-check
 ^\[f1.assigns.\d+\] line \d+ Check that p->buf\[\(.*\)0\] is assignable: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_enforce_structs_08/test-f2.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_enforce_structs_08/test-f2.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract f2 _ --malloc-may-fail --malloc-fail-null --pointer-check
 ^\[f2.assigns.\d+\] line \d+ Check that pp->p->buf\[\(.*\)0\] is assignable: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_replace_havoc_dependent_targets_fail/enforce.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_replace_havoc_dependent_targets_fail/enforce.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main_enforce.c
 --dfcc main --enforce-contract resize_vec _ --signed-overflow-check --unsigned-overflow-check --pointer-overflow-check
 ^VERIFICATION SUCCESSFUL$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_replace_havoc_dependent_targets_pass/enforce.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_replace_havoc_dependent_targets_pass/enforce.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main_enforce.c
 --dfcc main --enforce-contract resize_vec _ --signed-overflow-check --unsigned-overflow-check --pointer-overflow-check
 ^VERIFICATION SUCCESSFUL$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_replace_havoc_dependent_targets_pass/replace.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_replace_havoc_dependent_targets_pass/replace.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main_replace.c
 --dfcc main --replace-call-with-contract resize_vec --enforce-contract resize_vec_incr10 _ --signed-overflow-check --unsigned-overflow-check --pointer-overflow-check
 ^\[resize_vec.assigns.\d+\].*Check that the assigns clause of contract::resize_vec is included in the caller's assigns clause: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_type_checking_valid_cases/test-foo6.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_type_checking_valid_cases/test-foo6.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract foo6 _ --pointer-primitive-check
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_type_checking_valid_cases/test-foo7.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_type_checking_valid_cases/test-foo7.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract foo7 _ --pointer-primitive-check
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/assigns_type_checking_valid_cases/test-foo8.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/assigns_type_checking_valid_cases/test-foo8.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract foo8 _ --pointer-primitive-check
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/frees-clause-and-predicates/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/frees-clause-and-predicates/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract foo
 ^VERIFICATION SUCCESSFUL$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/function-contract-mapping/test-enforce-replace-pass.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/function-contract-mapping/test-enforce-replace-pass.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --malloc-may-fail --malloc-fail-null --dfcc main --enforce-contract foo/my_contract --replace-call-with-contract bar/my_contract _ --pointer-check --pointer-primitive-check --pointer-overflow-check
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/function-pointer-contracts-enforce/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/function-pointer-contracts-enforce/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --malloc-may-fail --malloc-fail-null --restrict-function-pointer foo.CALL/arr_fun_contract --dfcc main --enforce-contract foo
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/function-pointer-contracts-replace-2/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/function-pointer-contracts-replace-2/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract bar --replace-call-with-contract foo --replace-call-with-contract get_arr_fun
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/havoc-conditional-target/replace-foo.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/havoc-conditional-target/replace-foo.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 replace-foo.c
 --dfcc main --enforce-contract bar --replace-call-with-contract foo _ --pointer-check
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/invar_check_nested_loops/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/invar_check_nested_loops/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --apply-loop-contracts
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/invar_havoc_dynamic_array/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/invar_havoc_dynamic_array/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --apply-loop-contracts
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/invar_havoc_dynamic_array_const_idx/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/invar_havoc_dynamic_array_const_idx/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --apply-loop-contracts
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/invar_havoc_static_array/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/invar_havoc_static_array/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --apply-loop-contracts
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/invar_havoc_static_array_const_idx/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/invar_havoc_static_array_const_idx/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --apply-loop-contracts
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/invar_havoc_static_multi-dim_array_all_const_idx/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/invar_havoc_static_multi-dim_array_all_const_idx/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --apply-loop-contracts
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/invar_havoc_static_multi-dim_array_partial_const_idx/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/invar_havoc_static_multi-dim_array_partial_const_idx/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --apply-loop-contracts
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/is_fresh_indirect_calls/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/is_fresh_indirect_calls/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --dfcc main --replace-call-with-contract foo
 ^\[main.assertion.\d+\].*c is rw_ok: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/is_unique_01_replace/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/is_unique_01_replace/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --replace-call-with-contract foo
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/loop-freeness-check/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/loop-freeness-check/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract foo
 ^\[foo.assigns.\d+\].*Check that i is assignable: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/loop_assigns-slice-assignable-scalar/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/loop_assigns-slice-assignable-scalar/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --apply-loop-contracts
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/loop_assigns-slice-upto-fail/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/loop_assigns-slice-upto-fail/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --apply-loop-contracts
 ^\[main.loop_assigns.\d+\] line 21 Check assigns clause inclusion for loop .*: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/loop_assigns_scoped_local_statics/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/loop_assigns_scoped_local_statics/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --apply-loop-contracts
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/loop_assigns_target_base_idents/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/loop_assigns_target_base_idents/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --malloc-may-fail --malloc-fail-null --dfcc main --enforce-contract foo --apply-loop-contracts
 ^\[foo.assigns.\d+\] line .* Check that i is assignable: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/loop_contracts_binary_search/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/loop_contracts_binary_search/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --apply-loop-contracts _ --pointer-check --bounds-check --signed-overflow-check
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/memory-predicates-is-fresh-failure-modes/test-fail-assert-bounded.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/memory-predicates-is-fresh-failure-modes/test-fail-assert-bounded.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main_bounded.c
 --malloc-may-fail --malloc-fail-assert --dfcc main --enforce-contract foo _ --pointer-check --pointer-primitive-check --pointer-overflow-check
 ^\[__CPROVER_contracts_is_fresh.assertion.\d+\] line \d+ __CPROVER_is_fresh max allocation size exceeded: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/memory-predicates-is-fresh-failure-modes/test-fail-assert.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/memory-predicates-is-fresh-failure-modes/test-fail-assert.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --malloc-may-fail --malloc-fail-assert --dfcc main --enforce-contract foo _ --pointer-check --pointer-primitive-check --pointer-overflow-check
 ^\[__CPROVER_contracts_is_fresh.assertion.\d+\] line \d+ __CPROVER_is_fresh max allocation size exceeded: FAILURE$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/memory-predicates-is-fresh-failure-modes/test-fail-none-bounded.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/memory-predicates-is-fresh-failure-modes/test-fail-none-bounded.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main_bounded.c
 --dfcc main --enforce-contract foo _ --pointer-check --pointer-primitive-check --pointer-overflow-check
 ^\[__CPROVER_contracts_car_set_insert.assertion.\d+\] line \d+ CAR size is less than __CPROVER_max_malloc_size: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/memory-predicates-is-fresh-failure-modes/test-fail-null-bounded.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/memory-predicates-is-fresh-failure-modes/test-fail-null-bounded.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main_bounded.c
 --malloc-may-fail --malloc-fail-null --dfcc main --enforce-contract foo _ --pointer-check --pointer-primitive-check --pointer-overflow-check
 ^\[__CPROVER_contracts_car_set_insert.assertion.\d+\] line \d+ CAR size is less than __CPROVER_max_malloc_size: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/memory-predicates-is-fresh-failure-modes/test-fail-null.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/memory-predicates-is-fresh-failure-modes/test-fail-null.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --malloc-may-fail --malloc-fail-null --dfcc main --enforce-contract foo _ --pointer-check --pointer-primitive-check --pointer-overflow-check
 ^\[__CPROVER_contracts_car_set_insert.assertion.\d+\] line \d+ CAR size is less than __CPROVER_max_malloc_size: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/memory-predicates-user-defined-ensures-enforce/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/memory-predicates-user-defined-ensures-enforce/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract foo _ --pointer-check --pointer-primitive-check
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/memory-predicates-user-defined-ensures-replace/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/memory-predicates-user-defined-ensures-replace/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract bar --replace-call-with-contract foo _ --pointer-check --pointer-primitive-check
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/memory-predicates-user-defined-requires-replace/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/memory-predicates-user-defined-requires-replace/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract foo --replace-call-with-contract bar --replace-call-with-contract baz _ --pointer-check
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/named-contracts/test-contract-after-declaration.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/named-contracts/test-contract-after-declaration.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main-contract-after-declaration.c
 --dfcc main --replace-call-with-contract foo
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/named-contracts/test-contract-after-definition.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/named-contracts/test-contract-after-definition.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main-contract-after-definition.c
 --dfcc main --replace-call-with-contract foo
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/named-contracts/test-definition-after-contract.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/named-contracts/test-definition-after-contract.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main-definition-after-contract.c
 --dfcc main --replace-call-with-contract foo
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/named-contracts/test-no-definition.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/named-contracts/test-no-definition.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main-no-definition.c
 --dfcc main --replace-call-with-contract foo
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/quantifiers-forall-ensures-enforce/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/quantifiers-forall-ensures-enforce/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract f1
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/quantifiers-loop-01/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/quantifiers-loop-01/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --apply-loop-contracts
 ^\[main.loop_assigns.\d+\] line 10 Check assigns clause inclusion for loop .*: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/quantifiers-loop-03/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/quantifiers-loop-03/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --apply-loop-contracts
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/ternary-lhs-loop-contract/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/ternary-lhs-loop-contract/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract foo --apply-loop-contracts
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/test_aliasing_ensure/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/test_aliasing_ensure/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract foo
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/test_aliasing_ensure_indirect/test-bar.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/test_aliasing_ensure_indirect/test-bar.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main_bar.c
 --dfcc main --enforce-contract bar
 ^\[bar.postcondition.\d+\].*Check ensures clause of contract contract::bar for function bar: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/test_aliasing_ensure_indirect/test-foo.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/test_aliasing_ensure_indirect/test-foo.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main_foo.c
 --dfcc main --enforce-contract foo --replace-call-with-contract bar
 ^\[foo.postcondition.\d+\].*Check ensures clause of contract contract::foo for function foo: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/test_array_memory_enforce/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/test_array_memory_enforce/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract foo
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/test_array_memory_replace/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/test_array_memory_replace/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --replace-call-with-contract foo
 ^VERIFICATION SUCCESSFUL$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/test_is_fresh_enforce_ensures_pass/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/test_is_fresh_enforce_ensures_pass/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract foo
 ^\[foo.postcondition.\d+\].*Check ensures clause of contract contract::foo for function foo: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/test_is_fresh_replace_ensures_pass/test-enforce.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/test_is_fresh_replace_ensures_pass/test-enforce.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract foo
 ^\[foo.assigns.\d+\].*Check that \*out_ptr1 is assignable: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/test_is_fresh_replace_requires_pass/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/test_is_fresh_replace_requires_pass/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --replace-call-with-contract foo
 ^\[foo.precondition.\d+\].*Check requires clause of contract contract::foo for function foo: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/test_possibly_aliased_arguments/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/test_possibly_aliased_arguments/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --dfcc main --replace-call-with-contract sub_ptr_values
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/test_scalar_memory_enforce/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/test_scalar_memory_enforce/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract foo
 \[foo.postcondition.\d+\].*Check ensures clause( of contract contract::foo for function foo)?: SUCCESS
--- cbmc-5.84.0.orig/regression/contracts-dfcc/test_scalar_memory_replace/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/test_scalar_memory_replace/test.desc
@@ -1,4 +1,4 @@
-CORE dfcc-only
+KNOWNBUG
 main.c
 --dfcc main --replace-call-with-contract foo
 ^VERIFICATION SUCCESSFUL$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/test_struct_member_enforce/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/test_struct_member_enforce/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --dfcc main --enforce-contract foo
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts-dfcc/test_struct_replace/test.desc
+++ cbmc-5.84.0/regression/contracts-dfcc/test_struct_replace/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --dfcc main --replace-call-with-contract foo
 ^EXIT=0$
--- /dev/null
+++ cbmc-5.84.0/regression/contracts-dfcc/tests-non-dfcc.log
@@ -0,0 +1,8346 @@
+Test 'assigns-enforce-malloc-zero'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --malloc-may-fail --malloc-fail-null --dfcc main --enforce-contract foo
+  Results:
+    ^\[foo.assigns.\d+\] line \d+ Check that a\[\(signed long (long )?int\)i\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line \d+ Check that \*out is assignable: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    This test checks that assuming is_fresh(ptr, size) with a non-deterministic size
+    checks that size < __CPROVER_max_malloc_size and then assumes it.
+    This guarantees that the address `ptr + size` can always be computed and
+    represented without offset bits overflowing into the object bits in the pointer
+    model used by CBMC.
+Execution [SKIPPED]
+Test 'assigns-frees-clauses-check-side-effects'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo --malloc-may-fail --malloc-fail-null
+  Results:
+    ^\[foo_assigns.assigns.\d+\] line \d+ Check that ptr\[\(.* int\)0\] is assignable: FAILURE$
+    ^\[foo_frees.assigns.\d+\] line \d+ Check that ptr\[\(.* int\)0\] is assignable: FAILURE$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that side effects in functions called from the assigns clause
+    or the frees clause are detected and make the analysis fail.
+Execution [SKIPPED]
+Test 'assigns-local-composite'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks that assigns clause checking explicitly checks assignments to locally
+    declared symbols with composite types, when they are dirty.
+    Out of bounds accesses to locally declared arrays, structs, etc.
+    will be detected by assigns clause checking.
+Execution [SKIPPED]
+Test 'assigns-replace-ignored-return-value'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract bar --replace-call-with-contract baz --enforce-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^\[.*assigns.*\].*ignored_return_value.*FAILURE
+    --
+    This test checks that when replacing a call by a contract for a call that
+    ignores the return value of the function, the temporary introduced to 
+    receive the call result does not trigger errors with assigns clause Checking
+    in the function under verification.
+Execution [SKIPPED]
+Test 'assigns-replace-malloc-zero'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo --malloc-may-fail --malloc-fail-null
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    \[bar\.assertion\.\d+\] line \d+ expecting SUCCESS: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    This test checks that objects of size zero or of __CPROVER_max_malloc_size
+    do not cause spurious falsifications in assigns clause instrumentation
+    in contract replacement mode.
+Execution [SKIPPED]
+Test 'assigns-slice-targets'
+  Level: KNOWNBUG
+  Input: main-enforce.c
+  Descriptor: test-enforce.desc
+  Output: test-enforce-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^\[foo.assigns.\d+\].* Check that s->arr1\[\(.*\)0\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\].* Check that s->arr1\[\(.*\)1\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\].* Check that s->arr1\[\(.*\)2\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\].* Check that s->arr1\[\(.*\)3\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\].* Check that s->arr1\[\(.*\)4\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\].* Check that s->arr1\[\(.*\)5\] is assignable: FAILURE$
+    ^\[foo.assigns.\d+\].* Check that s->arr1\[\(.*\)6\] is assignable: FAILURE$
+    ^\[foo.assigns.\d+\].* Check that s->arr1\[\(.*\)7\] is assignable: FAILURE$
+    ^\[foo.assigns.\d+\].* Check that s->arr1\[\(.*\)8\] is assignable: FAILURE$
+    ^\[foo.assigns.\d+\].* Check that s->arr1\[\(.*\)9\] is assignable: FAILURE$
+    ^\[foo.assigns.\d+\].* Check that s->arr2\[\(.*\)0\] is assignable: FAILURE$
+    ^\[foo.assigns.\d+\].* Check that s->arr2\[\(.*\)1\] is assignable: FAILURE$
+    ^\[foo.assigns.\d+\].* Check that s->arr2\[\(.*\)2\] is assignable: FAILURE$
+    ^\[foo.assigns.\d+\].* Check that s->arr2\[\(.*\)3\] is assignable: FAILURE$
+    ^\[foo.assigns.\d+\].* Check that s->arr2\[\(.*\)4\] is assignable: FAILURE$
+    ^\[foo.assigns.\d+\].* Check that s->arr2\[\(.*\)5\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\].* Check that s->arr2\[\(.*\)6\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\].* Check that s->arr2\[\(.*\)7\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\].* Check that s->arr2\[\(.*\)8\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\].* Check that s->arr2\[\(.*\)9\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\].* Check that ss->a is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\].* Check that ss->arr1\[\(.*\)0\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\].* Check that ss->arr1\[\(.*\)7\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\].* Check that ss->arr1\[\(.*\)9\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\].* Check that ss->b is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\].* Check that ss->arr2\[\(.*\)6\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\].* Check that ss->arr2\[\(.*\)8\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\].* Check that ss->c is assignable: SUCCESS$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that assigns clause checking of slice expressions works as expected when 
+    enforcing a contract.
+Execution [SKIPPED]
+Test 'assigns-slice-targets'
+  Level: KNOWNBUG
+  Input: main-replace.c
+  Descriptor: test-replace.desc
+  Output: test-replace-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^\[main.assertion.\d+\].*assertion s.a == 0: SUCCESS$
+    ^\[main.assertion.\d+\].*assertion \(.*\)s.arr1\[\(.*\)0\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)s.arr1\[\(.*\)1\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)s.arr1\[\(.*\)2\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)s.arr1\[\(.*\)3\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)s.arr1\[\(.*\)4\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)s.arr1\[\(.*\)5\] == 0: SUCCESS$
+    ^\[main.assertion.\d+\].*assertion \(.*\)s.arr1\[\(.*\)6\] == 0: SUCCESS$
+    ^\[main.assertion.\d+\].*assertion \(.*\)s.arr1\[\(.*\)7\] == 0: SUCCESS$
+    ^\[main.assertion.\d+\].*assertion \(.*\)s.arr1\[\(.*\)8\] == 0: SUCCESS$
+    ^\[main.assertion.\d+\].*assertion \(.*\)s.arr1\[\(.*\)9\] == 0: SUCCESS$
+    ^\[main.assertion.\d+\].*assertion s.b == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)s.arr2\[\(.*\)0\] == 0: SUCCESS$
+    ^\[main.assertion.\d+\].*assertion \(.*\)s.arr2\[\(.*\)1\] == 0: SUCCESS$
+    ^\[main.assertion.\d+\].*assertion \(.*\)s.arr2\[\(.*\)2\] == 0: SUCCESS$
+    ^\[main.assertion.\d+\].*assertion \(.*\)s.arr2\[\(.*\)3\] == 0: SUCCESS$
+    ^\[main.assertion.\d+\].*assertion \(.*\)s.arr2\[\(.*\)4\] == 0: SUCCESS$
+    ^\[main.assertion.\d+\].*assertion \(.*\)s.arr2\[\(.*\)5\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)s.arr2\[\(.*\)6\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)s.arr2\[\(.*\)7\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)s.arr2\[\(.*\)8\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)s.arr2\[\(.*\)9\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion s.c == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion ss.a == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)ss.arr1\[\(.*\)0\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)ss.arr1\[\(.*\)1\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)ss.arr1\[\(.*\)2\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)ss.arr1\[\(.*\)3\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)ss.arr1\[\(.*\)4\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)ss.arr1\[\(.*\)5\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)ss.arr1\[\(.*\)6\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)ss.arr1\[\(.*\)7\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)ss.arr1\[\(.*\)8\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)ss.arr1\[\(.*\)9\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion ss.b == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)ss.arr2\[\(.*\)0\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)ss.arr2\[\(.*\)1\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)ss.arr2\[\(.*\)2\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)ss.arr2\[\(.*\)3\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)ss.arr2\[\(.*\)4\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)ss.arr2\[\(.*\)5\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)ss.arr2\[\(.*\)6\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)ss.arr2\[\(.*\)7\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)ss.arr2\[\(.*\)8\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion \(.*\)ss.arr2\[\(.*\)9\] == 0: FAILURE$
+    ^\[main.assertion.\d+\].*assertion ss.c == 0: FAILURE$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that havocking of slice expressions works as expected when 
+    replacing a call by a contract. We manually express frame conditions as 
+    assertions in the main function.
+Execution [SKIPPED]
+Test 'assigns_enforce_01'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that verification succeeds if only expressions inside the assigns clause are assigned within the function.
+    
+    Note: For all 'enforce' tests, nothing can be assumed about the return value of the function (as the function call is not replaced at this point).
+    
+    To make such assumptions would cause verification to fail.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+
+Test 'assigns_enforce_02'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^\[foo.assigns.\d+\] line 6 Check that \*x is assignable: FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test checks that verification fails if an expression outside the assigns clause is assigned within the function.
+Execution [SKIPPED]
+Test 'assigns_enforce_03'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^\[f3.assigns.\d+\] line 14 Check that \*x3 is assignable: SUCCESS$
+    ^\[f3.assigns.\d+\] line 15 Check that \*y3 is assignable: SUCCESS$
+    ^\[f3.assigns.\d+\] line 16 Check that \*z3 is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that verification succeeds when assigns clauses are respected
+    through multiple function calls.
+Execution [SKIPPED]
+Test 'assigns_enforce_04'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^\[f3.assigns.\d+\] line 13 Check that \*x3 is assignable: SUCCESS$
+    ^\[f3.assigns.\d+\] line 14 Check that \*y3 is assignable: SUCCESS$
+    ^\[f3.assigns.\d+\] line 15 Check that \*z3 is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that verification only considers assigns clause from enforced function.
+Execution [SKIPPED]
+Test 'assigns_enforce_05'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that verification succeeds when enforcing a contract
+    for functions, without assigns clauses, that don't modify anything.
+Execution [SKIPPED]
+Test 'assigns_enforce_06'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that verification succeeds when functions
+    are called from within a loop.
+Execution [SKIPPED]
+Test 'assigns_enforce_07'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test checks that verification fails when functions with assigns clauses are called within a loop and one of them does not obey its assigns clause.
+Execution [SKIPPED]
+Test 'assigns_enforce_08'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that verification succeeds when a function with an assigns
+    clause calls another with an additional level of indirection, and that
+    functions respects the assigns clause of the caller.
+Execution [SKIPPED]
+Test 'assigns_enforce_09'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test checks that verification fails when a function with an assigns clause calls another with an assigns clause that adds one too many dereferences.
+Execution [SKIPPED]
+Test 'assigns_enforce_10'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test checks that verification fails when a function with an assigns clause calls another function with an assigns clause that is incompatible with the caller's assigns clause.
+Execution [SKIPPED]
+Test 'assigns_enforce_11'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test checks that verification fails when a function with an assigns clause calls another function with a compatible assigns clause, but the callee does not abide by the shared assigns clause.
+Execution [SKIPPED]
+Test 'assigns_enforce_12'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that verification still succeeds if an expression in the assigns clause is written via an aliasing variable.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract f1 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+
+Test 'assigns_enforce_13'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test checks that verification fails if an expression outside of the assigns clause is written via an aliasing local variable.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract f1 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 10
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=10$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION FAILED$ [OK]
+
+Test 'assigns_enforce_14'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that verification succeeds if only expressions inside the assigns clause are assigned within the function.
+    
+    Note: For all 'enforce' tests, nothing can be assumed about the return value of the function (as the function call is not replaced at this point).
+    
+    To make such assumptions would cause verification to fail.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+
+Test 'assigns_enforce_15'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-baz.desc
+  Output: test-baz-non-dfcc.out
+  Options: --dfcc main --enforce-contract baz
+  Results:
+    ^\[baz.assigns.\d+\] line \d+ Check that global is assignable: FAILURE$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    Checks whether verification fails when enforcing a contract
+    for functions, without assigns clauses, that modify an input.
+Execution [SKIPPED]
+Test 'assigns_enforce_15'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test-foo.desc
+  Output: test-foo-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    Checks whether verification fails when enforcing a contract
+    for functions, without assigns clauses, that modify an input.
+Execution [SKIPPED]
+Test 'assigns_enforce_15'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-qux.desc
+  Output: test-qux-non-dfcc.out
+  Options: --dfcc main --enforce-contract qux
+  Results:
+    ^\[qux.assigns.\d+\] line \d+ Check that global is assignable: FAILURE$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    Checks whether verification fails when enforcing a contract
+    for functions, without assigns clauses, that modify an input.
+Execution [SKIPPED]
+Test 'assigns_enforce_16'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo _ --pointer-primitive-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks whether verification fails when enforcing a contract
+    for functions, without assigns clauses, that modify an input.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo _ --pointer-primitive-check 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+
+Test 'assigns_enforce_17'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract pure
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[main.assertion.\d+\] line \d+ assertion x \=\= 0: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks whether verification correctly distinguishes local variables
+    and global variables with same name when checking frame conditions.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract pure 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^\[main.assertion.\d+\] line \d+ assertion x \=\= 0: SUCCESS$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+
+Test 'assigns_enforce_18'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test-bar.desc
+  Output: test-bar-non-dfcc.out
+  Options: --dfcc main --enforce-contract bar _ --pointer-primitive-check
+  Results:
+    ^\[bar.assigns.\d+\] line 20 Check that \*b is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    Checks whether contract enforcement works with functions that deallocate memory.
+    We had problems before when freeing a variable, but still keeping it on
+    the writable set, which lead to deallocated variables issues.
+    Now, if a memory is deallocated, we remove it from the our freely assignable set.
+Execution [SKIPPED]
+Test 'assigns_enforce_18'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-baz.desc
+  Output: test-baz-non-dfcc.out
+  Options: --dfcc main --enforce-contract baz _ --pointer-primitive-check
+  Results:
+    ^\[free.frees.\d+\].*Check that ptr is freeable: FAILURE
+    ^\[baz.assigns.\d+\].*Check that \*a is assignable: SUCCESS$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    Checks whether contract enforcement works with functions that deallocate memory.
+    We had problems before when freeing a variable, but still keeping it on
+    the writable set, which lead to deallocated variables issues.
+    Now, if a memory is deallocated, we remove it from the our freely assignable set.
+Execution [SKIPPED]
+Test 'assigns_enforce_18'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-foo.desc
+  Output: test-foo-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo _ --pointer-primitive-check
+  Results:
+    ^\[foo.assigns.\d+\] line 13 Check that \*xp is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line 14 Check that y is assignable: FAILURE$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    Checks whether contract enforcement works with functions that deallocate memory.
+    We had problems before when freeing a variable, but still keeping it on
+    the writable set, which lead to deallocated variables issues.
+    Now, if a memory is deallocated, we remove it from the our freely assignable set.
+Execution [SKIPPED]
+Test 'assigns_enforce_19_a'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f
+  Results:
+    ^\[f.assigns.\d+\] .* Check that a is assignable: SUCCESS$
+    ^\[f.postcondition.\d+\] .* Check ensures clause of contract contract::f for function f: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that locally declared static variables are automatically
+    added to the write set of a function, and illustrates how the local static `a`
+    defined in `f` can be referred to in contract clauses using
+    __CPROVER_ID "f::1::a" to express state invariants and state transitions.
+Execution [SKIPPED]
+Test 'assigns_enforce_19_b'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f
+  Results:
+    ^\[f.assigns.\d+\] line \d+ Check that b is assignable: SUCCESS$
+    ^\[f.assigns.\d+\] line \d+ Check that \*points_to_b is assignable: SUCCESS$
+    ^\[f.assigns.\d+\] line \d+ Check that c is assignable: FAILURE$
+    ^\[f.assigns.\d+\] line \d+ Check that \*points_to_c is assignable: FAILURE$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that:
+    - assignments to global static b declared in the assigns clause are
+    *not* detected as errors, when directly assigned or assigned through pointers.
+    - assignments to global static c *not* declared in the assigns clause are
+    detected as errors, when directly assigned or assigned through pointers.
+Execution [SKIPPED]
+Test 'assigns_enforce_20'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[foo.assigns.\d+\] line \d+ Check that x is assignable: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Checks whether contract enforcement works with __CPROVER_havoc_object.
+Execution [SKIPPED]
+Test 'assigns_enforce_21'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo --replace-call-with-contract quz
+  Results:
+    ^\[bar.assigns.\d+\].*Check that \*y is assignable: SUCCESS$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    Checks whether checks write set for sub-function calls.
+Execution [SKIPPED]
+Test 'assigns_enforce_23'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that __CPROVER_object_whole can be used both on arrays and scalars.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+
+Test 'assigns_enforce_address_of'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    ^.*error: assigns clause target must be a non-void lvalue or a call to a function returning void$
+    ^CONVERSION ERROR$
+    --
+    --
+    Check that address_of expressions are rejected in assigns clauses.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+^.*error: assigns clause target must be a non-void lvalue or a call to a function returning void$ [OK]
+^CONVERSION ERROR$ [OK]
+
+Test 'assigns_enforce_arrays_01'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks their assigns clause behavior when it reasons (indirectly)
+    over a freshly-allocated variable.
+Execution [SKIPPED]
+Test 'assigns_enforce_arrays_02'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-f1.desc
+  Output: test-f1-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^\[f1.assigns.\d+\] line 8 Check that a\[.*0\] is assignable: SUCCESS$
+    ^\[f1.assigns.\d+\] line 9 Check that a\[.*5\] is assignable: FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test ensures that assigns clauses correctly check for global variables,
+    and access using *ptr vs POINTER_OBJECT(ptr).
+Execution [SKIPPED]
+Test 'assigns_enforce_arrays_02'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test-f2.desc
+  Output: test-f2-non-dfcc.out
+  Options: --dfcc main --enforce-contract f2
+  Results:
+    ^\[f2.assigns.\d+\] line \d+ Check that a\[.*0\] is assignable: SUCCESS$
+    ^\[f2.assigns.\d+\] line \d+ Check that a\[.*5\] is assignable: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test ensures that assigns clauses correctly check for global variables,
+    and access using *ptr vs POINTER_OBJECT(ptr).
+Execution [SKIPPED]
+Test 'assigns_enforce_arrays_03'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract assign_out_under
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Checks whether verification fails when a function has an array 
+    as parameter, an empty assigns clause and attempts to modify the object
+    pointed to by the pointer.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract assign_out_under 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 10
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=10$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION FAILED$ [OK]
+
+Test 'assigns_enforce_arrays_04'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract uses_assigns
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks whether verification succeeds when an array is assigned through
+    calls to functions with array assigns clauses which are compatible with
+    that of the caller.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract uses_assigns 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+
+Test 'assigns_enforce_arrays_05'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract uses_assigns
+  Results:
+    ^\[assigns_ptr.assigns.\d+\] line \d+ Check that \*x is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    Checks whether verification succeeds for array elements at a symbolic index. 
+Execution [SKIPPED]
+Test 'assigns_enforce_arrays_10'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test also ensures that assigns clauses correctly check for global
+    variables modified by subcalls. In this case, since the assigns clause
+    doesn't include the modified global variable, the verification should failed.
+Execution [SKIPPED]
+Test 'assigns_enforce_conditional_function_call_condition'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^main.c function foo$
+    ^\[foo.assigns.\d+\] line 16 Check that \*x is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line 20 Check that \*x is assignable: FAILURE$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that function calls are allowed in conditions.
+    Remark: we allow function calls without further checks for now because they
+    are mandatory for some applications.
+    The next step must be to check that the called functions have a contract
+    with an empty assigns clause and that they indeed satisfy their contract
+    using a CI check.
+Execution [SKIPPED]
+Test 'assigns_enforce_conditional_lvalue'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    main.c function foo
+    ^\[foo.assigns.\d+\] line 7 Check that \*x is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line 8 Check that \*y is assignable: FAILURE$
+    ^\[foo.assigns.\d+\] line 12 Check that \*x is assignable: FAILURE$
+    ^\[foo.assigns.\d+\] line 13 Check that \*y is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line 16 Check that \*x is assignable: FAILURE$
+    ^\[foo.assigns.\d+\] line 17 Check that \*y is assignable: FAILURE$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    Check that lvalue conditional assigns clause targets
+    match with control flow path conditions.
+Execution [SKIPPED]
+Test 'assigns_enforce_conditional_lvalue_list'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    main.c function foo
+    ^\[foo.assigns.\d+\] line 7 Check that \*x is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line 8 Check that \*y is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line 12 Check that \*x is assignable: FAILURE$
+    ^\[foo.assigns.\d+\] line 13 Check that \*y is assignable: FAILURE$
+    ^\[foo.assigns.\d+\] line 16 Check that \*x is assignable: FAILURE$
+    ^\[foo.assigns.\d+\] line 17 Check that \*y is assignable: FAILURE$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    Check that conditional assigns clause  `c ? {lvalue, ..}`
+    match with control flow path conditions.
+Execution [SKIPPED]
+Test 'assigns_enforce_conditional_non_lvalue_target'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --enforce-contract foo
+  Results:
+    ^.*error: assigns clause target must be a non-void lvalue or a call to a function returning void$
+    ^CONVERSION ERROR
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that non-lvalue targets are rejected from conditional targets.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^.*error: assigns clause target must be a non-void lvalue or a call to a function returning void$ [OK]
+^CONVERSION ERROR [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'assigns_enforce_conditional_non_lvalue_target_list'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --enforce-contract foo
+  Results:
+    ^.*error: assigns clause target must be a non-void lvalue or a call to a function returning void$
+    ^CONVERSION ERROR
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that non-lvalue targets are rejected from conditional targets.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^.*error: assigns clause target must be a non-void lvalue or a call to a function returning void$ [OK]
+^CONVERSION ERROR [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'assigns_enforce_conditional_pointer_object'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    main.c function foo
+    ^\[foo.assigns.\d+\] line 13 Check that x\[\(signed (long )?long int\)0\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line 14 Check that y\[\(signed (long )?long int\)0\] is assignable: FAILURE$
+    ^\[foo.assigns.\d+\] line 18 Check that x\[\(signed (long )?long int\)0\] is assignable: FAILURE$
+    ^\[foo.assigns.\d+\] line 19 Check that y\[\(signed (long )?long int\)0\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line 22 Check that x\[\(signed (long )?long int\)0\] is assignable: FAILURE$
+    ^\[foo.assigns.\d+\] line 23 Check that y\[\(signed (long )?long int\)0\] is assignable: FAILURE$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    Check that conditional assigns clause  `c ? __CPROVER_object_whole((p)`
+    match with control flow path conditions.
+Execution [SKIPPED]
+Test 'assigns_enforce_conditional_pointer_object_list'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    main.c function foo
+    ^\[foo.assigns.\d+\] line 12 Check that x\[\(signed (long )?long int\)0\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line 13 Check that y\[\(signed (long )?long int\)0\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line 17 Check that x\[\(signed (long )?long int\)0\] is assignable: FAILURE$
+    ^\[foo.assigns.\d+\] line 18 Check that y\[\(signed (long )?long int\)0\] is assignable: FAILURE$
+    ^\[foo.assigns.\d+\] line 21 Check that x\[\(signed (long )?long int\)0\] is assignable: FAILURE$
+    ^\[foo.assigns.\d+\] line 22 Check that y\[\(signed (long )?long int\)0\] is assignable: FAILURE$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    Check that conditional target groups match with control flow path conditions.
+Execution [SKIPPED]
+Test 'assigns_enforce_conditional_side_effect_condition'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^.* error: side-effects not allowed in assigns clause conditions$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that side-effect expressions in target conditions cause hard errors.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^.* error: side-effects not allowed in assigns clause conditions$ [OK]
+^CONVERSION ERROR$ [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'assigns_enforce_conditional_side_effect_target'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^.* error: side-effects not allowed in assigns clause targets$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that side-effect expressions are rejected from conditional targets.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^.* error: side-effects not allowed in assigns clause targets$ [OK]
+^CONVERSION ERROR$ [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'assigns_enforce_conditional_side_effect_target_list'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^.* error: side-effects not allowed in assigns clause targets$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that side-effect expressions are rejected from conditional targets.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^.* error: side-effects not allowed in assigns clause targets$ [OK]
+^CONVERSION ERROR$ [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'assigns_enforce_conditional_ternary_target'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^.* error: ternary expressions not allowed in assigns clause targets$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that ternary expressions are rejected from conditional targets.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^.* error: ternary expressions not allowed in assigns clause targets$ [OK]
+^CONVERSION ERROR$ [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'assigns_enforce_conditional_ternary_target_list'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^.* error: ternary expressions not allowed in assigns clause targets$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that ternary expressions are rejected from conditional targets.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^.* error: ternary expressions not allowed in assigns clause targets$ [OK]
+^CONVERSION ERROR$ [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'assigns_enforce_conditional_unions'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract update _ --pointer-check --pointer-overflow-check --signed-overflow-check --unsigned-overflow-check --conversion-check
+  Results:
+    ^\[is_high_level.assigns.\d+\] line 52 Check that latch is assignable: SUCCESS$
+    ^\[is_high_level.assigns.\d+\] line 53 Check that once is assignable: SUCCESS$
+    ^\[update.assigns.\d+\] line 87 Check that state->digest.high_level.first.ctx->flags is assignable: SUCCESS$
+    ^\[update.assigns.\d+\] line 93 Check that state->digest.high_level.second.ctx->flags is assignable: SUCCESS$
+    ^\[update.assigns.\d+\] line 98 Check that state->digest.high_level.second.ctx->flags is assignable: FAILURE$
+    ^\[update.assigns.\d+\] line 103 Check that state->digest.high_level.first.ctx->flags is assignable: FAILURE$
+    ^\[update.assigns.\d+\] line 107 Check that state->digest.high_level.second.ctx->flags is assignable: FAILURE$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    Tests that conditional assignments to whole objects and lvalues are supported,
+    when conditions determine how to interpret a union type.
+Execution [SKIPPED]
+Test 'assigns_enforce_conditional_void_target'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^.* error: (dereferencing void pointer|lvalue expressions with void type not allowed in assigns clauses)$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that void-typed expressions are rejected from conditional targets.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^.* error: (dereferencing void pointer|lvalue expressions with void type not allowed in assigns clauses)$ [OK]
+^CONVERSION ERROR$ [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'assigns_enforce_conditional_void_target_list'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^.* error: (dereferencing void pointer|lvalue expressions with void type not allowed in assigns clauses)$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that void-typed expressions are rejected from conditional targets.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^.* error: (dereferencing void pointer|lvalue expressions with void type not allowed in assigns clauses)$ [OK]
+^CONVERSION ERROR$ [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'assigns_enforce_detect_local_statics'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract bar
+  Results:
+    ^\[foo.assigns.\d+\] line 17 Check that \*y is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line 20 Check that \*yy is assignable: FAILURE$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    Checks whether static local and global variables are correctly tracked
+    in assigns clause verification, accross subfunction calls.
+Execution [SKIPPED]
+Test 'assigns_enforce_detect_replaced_local_statics'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract bar --replace-call-with-contract baz --enforce-contract foo _ --pointer-check
+  Results:
+    ^\[main.assertion.\d+\] line \d+ expecting FAILURE: FAILURE$
+    ^\[main.assertion.\d+\] line \d+ expecting FAILURE: FAILURE$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that locally declared static variables are correctly detected 
+    and tracked when function contract replacement is used.
+    Here, baz declares a local static variable, 
+    bar calls baz, and we replace the call to baz in bar.
+    bar also declares a local static array variable.
+    the call to bar is replaced by its contract in foo.
+    We see that in foo, two assignments to these local statics are checked,
+    showing that the replacement of bar in foo is modeled as nondet assignments.
+    We also see that these assignments are succesfully checked against the empty
+    assigns clause of foo, which shows that they are automatically propagated to 
+    the assigns clause of foo as expected.
+Execution [SKIPPED]
+Test 'assigns_enforce_free_dead'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --malloc-may-fail --malloc-fail-null --dfcc main --enforce-contract foo _ --pointer-primitive-check
+  Results:
+    ^\[foo.assigns.\d+\] line 6 Check that \*x is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line 9 Check that \*\(\*y\) is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line 21 Check that \*\(\*y\) is assignable: FAILURE$
+    ^\[foo.assigns.\d+\] line 33 Check that \*x is assignable: FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Checks that assignments to potentially freed or DEAD memory locations are
+    detected as errors.
+Execution [SKIPPED]
+Test 'assigns_enforce_function_calls'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    ^.*error: expecting void return type for function 'bar' called in assigns clause$
+    ^CONVERSION ERROR$
+    --
+    --
+    Check that non-void function call expressions are rejected in assigns clauses.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+^.*error: expecting void return type for function 'bar' called in assigns clause$ [OK]
+^CONVERSION ERROR$ [OK]
+
+Test 'assigns_enforce_function_calls_ignored'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --enforce-contract foo
+  Results:
+    ^call to function 'bar' in assigns clause not supported yet$
+    ^EXIT=(127|134)$
+    ^SIGNAL=0$
+    --
+    --
+    Check that void function call expressions in assigns clauses make
+    instrumentation fail.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 134
+  Signal: 0
+  Core: 0
+Execution [OK]
+^call to function 'bar' in assigns clause not supported yet$ [OK]
+^EXIT=(127|134)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'assigns_enforce_functions_in_contracts'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks whether verification succeeds when requires and ensures
+    contain functions.
+    
+    Note: We still don't check for function purity, i.e.,
+    functions in contracts must only work as predicates.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+
+Test 'assigns_enforce_havoc_object'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[bar.assigns.\d+\] line \d+ Check that havoc_object\(\(void \*\)a->u\.b->c\) is allowed by the assigns clause: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Checks that __CPROVER_havoc_object(x) is detected as a write to POINTER_OBJECT(x).
+Execution [SKIPPED]
+Test 'assigns_enforce_literal'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    ^.*error: assigns clause target must be a non-void lvalue or a call to a function returning void$
+    ^CONVERSION ERROR$
+    --
+    --
+    Check that literal constants are rejected from assigns clauses.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+^.*error: assigns clause target must be a non-void lvalue or a call to a function returning void$ [OK]
+^CONVERSION ERROR$ [OK]
+
+Test 'assigns_enforce_malloc_01'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[f\.assigns.\d+\] line \d+ Check that \*a is assignable: SUCCESS
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that verification succeeds when a formal parameter
+    with a pointer type is first updated to point to a locally malloc'd object
+    before being assigned to.
+Execution [SKIPPED]
+Test 'assigns_enforce_malloc_02'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f
+  Results:
+    main.c function f
+    ^\[f.assigns.\d+\] line 7 Check that ptr is assignable: SUCCESS$
+    ^\[f.assigns.\d+\] line 12 Check that \*ptr is assignable: SUCCESS$
+    ^\[f.assigns.\d+\] line 13 Check that n is assignable: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that objects locally malloc'd in loop are considered
+    assignable.
+Execution [SKIPPED]
+Test 'assigns_enforce_malloc_03'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^\[foo.assigns.\d+\].* Check that \*loc1 is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\].* Check that \*loc2 is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that multiple malloc'd objects are tracked by assigns clause checking.
+Execution [SKIPPED]
+Test 'assigns_enforce_multi_file_01'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test replicates the behavior of assigns_enforce_04, but separates
+    the function headers and contracts into a separate file header.h.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract f1 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+
+Test 'assigns_enforce_multi_file_02'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test replicates the behavior of assigns_enforce_structs_03, but separates
+    the structs, function headers, and contracts into a separate file header.h.
+Execution [SKIPPED]
+Test 'assigns_enforce_object_wrong_args'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract baz
+  Results:
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    ^.*error: wrong number of function arguments: expected 1, but got 0$
+    ^CONVERSION ERROR$
+    --
+    --
+    Check that incorrect uses of `__CPROVER_object_whole` in assigns clauses are detected.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract baz 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+^.*error: wrong number of function arguments: expected 1, but got 0$ [OK]
+^CONVERSION ERROR$ [OK]
+
+Test 'assigns_enforce_offsets_1'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Check that a write at *x fails when the assigns clause specifies *(x + 1) and
+    the actual underlying object is of size 1.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 10
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=10$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION FAILED$ [OK]
+
+Test 'assigns_enforce_offsets_2'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo _ --pointer-check
+  Results:
+    ^\[foo.assigns.*\d+\].* line 8 Check that x\[\(.*\)1\] is assignable: (SUCCESS|FAILURE)$
+    ^\[foo.assigns.*\d+\].* line 8 Check that x\[\(.*\)1\] is assignable: FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Check that a write at *x+1 fails when the assigns clause specifies a valid *x
+    and the actual underlying object is of size 1.
+    In this case the specified target is valid, the lhs of the assignment is invalid
+    so the inclusion check passes, but the pointer check must fail with an OOB.
+Execution [SKIPPED]
+Test 'assigns_enforce_offsets_3'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Check that a write at *x fails when the assigns clause specifies *(x + 1) and the actual underlying object is of size 1.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+
+Test 'assigns_enforce_offsets_4'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo _ --pointer-check
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Check that a write at *(x+10) fails when the assigns clause specifies *(x + 10)
+    and the actual underlying object is too small.
+    In that case the target inclusion succeeds because the LHS is in an invalid
+    state, but the target validity check must fail.
+Execution [SKIPPED]
+Test 'assigns_enforce_scoping_01'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[f1.assigns.\d+\] line \d+ Check that \*b is assignable: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test checks that variables which mask a formal parameter are logically distinct from the formal parameter itself. Specifically, we check that the masked variable may alias a parameter in the assigns clause, while the formal parameter does not, so verification fails, but not because of the masking variable.
+Execution [SKIPPED]
+Test 'assigns_enforce_scoping_02'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[f1.assigns.\d+\] line \d+ Check that \*b is assignable: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test checks that variables which mask a formal parameter are logically distinct from the formal parameter itself. In this test, we check that the masked variable may point to freshly-allocated memory, while the masked parameter may not be assigned, so verification fails, but not because of the masking variable.
+Execution [SKIPPED]
+Test 'assigns_enforce_side_effects_1'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    .*error: (dereferencing void pointer|lvalue expressions with void type not allowed in assigns clauses)
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    Check that expressions with void type, side effects and/or ternay operators are 
+    rejected from assigns clauses.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+.*error: (dereferencing void pointer|lvalue expressions with void type not allowed in assigns clauses) [OK]
+^CONVERSION ERROR$ [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'assigns_enforce_side_effects_2'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    ^.*error: assigns clause target must be a non-void lvalue or a call to a function returning void$
+    ^CONVERSION ERROR$
+    --
+    --
+    Check that expressions with side effects are rejected from assigns clauses.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+^.*error: assigns clause target must be a non-void lvalue or a call to a function returning void$ [OK]
+^CONVERSION ERROR$ [OK]
+
+Test 'assigns_enforce_side_effects_3'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    ^.*error: assigns clause target must be a non-void lvalue or a call to a function returning void$
+    ^CONVERSION ERROR$
+    --
+    --
+    Check that expressions with side effects are rejected from assigns clauses.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+^.*error: assigns clause target must be a non-void lvalue or a call to a function returning void$ [OK]
+^CONVERSION ERROR$ [OK]
+
+Test 'assigns_enforce_statics'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo _ --pointer-primitive-check
+  Results:
+    ^\[foo.assigns.\d+\] line \d+ Check that y is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line \d+ Check that foo\$\$1\$\$x is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line \d+ Check that \*y is assignable: FAILURE$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    Checks wether assigning a global static that's not declared
+    in the assigns clause through a pointer is detected as an error.
+Execution [SKIPPED]
+Test 'assigns_enforce_structs_01'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[f.assigns.\d+\] line \d+ Check that \*a is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^\[.*assigns.*\].*: FAILURE$
+    --
+    Checks whether verification succeeds when a pointer deref that is not
+    specified in the assigns clause is first pointed at a member of a
+    locally malloc'd struct before being assigned.
+Execution [SKIPPED]
+Test 'assigns_enforce_structs_02'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[f.assigns.\d+\] line \d+ Check that \*a is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^\[.*assigns.*\].*: FAILURE$
+    --
+    Checks whether verification succeeds when a pointer deref that is not
+    specified in the assigns clause is first pointed at a member of a locally
+    malloc'd struct before being assigned (with extra nesting).
+Execution [SKIPPED]
+Test 'assigns_enforce_structs_03'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks whether verification succeeds when a member of formal parameter
+    (with type of pointer to struct) outside of the assigns clause is assigned
+    after being pointed at the location of a member sub-struct of a freshly
+    allocated struct before being assigned. This is meant to show that all
+    contained members (and their contained members) of assignable structs
+    are valid to assign.
+Execution [SKIPPED]
+Test 'assigns_enforce_structs_04'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-f1.desc
+  Output: test-f1-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[f1.assigns.\d+\] line \d+ Check that p->y is assignable: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Checks whether CBMC properly evaluates write set of members
+    from the same object.
+Execution [SKIPPED]
+Test 'assigns_enforce_structs_04'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-f2.desc
+  Output: test-f2-non-dfcc.out
+  Options: --dfcc main --enforce-contract f2
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[f2.assigns.\d+\] line \d+ Check that p->x is assignable: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Checks whether CBMC properly evaluates write set of members
+    from the same object.
+Execution [SKIPPED]
+Test 'assigns_enforce_structs_04'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-f3.desc
+  Output: test-f3-non-dfcc.out
+  Options: --dfcc main --enforce-contract f3
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[f3.assigns.\d+\] line \d+ Check that p->y is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks whether CBMC properly evaluates write set of members
+    from the same object.
+Execution [SKIPPED]
+Test 'assigns_enforce_structs_04'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-f4.desc
+  Output: test-f4-non-dfcc.out
+  Options: --dfcc main --enforce-contract f4
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks whether CBMC properly evaluates write set of members
+    from the same object.
+Execution [SKIPPED]
+Test 'assigns_enforce_structs_05'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[f1.assigns.\d+\] line \d+ Check that p->y is assignable: FAILURE$
+    ^\[f1.assigns.\d+\] line \d+ Check that p->x\[\(.*\)0\] is assignable: SUCCESS$
+    ^\[f1.assigns.\d+\] line \d+ Check that p->x\[\(.*\)1\] is assignable: SUCCESS$
+    ^\[f1.assigns.\d+\] line \d+ Check that p->x\[\(.*\)2\] is assignable: SUCCESS$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Checks whether CBMC properly evaluates write set of members
+    from the same object. In this case, we have an assigns clause 
+    with a struct member `x[3]` and an assignment to the struct member `y`.
+    CBMC must considers only the region of `x[3]` is assignable.
+Execution [SKIPPED]
+Test 'assigns_enforce_structs_06'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test-f1.desc
+  Output: test-f1-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[f1.assigns.\d+\] line \d+ Check that p->buf\[\(.*\)0\] is assignable: SUCCESS$
+    ^\[f1.assigns.\d+\] line \d+ Check that p->buf\[\(.*\)1\] is assignable: SUCCESS$
+    ^\[f1.assigns.\d+\] line \d+ Check that p->buf\[\(.*\)2\] is assignable: SUCCESS$
+    ^\[f1.assigns.\d+\] line \d+ Check that p->size is assignable: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Checks whether CBMC properly evaluates write set of members
+    from the same object. In this case, we have a dynamic object
+    as one of the struct members.
+Execution [SKIPPED]
+Test 'assigns_enforce_structs_06'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test-f2.desc
+  Output: test-f2-non-dfcc.out
+  Options: --dfcc main --enforce-contract f2
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[f2.assigns.\d+\] line \d+ Check that p->buf\[\(.*\)0\] is assignable: FAILURE$
+    ^\[f2.assigns.\d+\] line \d+ Check that p->size is assignable: SUCCESS$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Checks whether CBMC properly evaluates write set of members
+    from the same object. In this case, we have a dynamic object
+    as one of the struct members.
+Execution [SKIPPED]
+Test 'assigns_enforce_structs_06'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-f3.desc
+  Output: test-f3-non-dfcc.out
+  Options: --dfcc main --enforce-contract f3
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[f3.assigns.\d+\] line \d+ Check that p->buf is assignable: SUCCESS$
+    ^\[f3.assigns.\d+\] line \d+ Check that p->size is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks whether CBMC properly evaluates write set of members
+    from the same object. In this case, we have a dynamic object
+    as one of the struct members.
+Execution [SKIPPED]
+Test 'assigns_enforce_structs_07'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test-f1.desc
+  Output: test-f1-non-dfcc.out
+  Options: --malloc-may-fail --malloc-fail-null --dfcc main --enforce-contract f1 _ --pointer-check
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[f1.assigns.\d+\].*line 18 Check that p->buf\[\(.*\)0\] is assignable: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    --
+    In f1, the assigns clause specifies `*(p->buf)` as target (which can be invalid)
+    and assigns `p->buf[0]` unconditionally. When both target and lhs are invalid,
+    its inclusion check can be trivially satisfied (or not) but we expect the target
+    validity check to fail.
+    
+    In f2 tests this behaviour with chained dereferences.
+Execution [SKIPPED]
+Test 'assigns_enforce_structs_07'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test-f2.desc
+  Output: test-f2-non-dfcc.out
+  Options: --malloc-may-fail --malloc-fail-null --dfcc main --enforce-contract f2 _ --pointer-check
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[f2.assigns.\d+\].*line 23 Check that pp->p->buf\[\(.*\)0\] is assignable: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    --
+    In f1, the assigns clause specifies `*(p->buf)` as target (which can be invalid)
+    and assigns `p->buf[0]` unconditionally. When both target and lhs are invalid,
+    its inclusion check can be trivially satisfied (or not) but we expect the target
+    validity check to fail.
+    
+    In f2 tests this behaviour with chained dereferences.
+Execution [SKIPPED]
+Test 'assigns_enforce_structs_08'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test-f1.desc
+  Output: test-f1-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1 _ --malloc-may-fail --malloc-fail-null --pointer-check
+  Results:
+    ^\[f1.assigns.\d+\] line \d+ Check that p->buf\[\(.*\)0\] is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    ^\[.*assigns.*\].*: FAILURE$
+    --
+    In f1, the assigns clause specifies `*(p->buf)` as target (which can be invalid)
+    and assigns `p->buf[0]` unconditionally. When both target and lhs are invalid,
+    its  inclusion check can be trivially satisfied or not but we expect in all
+    cases a  null pointer failure and an invalid pointer error to occur 
+    on the assignment.
+    
+    In f2 tests this behaviour with chained dereferences.
+Execution [SKIPPED]
+Test 'assigns_enforce_structs_08'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test-f2.desc
+  Output: test-f2-non-dfcc.out
+  Options: --dfcc main --enforce-contract f2 _ --malloc-may-fail --malloc-fail-null --pointer-check
+  Results:
+    ^\[f2.assigns.\d+\] line \d+ Check that pp->p->buf\[\(.*\)0\] is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    ^\[.*assigns.*\].*: FAILURE$
+    --
+    In f1, the assigns clause specifies `*(p->buf)` as target (which can be invalid)
+    and assigns `p->buf[0]` unconditionally. When both target and lhs are invalid,
+    its  inclusion check can be trivially satisfied or not but we expect in all
+    cases a  null pointer failure and an invalid pointer error to occur 
+    on the assignment.
+    
+    In f2 tests this behaviour with chained dereferences.
+Execution [SKIPPED]
+Test 'assigns_enforce_subfunction_calls'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^\[baz.assigns.\d+\].*Check that \*x is assignable: FAILURE$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    Check that write-sets are propagated through function calls.
+Execution [SKIPPED]
+Test 'assigns_function_pointer'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract bar
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[bar.assigns.\d+\] line \d+ Check that s->f is assignable: SUCCESS$
+    ^\[bar.assigns.\d+\] line \d+ Check that \*f is assignable: SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion x \=\= 1: SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion x \=\= 2: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    Checks whether assigns clause accepts function pointers
+    and pointers to function pointers.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract bar 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^\[bar.assigns.\d+\] line \d+ Check that s->f is assignable: SUCCESS$ [OK]
+^\[bar.assigns.\d+\] line \d+ Check that \*f is assignable: SUCCESS$ [OK]
+^\[main.assertion.\d+\] line \d+ assertion x \=\= 1: SUCCESS$ [OK]
+^\[main.assertion.\d+\] line \d+ assertion x \=\= 2: SUCCESS$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+Checks whether assigns clause accepts function pointers [OK]
+and pointers to function pointers. [OK]
+
+Test 'assigns_repeated_ignored'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that repeated expressions in assigns clauses are handled
+    gracefully.
+Execution [SKIPPED]
+Test 'assigns_replace_01'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    assertion n == 7: FAILURE
+    assertion n == 6: FAILURE
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test checks that a variable inside the assigns clause is havocked.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 10
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=10$ [OK]
+^SIGNAL=0$ [OK]
+assertion n == 7: FAILURE [OK]
+assertion n == 6: FAILURE [OK]
+^VERIFICATION FAILED$ [OK]
+
+Test 'assigns_replace_02'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that a variable outside the assigns clause is not havocked.
+Execution [SKIPPED]
+Test 'assigns_replace_03'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract bar _ --pointer-primitive-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that a havocked variable can be constrained by a function post-condition.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract bar _ --pointer-primitive-check 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+
+Test 'assigns_replace_04'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract f2 --replace-call-with-contract f3
+  Results:
+    main.c function main
+    ^\[.*\d+\] line 29 assertion p > 100: SUCCESS$
+    ^\[.*\d+\] line 30 assertion q == 2: SUCCESS$
+    ^\[.*\d+\] line 31 reachability test: FAILURE$
+    ^\*\* 1 of \d+ failed
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that replacing function calls with their contracts within a
+    loop, when the contracts impose contradictory post conditions at different loop
+    iterations on a same program variable, do not cause vacuity.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract f2 --replace-call-with-contract f3 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 10
+  Signal: 0
+  Core: 0
+Execution [OK]
+main.c function main [OK]
+^\[.*\d+\] line 29 assertion p > 100: SUCCESS$ [OK]
+^\[.*\d+\] line 30 assertion q == 2: SUCCESS$ [OK]
+^\[.*\d+\] line 31 reachability test: FAILURE$ [OK]
+^\*\* 1 of \d+ failed [OK]
+^VERIFICATION FAILED$ [OK]
+^EXIT=10$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'assigns_replace_05'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract f2 --replace-call-with-contract f3
+  Results:
+    main.c function main
+    ^\[.*\d+\] line 29 assertion p < 0: SUCCESS$
+    ^\[.*\d+\] line 30 assertion q == 32: SUCCESS$
+    ^\[.*\d+\] line 31 reachability test: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    This test demonstrates that replacing a function call with a contract that has
+    an empty assigns clause and a post condition involving its input parameters can 
+    causes vacuous proofs. Checking the contract against the function would fail
+    the assigns clause checks. *This is not a bug*.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract f2 --replace-call-with-contract f3 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+main.c function main [OK]
+^\[.*\d+\] line 29 assertion p < 0: SUCCESS$ [OK]
+^\[.*\d+\] line 30 assertion q == 32: SUCCESS$ [OK]
+^\[.*\d+\] line 31 reachability test: SUCCESS$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'assigns_replace_06'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo --replace-call-with-contract bar _ --pointer-primitive-check
+  Results:
+    ^\[main.assertion.1\] line \d+ assertion b\[0\] == 'a': FAILURE$
+    ^\[main.assertion.2\] line \d+ assertion b\[1\] == 'b': FAILURE$
+    ^\[main.assertion.3\] line \d+ assertion b\[2\] == 'c': FAILURE$
+    ^\[main.assertion.4\] line \d+ assertion b\[3\] == 'd': FAILURE$
+    ^\[main.assertion.5\] line \d+ assertion b\[0\] == 'a': FAILURE$
+    ^\[main.assertion.6\] line \d+ assertion b\[1\] == '1': SUCCESS$
+    ^\[main.assertion.7\] line \d+ assertion b\[2\] == 'c': FAILURE$
+    ^\[main.assertion.8\] line \d+ assertion b\[3\] == '3': FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    ^\[.+\.pointer_primitives\.\d+] line .*: FAILURE$
+    --
+    Checks that entire arrays and fixed single elements are correctly havoced
+    when functions are replaced by contracts.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract foo --replace-call-with-contract bar _ --pointer-primitive-check 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 10
+  Signal: 0
+  Core: 0
+Execution [OK]
+^\[main.assertion.1\] line \d+ assertion b\[0\] == 'a': FAILURE$ [OK]
+^\[main.assertion.2\] line \d+ assertion b\[1\] == 'b': FAILURE$ [OK]
+^\[main.assertion.3\] line \d+ assertion b\[2\] == 'c': FAILURE$ [OK]
+^\[main.assertion.4\] line \d+ assertion b\[3\] == 'd': FAILURE$ [OK]
+^\[main.assertion.5\] line \d+ assertion b\[0\] == 'a': FAILURE$ [OK]
+^\[main.assertion.6\] line \d+ assertion b\[1\] == '1': SUCCESS$ [OK]
+^\[main.assertion.7\] line \d+ assertion b\[2\] == 'c': FAILURE$ [OK]
+^\[main.assertion.8\] line \d+ assertion b\[3\] == '3': FAILURE$ [OK]
+^EXIT=10$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION FAILED$ [OK]
+^\[.+\.pointer_primitives\.\d+] line .*: FAILURE$ [OK]
+
+Test 'assigns_replace_07'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract f1 _ --malloc-may-fail --malloc-fail-null --pointer-check
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.assertion.\d+\] line \d+ assertion p == NULL \|\| p->buf\[0\] == 0: SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion p == NULL \|\| p->buf\[1\] == buf_1: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Checks whether CBMC properly evaluates write set of members from invalid objects.
+    Functions are not expected to write to invalid locations; CBMC flags such writes.
+    For contract checking, we ignore invalid targets in assigns clauses and assignment LHS.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract f1 _ --malloc-may-fail --malloc-fail-null --pointer-check 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 10
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=10$ [OK]
+^SIGNAL=0$ [OK]
+^\[main.assertion.\d+\] line \d+ assertion p == NULL \|\| p->buf\[0\] == 0: SUCCESS$ [OK]
+^\[main.assertion.\d+\] line \d+ assertion p == NULL \|\| p->buf\[1\] == buf_1: FAILURE$ [OK]
+^VERIFICATION FAILED$ [OK]
+
+Test 'assigns_replace_08'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo --replace-call-with-contract bar _ --pointer-primitive-check
+  Results:
+    ^\[bar.assigns.\d+\].*Check that the assigns clause of contract::bar is included in the caller's assigns clause: FAILURE$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    Checks whether CBMC properly evaluates subset relationship on assigns
+    during replacement when the targets are global variables.
+Execution [SKIPPED]
+Test 'assigns_replace_09'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract bar --enforce-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[bar.assigns.\d+\].*Check that the assigns clause of contract::bar is included in the caller's assigns clause: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that assigns clause inclusion checks succeed when targets are
+    global variables and the checked function is a static function.
+Execution [SKIPPED]
+Test 'assigns_replace_conditional_targets'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^main.c function main$
+    ^\[main\.assertion\.\d+\] line 55 a unchanged, expecting SUCCESS: SUCCESS$
+    ^\[main\.assertion\.\d+\] line 57 x changed, expecting FAILURE: FAILURE$
+    ^\[main\.assertion\.\d+\] line 59 x unchanged, expecting SUCCESS: SUCCESS$
+    ^\[main\.assertion\.\d+\] line 62 y changed, expecting FAILURE: FAILURE$
+    ^\[main\.assertion\.\d+\] line 64 y unchanged, expecting SUCCESS: SUCCESS$
+    ^\[main\.assertion\.\d+\] line 67 z changed, expecting FAILURE: FAILURE$
+    ^\[main\.assertion\.\d+\] line 69 z unchanged, expecting SUCCESS: SUCCESS$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that havocking of conditional targets works as expected when 
+    replacing a call by a contract. We manually express frame conditions as 
+    assertions in the main function.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 10
+  Signal: 0
+  Core: 0
+Execution [OK]
+^main.c function main$ [OK]
+^\[main\.assertion\.\d+\] line 55 a unchanged, expecting SUCCESS: SUCCESS$ [OK]
+^\[main\.assertion\.\d+\] line 57 x changed, expecting FAILURE: FAILURE$ [OK]
+^\[main\.assertion\.\d+\] line 59 x unchanged, expecting SUCCESS: SUCCESS$ [OK]
+^\[main\.assertion\.\d+\] line 62 y changed, expecting FAILURE: FAILURE$ [OK]
+^\[main\.assertion\.\d+\] line 64 y unchanged, expecting SUCCESS: SUCCESS$ [OK]
+^\[main\.assertion\.\d+\] line 67 z changed, expecting FAILURE: FAILURE$ [OK]
+^\[main\.assertion\.\d+\] line 69 z unchanged, expecting SUCCESS: SUCCESS$ [OK]
+^VERIFICATION FAILED$ [OK]
+^EXIT=10$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'assigns_replace_havoc_dependent_targets_fail'
+  Level: KNOWNBUG
+  Input: main_enforce.c
+  Descriptor: enforce.desc
+  Output: enforce-non-dfcc.out
+  Options: --dfcc main --enforce-contract resize_vec _ --signed-overflow-check --unsigned-overflow-check --pointer-overflow-check
+  Results:
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    Verifies that the contract being replaced in `replace.desc` holds on resize_vec.
+Execution [SKIPPED]
+Test 'assigns_replace_havoc_dependent_targets_fail'
+  Level: CORE
+  Input: main_replace.c
+  Descriptor: replace.desc
+  Output: replace-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract resize_vec --enforce-contract resize_vec_incr10 _ --signed-overflow-check --unsigned-overflow-check --pointer-overflow-check
+  Results:
+    ^\[resize_vec.assigns.\d+\].*Check that the assigns clause of contract::resize_vec is included in the caller's assigns clause: FAILURE$
+    ^\[resize_vec.frees.\d+\].*Check that the frees clause of contract::resize_vec is included in the caller's frees clause: FAILURE$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that assigns clause and frees clause inclusion checks
+    are falsified when a callee (resize_vec) assigns outside the assigns clause
+    of the caller (resize_vec_incr10).
+Execution [SKIPPED]
+Test 'assigns_replace_havoc_dependent_targets_pass'
+  Level: KNOWNBUG
+  Input: main_enforce.c
+  Descriptor: enforce.desc
+  Output: enforce-non-dfcc.out
+  Options: --dfcc main --enforce-contract resize_vec _ --signed-overflow-check --unsigned-overflow-check --pointer-overflow-check
+  Results:
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    Verifies the contract being replaced in `replace.desc`.
+Execution [SKIPPED]
+Test 'assigns_replace_havoc_dependent_targets_pass'
+  Level: KNOWNBUG
+  Input: main_replace.c
+  Descriptor: replace.desc
+  Output: replace-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract resize_vec --enforce-contract resize_vec_incr10 _ --signed-overflow-check --unsigned-overflow-check --pointer-overflow-check
+  Results:
+    ^\[resize_vec.assigns.\d+\].*Check that the assigns clause of contract::resize_vec is included in the caller's assigns clause: SUCCESS$
+    ^\[resize_vec.frees.\d+\].*Check that the frees clause of contract::resize_vec is included in the caller's frees clause: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    Shows that we can successfully check that the assigns and frees clause of
+    a callee (resize_vec) are included in the caller's (resize_vec_incr10).
+Execution [SKIPPED]
+Test 'assigns_type_checking_invalid_case_01'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    ^CONVERSION ERROR$
+    ^.*error: assigns clause target must be a non-void lvalue or a call to a function returning void$
+    --
+    Checks whether type checking rejects literal constants in assigns clause.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+^CONVERSION ERROR$ [OK]
+^.*error: assigns clause target must be a non-void lvalue or a call to a function returning void$ [OK]
+Checks whether type checking rejects literal constants in assigns clause. [OK]
+
+Test 'assigns_type_checking_invalid_case_02'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract bar
+  Results:
+    ^EXIT=(10)$
+    ^SIGNAL=0$
+    ^\[main.assertion.\d+\] line \d+ assertion b\[0\] \=\= \'a\': SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion b\[1\] \=\= \'b\': SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion b\[2\] \=\= \'c\': SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion b\[3\] \=\= \'d\': SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion b\[4\] \=\= \'e\': SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion b\[5\] \=\= \'f\': SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion b\[6\] \=\= \'g\': SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion b\[7\] \=\= \'h\': FAILURE$
+    ^\[main.assertion.\d+\] line \d+ assertion b\[8\] \=\= \'i\': SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion b\[9\] \=\= \'j\': SUCCESS$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Checks whether CBMC properly havocs a single instance of an array.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract bar 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 10
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=(10)$ [OK]
+^SIGNAL=0$ [OK]
+^\[main.assertion.\d+\] line \d+ assertion b\[0\] \=\= \'a\': SUCCESS$ [OK]
+^\[main.assertion.\d+\] line \d+ assertion b\[1\] \=\= \'b\': SUCCESS$ [OK]
+^\[main.assertion.\d+\] line \d+ assertion b\[2\] \=\= \'c\': SUCCESS$ [OK]
+^\[main.assertion.\d+\] line \d+ assertion b\[3\] \=\= \'d\': SUCCESS$ [OK]
+^\[main.assertion.\d+\] line \d+ assertion b\[4\] \=\= \'e\': SUCCESS$ [OK]
+^\[main.assertion.\d+\] line \d+ assertion b\[5\] \=\= \'f\': SUCCESS$ [OK]
+^\[main.assertion.\d+\] line \d+ assertion b\[6\] \=\= \'g\': SUCCESS$ [OK]
+^\[main.assertion.\d+\] line \d+ assertion b\[7\] \=\= \'h\': FAILURE$ [OK]
+^\[main.assertion.\d+\] line \d+ assertion b\[8\] \=\= \'i\': SUCCESS$ [OK]
+^\[main.assertion.\d+\] line \d+ assertion b\[9\] \=\= \'j\': SUCCESS$ [OK]
+^VERIFICATION FAILED$ [OK]
+
+Test 'assigns_type_checking_valid_cases'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-foo1.desc
+  Output: test-foo1-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo1 _ --pointer-primitive-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    Checks whether CBMC parses correctly all standard cases for assigns clauses.
+Execution [SKIPPED]
+Test 'assigns_type_checking_valid_cases'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-foo10.desc
+  Output: test-foo10-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo10 _ --pointer-primitive-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[foo10.assigns.\d+\] line \d+ Check that buffer->len is assignable: SUCCESS$
+    ^\[foo10.assigns.\d+\] line \d+ Check that buffer->aux\.allocated is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    Checks whether CBMC parses correctly all standard cases for assigns clauses.
+Execution [SKIPPED]
+Test 'assigns_type_checking_valid_cases'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-foo2.desc
+  Output: test-foo2-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo2 _ --pointer-primitive-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    Checks whether CBMC parses correctly all standard cases for assigns clauses.
+Execution [SKIPPED]
+Test 'assigns_type_checking_valid_cases'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-foo3.desc
+  Output: test-foo3-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo3 _ --pointer-primitive-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[foo3.assigns.\d+\] line \d+ Check that y is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    Checks whether CBMC parses correctly all standard cases for assigns clauses.
+Execution [SKIPPED]
+Test 'assigns_type_checking_valid_cases'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-foo4.desc
+  Output: test-foo4-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo4 _ --pointer-primitive-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[foo4.assigns.\d+\] line \d+ Check that \*c is assignable: SUCCESS$
+    ^\[foo4.assigns.\d+\] line \d+ Check that \*x is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    Checks whether CBMC parses correctly all standard cases for assigns clauses.
+Execution [SKIPPED]
+Test 'assigns_type_checking_valid_cases'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-foo5.desc
+  Output: test-foo5-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo5 _ --pointer-primitive-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    Checks whether CBMC parses correctly all standard cases for assigns clauses.
+Execution [SKIPPED]
+Test 'assigns_type_checking_valid_cases'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test-foo6.desc
+  Output: test-foo6-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo6 _ --pointer-primitive-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[foo6.assigns.\d+\] line \d+ Check that \*buffer->data is assignable: SUCCESS$
+    ^\[foo6.assigns.\d+\] line \d+ Check that buffer->len is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    Checks whether CBMC parses correctly all standard cases for assigns clauses.
+Execution [SKIPPED]
+Test 'assigns_type_checking_valid_cases'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test-foo7.desc
+  Output: test-foo7-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo7 _ --pointer-primitive-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[foo7.assigns.\d+\] line \d+ Check that \*buffer->data is assignable: SUCCESS$
+    ^\[foo7.assigns.\d+\] line \d+ Check that buffer->len is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    Checks whether CBMC parses correctly all standard cases for assigns clauses.
+Execution [SKIPPED]
+Test 'assigns_type_checking_valid_cases'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test-foo8.desc
+  Output: test-foo8-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo8 _ --pointer-primitive-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[foo8.assigns.\d+\] line \d+ Check that array\[\(.* int\)0\] is assignable: SUCCESS$
+    ^\[foo8.assigns.\d+\] line \d+ Check that array\[\(.* int\)1\] is assignable: SUCCESS$
+    ^\[foo8.assigns.\d+\] line \d+ Check that array\[\(.* int\)2\] is assignable: SUCCESS$
+    ^\[foo8.assigns.\d+\] line \d+ Check that array\[\(.* int\)3\] is assignable: SUCCESS$
+    ^\[foo8.assigns.\d+\] line \d+ Check that array\[\(.* int\)4\] is assignable: SUCCESS$
+    ^\[foo8.assigns.\d+\] line \d+ Check that array\[\(.* int\)5\] is assignable: SUCCESS$
+    ^\[foo8.assigns.\d+\] line \d+ Check that array\[\(.* int\)6\] is assignable: SUCCESS$
+    ^\[foo8.assigns.\d+\] line \d+ Check that array\[\(.* int\)7\] is assignable: SUCCESS$
+    ^\[foo8.assigns.\d+\] line \d+ Check that array\[\(.* int\)8\] is assignable: SUCCESS$
+    ^\[foo8.assigns.\d+\] line \d+ Check that array\[\(.* int\)9\] is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    Checks whether CBMC parses correctly all standard cases for assigns clauses.
+Execution [SKIPPED]
+Test 'assigns_type_checking_valid_cases'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-foo9.desc
+  Output: test-foo9-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo9 _ --pointer-primitive-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    Checks whether CBMC parses correctly all standard cases for assigns clauses.
+Execution [SKIPPED]
+Test 'assigns_validity_pointer_01'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo --replace-call-with-contract bar --replace-call-with-contract baz
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    SUCCESS
+    ASSERT \*foo::x > 0
+    IF ¬\(\*foo::x = 3\) THEN GOTO \d
+    ASSIGN .*::tmp_if_expr := \(\*\(.*0.*\) = 5 \? true : false\)
+    ASSIGN .*::tmp_if_expr\$\d := .*::tmp_if_expr \? true : false
+    ASSUME .*::tmp_if_expr\$\d
+    IF ¬\(z ≠ NULL\) THEN GOTO \d
+    ASSIGN .*::tmp_if_expr\$\d := \(\*z = 7 \? true : false\)
+    ASSUME .*::tmp_if_expr\$\d
+    --
+    \[3\] file main\.c line 6 assertion: FAILURE
+    --
+    Verification:
+    This test checks support for a NULL pointer that is assigned to by
+    a function (bar and baz). Both functions bar and baz are being replaced by
+    their function contracts, while the calling function foo is being checked
+    (by enforcing it's function contracts).
+Execution [SKIPPED]
+Test 'assigns_validity_pointer_02'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[foo.postcondition.\d+\] line \d+ Check ensures clause( of contract contract::foo for function foo)?: SUCCESS$
+    ^\[bar.assigns.\d+\] line \d+ Check that \*x is assignable: SUCCESS$
+    ^\[bar.assigns.\d+\] line \d+ Check that \*y is assignable: SUCCESS$
+    ^\[baz.assigns.\d+\] line \d+ Check that \*z is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line \d+ Check that \*x is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that assigns clause checking
+    is control-flow sensitive. The assignment to the global *z
+    in baz is inhibited in the calling context of foo, so it does
+    not violate the assigns clause of foo.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^\[foo.postcondition.\d+\] line \d+ Check ensures clause( of contract contract::foo for function foo)?: SUCCESS$ [OK]
+^\[bar.assigns.\d+\] line \d+ Check that \*x is assignable: SUCCESS$ [OK]
+^\[bar.assigns.\d+\] line \d+ Check that \*y is assignable: SUCCESS$ [OK]
+^\[baz.assigns.\d+\] line \d+ Check that \*z is assignable: SUCCESS$ [OK]
+^\[foo.assigns.\d+\] line \d+ Check that \*x is assignable: SUCCESS$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+
+Test 'assigns_validity_pointer_03'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo --replace-call-with-contract bar --replace-call-with-contract baz
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    ASSERT \*x > 0
+    IF !\(\*x == 3\) THEN GOTO \d
+    tmp_if_expr = \*y == 5 \? true : false;
+    ASSUME tmp_if_expr
+    ASSUME \*z == 7
+    ASSUME \*tmp_cc\$\d > 0
+    ASSERT \*tmp_cc\$\d == 3
+    --
+    --
+    Verification:
+    This test checks support for an uninitialized pointer that is assigned to by
+    a function (bar and baz). Both functions bar and baz are being replaced by
+    their function contracts, while the calling function foo is being checked
+    (by enforcing it's function contracts).
+    
+    Known Bug:
+    Currently, there is a known issue with __CPROVER_w_ok(ptr, 0) such that it
+    returns true if ptr is uninitialized. This is not the expected behavior,
+    therefore, the outcome of this test case is currently incorrect.
+Execution [SKIPPED]
+Test 'assigns_validity_pointer_04'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo --replace-call-with-contract bar --replace-call-with-contract baz _ --pointer-primitive-check
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[foo.assigns.\d+\] line \d+ Check that z is assignable: FAILURE$
+    ^.* 1 of \d+ failed \(\d+ iteration.*\)$
+    ^VERIFICATION FAILED$
+    ASSERT \*foo::x > 0
+    IF ¬\(\*foo::x = 3\) THEN GOTO \d
+    ASSIGN goto_convertt::tmp_if_expr := \(\*foo::1::y = 5 \? true : false\)
+    ASSUME .*::tmp_if_expr
+    ASSUME \*z = 7
+    --
+    --
+    This test checks support for a malloced pointer that is assigned to by
+    a function (bar and baz). Both functions bar and baz are being replaced by
+    their function contracts, while the calling function foo is being checked
+    (by enforcing it's function contracts).
+Execution [SKIPPED]
+Test 'contracts_with_function_pointers'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract bar
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[bar.postcondition.\d+\].*Check ensures clause of contract contract::bar for function bar: SUCCESS$
+    ^\[bar.assigns.\d+\].*Check that \*return\_value\_baz is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\].*Check that \*y is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    Checks whether CBMC properly instrument functions with function pointers
+    during contract enforcement.
+Execution [SKIPPED]
+Test 'cprover-assignable-fail'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main
+  Results:
+    CALL __CPROVER_object_whole
+    CALL __CPROVER_object_upto
+    CALL __CPROVER_object_from
+    CALL __CPROVER_assignable
+    ^\[__CPROVER_assignable.assertion.\d+\].*undefined function should be unreachable: FAILURE$
+    ^\[__CPROVER_object_from.assertion.\d+\].*undefined function should be unreachable: FAILURE$
+    ^\[__CPROVER_object_upto.assertion.\d+\].*undefined function should be unreachable: FAILURE$
+    ^\[__CPROVER_object_whole.assertion.\d+\].*undefined function should be unreachable: FAILURE$
+    ^\[my_write_set.assertion.\d+\] .* target null or writable: FAILURE$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    CALL __CPROVER_typed_target
+    --
+    This test checks that:
+    - built-ins __CPROVER_assignable, __CPROVER_object_whole, __CPROVER_object_from,
+      __CPROVER_object_upto are supported;
+    - GOTO conversion preserves calls to __CPROVER_object_whole,
+      __CPROVER_object_upto, __CPROVER_object_from;
+    - reachability assertions are inserted in front-end functions and allow to
+      detect when front-end functions are used outside of contracts clauses;
+    - GOTO conversion translates __CPROVER_typed_target to __CPROVER_assignable;
+    - user-defined checks embedded in `my_write_set` persist after conversion.
+Execution [SKIPPED]
+Test 'cprover-assignable-pass'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main
+  Results:
+    CALL __CPROVER_object_whole
+    CALL __CPROVER_object_upto
+    CALL __CPROVER_object_from
+    CALL __CPROVER_assignable
+    ^\[__CPROVER_assignable.assertion.\d+\].*undefined function should be unreachable: FAILURE$
+    ^\[__CPROVER_object_from.assertion.\d+\].*undefined function should be unreachable: FAILURE$
+    ^\[__CPROVER_object_upto.assertion.\d+\].*undefined function should be unreachable: FAILURE$
+    ^\[__CPROVER_object_whole.assertion.\d+\].*undefined function should be unreachable: FAILURE$
+    ^\[my_write_set.assertion.\d+\] .* target null or writable: SUCCESS$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    CALL __CPROVER_typed_target
+    --
+    This test checks that:
+    - built-in __CPROVER_assignable, __CPROVER_object_from, __CPROVER_object_upto,
+      __CPROVER_object_whole functions are supported in the front-end;
+    - GOTO conversion preserves calls to __CPROVER_object_whole,
+      __CPROVER_object_upto, __CPROVER_object_from;
+    - reachability assertions are inserted in front-end functions and allow to
+      detect when front-end functions are used outside of contracts clauses;
+    - GOTO conversion translates __CPROVER_typed_target to __CPROVER_assignable;
+    - user-defined checks embedded in `my_write_set` persist after conversion.
+Execution [SKIPPED]
+Test 'detect_loop_locals'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^\[main.assigns.\d+\].*line 10 Check that i is assignable: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks that loop local variables do not cause explicit checks.
+Execution [SKIPPED]
+Test 'detect_loop_locals2'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^\[bar.assigns.\d+\].*Check that i is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\].*Check that i is assignable: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks that loop local variables do not cause explicit checks 
+Execution [SKIPPED]
+Test 'dont_skip_cprover_prefixed_vars_fail'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^\[foo.assigns.\d+\] line \d+ Check that nondet_var is assignable: FAILURE$
+    ^\[foo.assigns.\d+\] line \d+ Check that __VERIFIER_var is assignable: FAILURE$
+    ^\[foo.assigns.\d+\] line \d+ Check that __CPROVER_var is assignable: FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test checks that program variables with special name prefixes
+    __CPROVER_, __VERIFIER, or nondet do not escape assigns clause checking.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --apply-loop-contracts 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 10
+  Signal: 0
+  Core: 0
+Execution [OK]
+^\[foo.assigns.\d+\] line \d+ Check that nondet_var is assignable: FAILURE$ [OK]
+^\[foo.assigns.\d+\] line \d+ Check that __VERIFIER_var is assignable: FAILURE$ [OK]
+^\[foo.assigns.\d+\] line \d+ Check that __CPROVER_var is assignable: FAILURE$ [OK]
+^EXIT=10$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION FAILED$ [OK]
+
+Test 'dont_skip_cprover_prefixed_vars_pass'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^\[foo.assigns.\d+\] line \d+ Check that nondet_var is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line \d+ Check that __VERIFIER_var is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line \d+ Check that __CPROVER_var is assignable: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that when program variables names have special prefixes
+    __CPROVER_, __VERIFIER, or nondet, adding them to the write set makes them
+    assignable.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --apply-loop-contracts 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^\[foo.assigns.\d+\] line \d+ Check that nondet_var is assignable: SUCCESS$ [OK]
+^\[foo.assigns.\d+\] line \d+ Check that __VERIFIER_var is assignable: SUCCESS$ [OK]
+^\[foo.assigns.\d+\] line \d+ Check that __CPROVER_var is assignable: SUCCESS$ [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+
+Test 'embedded_contract_fail_01'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main 
+  Results:
+    ^.*: Function contracts allowed only at top-level declarations. .*$
+    ^PARSING ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    Checks if function contracts can be attached to function pointers
+    (with non-empty parameter lists) in function parameters.  This should
+    fail.  Exit code 64 for Windows servers.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main  'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^.*: Function contracts allowed only at top-level declarations. .*$ [OK]
+^PARSING ERROR$ [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'embedded_contract_fail_02'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main 
+  Results:
+    ^.*: Function contracts allowed only at top-level declarations. .*$
+    ^PARSING ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    Checks if function contracts can be attached to function pointers
+    (with empty parameter lists) in function parameters.  This should
+    fail.  Exit code 64 for Windows servers.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main  'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^.*: Function contracts allowed only at top-level declarations. .*$ [OK]
+^PARSING ERROR$ [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'enforce-replace-unknown-function'
+  Level: CORE
+  Input: main.c
+  Descriptor: enforce.desc
+  Output: enforce-non-dfcc.out
+  Options: --dfcc main --enforce-contract goo
+  Results:
+    ^Function to check 'goo' either not found or has no body$
+    ^EXIT=(0|127|134|137)$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that attempting to enforce the contract of an unknown function creates
+    an error.
+Execution [SKIPPED]
+Test 'enforce-replace-unknown-function'
+  Level: CORE
+  Input: main.c
+  Descriptor: replace.desc
+  Output: replace-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract goo
+  Results:
+    ^Function to replace 'goo' not found$
+    ^EXIT=(127|134)$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that attempting call replacement with an unknown function creates an
+    error.
+Execution [SKIPPED]
+Test 'entry_point'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --enforce-contract foo _ --function foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that we can use a function with a contract as entry point
+    for the analysis when its contract gets enforced.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --enforce-contract foo _ --function foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+
+Test 'frees-clause-and-predicates'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that the front end parses and typechecks correct uses of
+    - void function calls as frees clause targets
+    - the predicate __CPROVER_freeable
+    - the predicate __CPROVER_is_freeable
+    - the predicate __CPROVER_was_freed
+    
+    The post condition of the contract is expected to fail because the predicates
+    have no interpretation in the back-end yet.
+Execution [SKIPPED]
+Test 'frees-clause-and-predicates-fail'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --enforce-contract foo
+  Results:
+    ^main.c.* error: __CPROVER_was_freed is not allowed in preconditions.$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that the front end rejects __CPROVER_was_freed in preconditions.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^main.c.* error: __CPROVER_was_freed is not allowed in preconditions.$ [OK]
+^CONVERSION ERROR$ [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'frees-clause-and-predicates-fail2'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --enforce-contract foo
+  Results:
+    ^main.c.* error: expecting void return type for function 'foo_frees' called in frees clause$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that the front-end rejects non-void-typed
+    function calls in frees clauses.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^main.c.* error: expecting void return type for function 'foo_frees' called in frees clause$ [OK]
+^CONVERSION ERROR$ [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'frees-clause-and-predicates-is_freeable-bad-arity'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --enforce-contract foo
+  Results:
+    ^main.c.*error: wrong number of function arguments: expected 1, but got 2$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks bad uses of __CPROVER_is_freeable are rejected.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^main.c.*error: wrong number of function arguments: expected 1, but got 2$ [OK]
+^CONVERSION ERROR$ [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'frees-clause-and-predicates-is_freed-bad-arity'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --enforce-contract foo
+  Results:
+    ^main.c.*error: wrong number of function arguments: expected 1, but got 2$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks bad uses of __CPROVER_was_freed are rejected.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^main.c.*error: wrong number of function arguments: expected 1, but got 2$ [OK]
+^CONVERSION ERROR$ [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'function-calls-01-enforce-failure'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f
+  Results:
+    ^\[f.postcondition.\d+\] .* Check ensures clause of contract contract::f for function f: FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test checks that contract checking fails for a function that does not
+    satisfy its contract.
+Execution [SKIPPED]
+Test 'function-calls-01-enforce-success'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f
+  Results:
+    ^\[f.postcondition.\d+\] .* Check ensures clause of contract contract::f for function f: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that contract checking is successfull for a function satifying
+    its contract. The harness does not restrain the input parameter in any way and
+    so this test shows that requires clauses are turned into assumptions.
+Execution [SKIPPED]
+Test 'function-calls-01-replace-failure'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract f
+  Results:
+    ^\[f.precondition.\d+\] .* Check requires clause of contract contract::f for function f: FAILURE$
+    ^\[main.assertion.\d+\] .* assertion __return_value == x \+ 1: SUCCESS$
+    ^\[main.assertion.\d+\] .* assertion 1 <= __return_value && __return_value <= 10001: SUCCESS$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Heere we test contract replacement at a call site where contract pre-conditions
+    do not hold and precondition checks must fail, while having downstream
+    assertions satisfied by virtue of assuming the contract post conditions.
+Execution [SKIPPED]
+Test 'function-calls-01-replace-success'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract f
+  Results:
+    ^\[f.precondition.\d+\] .* Check requires clause of contract contract::f for function f: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Here we test contract replacement at a call site where contract pre-conditions
+    hold. Assuming the contract post conditions during replacement allows to satisfy
+    downstream assertions.
+Execution [SKIPPED]
+Test 'function-calls-02-failure'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-enf-f-repl-g.desc
+  Output: test-enf-f-repl-g-non-dfcc.out
+  Options: --dfcc main --enforce-contract f --replace-call-with-contract g
+  Results:
+    ^\[f.postcondition.\d+\] .* Check ensures clause of contract contract::f for function f: SUCCESS$
+    ^\[g.precondition.\d+\] .* Check requires clause of contract contract::g for function g: FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    f is checked against its contract. f calls g and g is replaced by its
+    contract. The analysis must fail since f violates the preconditions of g.
+    However we expect the post conditions of f to hold since contract replacement
+    assumes post conditions hold.
+Execution [SKIPPED]
+Test 'function-calls-02-failure'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-enf-f.desc
+  Output: test-enf-f-non-dfcc.out
+  Options: --dfcc main --enforce-contract f
+  Results:
+    ^\[f.postcondition.\d+\] .* Check ensures clause of contract contract::f for function f: FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    f is checked against its contract. f calls g and g is not replaced by its
+    contract. f violates the preconditions of g, in turn g violates its post
+    conditions and in turn f violates its post conditions.
+Execution [SKIPPED]
+Test 'function-calls-02-failure'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-enf-g.desc
+  Output: test-enf-g-non-dfcc.out
+  Options: --dfcc main --enforce-contract g
+  Results:
+    ^\[g.postcondition.\d+\] .* Check ensures clause of contract contract::g for function g: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    We check g against its contract, the post conditions are expected to hold.
+Execution [SKIPPED]
+Test 'function-calls-02-success'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-enf-f-repl-g.desc
+  Output: test-enf-f-repl-g-non-dfcc.out
+  Options: --dfcc main --enforce-contract f --replace-call-with-contract g
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    We check f against its contract while replacing g by its contract.
+    Verification is expected to succeed.
+Execution [SKIPPED]
+Test 'function-calls-02-success'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-enf-f.desc
+  Output: test-enf-f-non-dfcc.out
+  Options: --dfcc main --enforce-contract f
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    f calls g. We check f against its contract without replacing g.
+    The post conditions for f are expected to hold.
+Execution [SKIPPED]
+Test 'function-calls-02-success'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-enf-g.desc
+  Output: test-enf-g-non-dfcc.out
+  Options: --dfcc main --enforce-contract g
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    We check g against its contract, the post conditions are expected to hold.
+Execution [SKIPPED]
+Test 'function-calls-03-direct-recursion'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-norec.desc
+  Output: test-norec-non-dfcc.out
+  Options: --dfcc main --enforce-contract f
+  Results:
+    ^\[.*\].*No recursive call to function f when checking contract f: FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test checks that when checking a contract against a function using
+    --enforce-contract, if the function is recursive then the verification fails.
+    The switch --enforce-contract-rec needs to be used instead.
+Execution [SKIPPED]
+Test 'function-calls-03-direct-recursion'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-rec.desc
+  Output: test-rec-non-dfcc.out
+  Options: --dfcc main --enforce-contract-rec f
+  Results:
+    ^\[f.postcondition.\d+\].*Check ensures clause of contract contract::f for function f: SUCCESS$
+    ^\[f.precondition.\d+\].*Check requires clause of contract contract::f for function f: SUCCESS$
+    ^\[f.assigns.\d+\].*Check that the assigns clause of contract::f is included in the caller's assigns clause: SUCCESS$
+    ^\[f.frees.\d+\].*Check that the frees clause of contract::f is included in the caller's frees clause: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that when checking a contract against a function using
+    --enforce-contract-rec, if the function is recursive and satsifies the contract
+    then the verification succeeds.
+    We want to see that post conditions are checked (top level call)
+    and preconditions are checked (recursive call).
+    We also want to see assigns and frees clause inclusion checks.
+Execution [SKIPPED]
+Test 'function-calls-04-mutual-recursion-failure'
+  Level: CORE
+  Input: main_even.c
+  Descriptor: test-enf-even-repl-odd.desc
+  Output: test-enf-even-repl-odd-non-dfcc.out
+  Options: --dfcc main --enforce-contract even --replace-call-with-contract odd
+  Results:
+    ^\[even.postcondition.\d+\] .* Check ensures clause of contract contract::even for function even: FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This model tries to proves the contract of even by assuming the contract of odd.
+    We exepect the analysis to fail since even itself contains a bug which falsifies
+    its postconditions.
+Execution [SKIPPED]
+Test 'function-calls-04-mutual-recursion-failure'
+  Level: CORE
+  Input: main_even.c
+  Descriptor: test-enf-even.desc
+  Output: test-enf-even-non-dfcc.out
+  Options: --dfcc main --enforce-contract even
+  Results:
+    ^\[.*\].*No recursive call to function even when checking contract even: FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Must fail because even calls itself through odd and the recursive call is not
+    handled when using --enforce-contract (--enforce-contract-rec must be used).
+Execution [SKIPPED]
+Test 'function-calls-04-mutual-recursion-failure'
+  Level: CORE
+  Input: main_odd.c
+  Descriptor: test-enf-odd-repl-even.desc
+  Output: test-enf-odd-repl-even-non-dfcc.out
+  Options: --dfcc main --enforce-contract odd --replace-call-with-contract even
+  Results:
+    ^\[even.precondition.\d+\] .* Check requires clause of contract contract::even for function even: FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This model tries to prove the contract of odd by assuming the contract of even.
+    We expect this to fail since odd calls even outside of its preconditions.
+Execution [SKIPPED]
+Test 'function-calls-04-mutual-recursion-failure'
+  Level: CORE
+  Input: main_odd.c
+  Descriptor: test-enf-odd.desc
+  Output: test-enf-odd-non-dfcc.out
+  Options: --dfcc main --enforce-contract odd
+  Results:
+    ^\[.*\].*No recursive call to function odd when checking contract odd: FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Must fail because odd calls itself through even and the recursive call is not
+    handled when using --enforce-contract (--enforce-contract-rec must be used).
+Execution [SKIPPED]
+Test 'function-calls-04-mutual-recursion-failure'
+  Level: CORE
+  Input: main_even.c
+  Descriptor: test-enf-rec-even.desc
+  Output: test-enf-rec-even-non-dfcc.out
+  Options: --dfcc main --enforce-contract-rec even
+  Results:
+    ^\[even.precondition.\d+\] .* Check requires clause of contract contract::even for function even: FAILURE$
+    ^\[even.postcondition.\d+\] .* Check ensures clause of contract contract::even for function even: FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This model proves the contract of even by handling the recursive call using
+    --enforce-contract-rec.
+    We expect the analysis to fail since even calls odd and odd calls even again
+    while falsifying its preconditions, and even contains itself a bug which
+    falsifying its post conditions.
+Execution [SKIPPED]
+Test 'function-calls-04-mutual-recursion-failure'
+  Level: CORE
+  Input: main_odd.c
+  Descriptor: test-enf-rec-odd.desc
+  Output: test-enf-rec-odd-non-dfcc.out
+  Options: --dfcc main --enforce-contract-rec odd
+  Results:
+    ^\[odd.precondition.\d+\] .* Check requires clause of contract contract::odd for function odd: SUCCESS$
+    ^\[odd.postcondition.\d+\] .* Check ensures clause of contract contract::odd for function odd: FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This model tries to prove the contract of odd handling the recursive call using
+    --enforce-contract-rec.
+    We expect the analysis to fail because odd contains a bug which allows to falsify
+    its post conditions.
+Execution [SKIPPED]
+Test 'function-calls-04-mutual-recursion-success'
+  Level: CORE
+  Input: main_even.c
+  Descriptor: test-enf-even-repl-odd.desc
+  Output: test-enf-even-repl-odd-non-dfcc.out
+  Options: --dfcc main --enforce-contract even --replace-call-with-contract odd
+  Results:
+    ^\[odd.assigns.\d+\].*Check that the assigns clause of contract::odd is included in the caller's assigns clause: SUCCESS$
+    ^\[odd.frees.\d+\].*Check that the frees clause of contract::odd is included in the caller's frees clause: SUCCESS$
+    ^\[odd.precondition.\d+\].*Check requires clause of contract contract::odd for function odd: SUCCESS$
+    ^\[even.postcondition.\d+\].*Check ensures clause of contract contract::even for function even: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This model proves the contract of even by assuming the contract of odd.
+    Verification is expected to succeed.
+Execution [SKIPPED]
+Test 'function-calls-04-mutual-recursion-success'
+  Level: CORE
+  Input: main_even.c
+  Descriptor: test-enf-even.desc
+  Output: test-enf-even-non-dfcc.out
+  Options: --dfcc main --enforce-contract even
+  Results:
+    ^\[.*\].*No recursive call to function even when checking contract even: FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Must fails because even calls itself through odd and the recursive call is not
+    handled when using --enforce-contract (--enforce-contract-rec must be used).
+Execution [SKIPPED]
+Test 'function-calls-04-mutual-recursion-success'
+  Level: CORE
+  Input: main_odd.c
+  Descriptor: test-enf-odd-repl-even.desc
+  Output: test-enf-odd-repl-even-non-dfcc.out
+  Options: --dfcc main --enforce-contract odd --replace-call-with-contract even
+  Results:
+    ^\[even.assigns.\d+\].*Check that the assigns clause of contract::even is included in the caller's assigns clause: SUCCESS$
+    ^\[even.frees.\d+\].*Check that the frees clause of contract::even is included in the caller's frees clause: SUCCESS$
+    ^\[even.precondition.\d+\].*Check requires clause of contract contract::even for function even: SUCCESS$
+    ^\[odd.postcondition.\d+\].*Check ensures clause of contract contract::odd for function odd: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This model proves the contract of odd by assuming the contract of even.
+Execution [SKIPPED]
+Test 'function-calls-04-mutual-recursion-success'
+  Level: CORE
+  Input: main_odd.c
+  Descriptor: test-enf-odd.desc
+  Output: test-enf-odd-non-dfcc.out
+  Options: --dfcc main --enforce-contract odd
+  Results:
+    ^\[.*\].*No recursive call to function odd when checking contract odd: FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Must fails because odd calls itself through even and the recursive call is not
+    handled when using --enforce-contract (--enforce-contract-rec must be used).
+Execution [SKIPPED]
+Test 'function-calls-04-mutual-recursion-success'
+  Level: CORE
+  Input: main_even.c
+  Descriptor: test-enf-rec-even.desc
+  Output: test-enf-rec-even-non-dfcc.out
+  Options: --dfcc main --enforce-contract-rec even
+  Results:
+    ^\[even.assigns.\d+\].*Check that the assigns clause of contract::even is included in the caller's assigns clause: SUCCESS$
+    ^\[even.frees.\d+\].*Check that the frees clause of contract::even is included in the caller's frees clause: SUCCESS$
+    ^\[even.precondition.\d+\].*Check requires clause of contract contract::even for function even: SUCCESS$
+    ^\[even.postcondition.\d+\].*Check ensures clause of contract contract::even for function even: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This model proves the contract of even by handling the recursive call through
+    the contract-checking wrapper.
+Execution [SKIPPED]
+Test 'function-calls-04-mutual-recursion-success'
+  Level: CORE
+  Input: main_odd.c
+  Descriptor: test-enf-rec-odd.desc
+  Output: test-enf-rec-odd-non-dfcc.out
+  Options: --dfcc main --enforce-contract-rec odd
+  Results:
+    ^\[odd.assigns.\d+\].*Check that the assigns clause of contract::odd is included in the caller's assigns clause: SUCCESS$
+    ^\[odd.frees.\d+\].*Check that the frees clause of contract::odd is included in the caller's frees clause: SUCCESS$
+    ^\[odd.precondition.\d+\].*Check requires clause of contract contract::odd for function odd: SUCCESS$
+    ^\[odd.postcondition.\d+\].*Check ensures clause of contract contract::odd for function odd: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This model proves the contract of odd by handling the recursive call using
+    --enforce-contract-rec.
+Execution [SKIPPED]
+Test 'function-calls-04-mutual-recursion-success'
+  Level: CORE
+  Input: main_unwind.c
+  Descriptor: test-unwind.desc
+  Output: test-unwind-non-dfcc.out
+  Options: --dfcc main _ --unwind 20 --unwinding-assertions
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This model is solved by unwinding to establish the ground truth for both
+    even and odd post conditions.
+Execution [SKIPPED]
+Test 'function-calls-05-function-pointer-call-fail'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^\[foo.postcondition.\d+\] line \d+ Check ensures clause of contract contract::foo for function foo: SUCCESS$
+    ^\[add_operator.assigns.\d+\] line 7 Check that \*y is assignable: FAILURE$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that frame condition checking is propagated
+    through function pointer calls.
+Execution [SKIPPED]
+Test 'function-calls-05-function-pointer-call-pass'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    \[foo.postcondition.\d+\] line \d+ Check ensures clause of contract contract::foo for function foo: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that frame condition checking is propagated
+    through function pointer calls.
+Execution [SKIPPED]
+Test 'function-calls-recursive-function-1'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-replace.desc
+  Output: test-replace-non-dfcc.out
+  Options: --dfcc main --enforce-contract f --replace-call-with-contract g
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    f calls g, g is recursive, g is replaced by its contract.
+    This test shows that we can prove the contract on f by abstracting the recursive
+    function g with its contract.
+Execution [SKIPPED]
+Test 'function-calls-recursive-function-1'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-unwind.desc
+  Output: test-unwind-non-dfcc.out
+  Options: --dfcc main --enforce-contract f _ --unwind 20 --unwinding-assertions
+  Results:
+    ^\[f.postcondition.\d+].*Check ensures clause of contract contract::f for function f: SUCCESS$
+    ^\[g.recursion\].*recursion unwinding assertion: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    f calls g and g is recursive, and is not replaced by its contract.
+    This shows that we can unwind recursion to completion on g using and prove the
+    contract on f. The frame condition checking scales with the unwinding.
+Execution [SKIPPED]
+Test 'function-calls-recursive-function-2'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract sum
+  Results:
+    ^\[sum.postcondition.\d+\].*Check ensures clause of contract contract::sum for function sum: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    The main function calls a recursive function for which unwinding and constant
+    propagation suffices to prove termination. The frame condition checking scales
+    automatically with the unwinding.
+Execution [SKIPPED]
+Test 'function-contract-mapping'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-enforce-fail-contract.desc
+  Output: test-enforce-fail-contract-non-dfcc.out
+  Options: --malloc-may-fail --malloc-fail-null --dfcc main --enforce-contract foo/ _ --pointer-check --pointer-primitive-check --pointer-overflow-check
+  Results:
+    ^Invalid function-contract mapping$
+    ^Reason: couldn't find contract name after '/' in 'foo/'$
+    ^EXIT=(10|6)$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that when the contract name is missing an error is triggered.
+Execution [SKIPPED]
+Test 'function-contract-mapping'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-enforce-fail-function.desc
+  Output: test-enforce-fail-function-non-dfcc.out
+  Options: --malloc-may-fail --malloc-fail-null --dfcc main --enforce-contract /my_contract _ --pointer-check --pointer-primitive-check --pointer-overflow-check
+  Results:
+    ^Invalid function-contract mapping$
+    ^Reason: couldn't find function name before '/' in '/my_contract'$
+    ^EXIT=(10|6)$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that when the function name is missing an error is triggered.
+Execution [SKIPPED]
+Test 'function-contract-mapping'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-enforce-fail-too-many.desc
+  Output: test-enforce-fail-too-many-non-dfcc.out
+  Options: --malloc-may-fail --malloc-fail-null --dfcc main --enforce-contract foo/bar/my_contract _ --pointer-check --pointer-primitive-check --pointer-overflow-check
+  Results:
+    ^Invalid function-contract mapping$
+    ^Reason: couldn't parse 'foo/bar/my_contract'$
+    ^EXIT=(10|6)$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that when the function name is missing an error is triggered.
+Execution [SKIPPED]
+Test 'function-contract-mapping'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-enforce-pass.desc
+  Output: test-enforce-pass-non-dfcc.out
+  Options: --malloc-may-fail --malloc-fail-null --dfcc main --enforce-contract foo/my_contract _ --pointer-check --pointer-primitive-check --pointer-overflow-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test demonstrates the ability to specify a function_name/contract_name
+    mapping for contract checking.
+Execution [SKIPPED]
+Test 'function-contract-mapping'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test-enforce-replace-pass.desc
+  Output: test-enforce-replace-pass-non-dfcc.out
+  Options: --malloc-may-fail --malloc-fail-null --dfcc main --enforce-contract foo/my_contract --replace-call-with-contract bar/my_contract _ --pointer-check --pointer-primitive-check --pointer-overflow-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test demonstrates the ability to check specify a function_name/contract_name
+    mapping for contract checking and contract replacement.
+    
+    The same contract `my_contract` is used for both `foo` and `bar` functions in
+    checking and replacement mode, respectively.
+Execution [SKIPPED]
+Test 'function-contract-mapping'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-enforce-warning-not-found.desc
+  Output: test-enforce-warning-not-found-non-dfcc.out
+  Options: --malloc-may-fail --malloc-fail-null --dfcc main --enforce-contract foo/my_contractt _ --pointer-check --pointer-primitive-check --pointer-overflow-check
+  Results:
+    ^Contract 'my_contractt' not found, deriving empty pure contract 'contract::my_contractt' from function 'foo'$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that we get a warning that a default contract is derived from the
+    signature of the function being checked when specifying a non-existing contract.
+Execution [SKIPPED]
+Test 'function-pointer-contracts-enforce'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --malloc-may-fail --malloc-fail-null --restrict-function-pointer foo.CALL/arr_fun_contract --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks that when a function taking a function pointer as input satisfying a given
+    contract is checked against its contract, the function pointer can be called
+    like a regular function pointer and establishes the post conditions specified
+    by its contract.
+Execution [SKIPPED]
+Test 'function-pointer-contracts-replace-1'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^\[main.assertion.\d+\].*assertion outfun1 == arr_fun_contract: SUCCESS$
+    ^\[main.assertion.\d+\].*assertion outfun2 == arr_fun_contract: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that, when replacing a call by its contract,
+    requires_contract clauses are translated to equality checks
+    and that ensures_contract are translated to assignments of the function pointer
+    variable to the contract symbol.
+Execution [SKIPPED]
+Test 'function-pointer-contracts-replace-2'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract bar --replace-call-with-contract foo --replace-call-with-contract get_arr_fun
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks that when a function returning a function pointer satisfying a given
+    contract is replaced by its contract, the returned function pointer can be
+    passed to another function requiring the same contract.
+Execution [SKIPPED]
+Test 'function-pointer-contracts-typecheck-error-1'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^.*error: expected 2 arguments for __CPROVER_obeys_contract, found 3$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that malformed __CPROVER_obeys_contract predicate expressions are rejected.
+Execution [SKIPPED]
+Test 'function-pointer-contracts-typecheck-error-2'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^.*error: the first argument of __CPROVER_obeys_contract must have no ternary operator$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that malformed __CPROVER_obeys_contract predicate expressions are rejected.
+Execution [SKIPPED]
+Test 'function-pointer-contracts-typecheck-error-3'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^.*error: the first argument of __CPROVER_obeys_contract must be a function pointer lvalue expression$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that malformed __CPROVER_obeys_contract predicate expressions are rejected.
+Execution [SKIPPED]
+Test 'function-pointer-contracts-typecheck-error-4'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^.*error: the first and second arguments of __CPROVER_obeys_contract must have the same function pointer type$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that malformed __CPROVER_obeys_contract predicate expressions are rejected.
+Execution [SKIPPED]
+Test 'function_apply_01'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^warning: ignoring
+    --
+    This code is purposely unsound (the function does not abide by its
+    contract). Verifying the function in isolation should fail, and
+    verifying its caller should succeed.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+^warning: ignoring [OK]
+
+Test 'function_check_01'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract min
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This tests a simple example of a function with requires and ensures which should both be satisfied.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract min 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+
+Test 'function_check_02'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract initialize
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Ensures statements currently do not allow quantified predicates unless the
+    function has void return type.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract initialize 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+
+Test 'function_check_03'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --check-code-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Loop invariants currently do not support memory reads in at least some
+    circumstances.
+Execution [SKIPPED]
+Test 'function_check_04'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-code-contracts
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.assertion.\d+\] .* assertion x == 0: SUCCESS$
+    ^\[foo.\d+\] .* : FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    --
+    --check-code-contracts not implemented yet.
+    --apply-code-contracts is the current name for the flag. This should be
+    updated as the flag changes.
+Execution [SKIPPED]
+Test 'function_check_05'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --check-code-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[main.assertion.\d+\] assertion y == 0: FAILURE$
+    ^\[main.assertion.\d+\] assertion z == 1: SUCCESS$
+    ^\[foo.\d+\] : SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Contract checking does not properly havoc function calls.
+Execution [SKIPPED]
+Test 'function_check_mem_01'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --check-code-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    CBMC currently does not support assumptions about pointers in the general way
+    that other assumptions are supported.
+Execution [SKIPPED]
+Test 'function_loop_history_ensures_fail'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^main.c.* error: __CPROVER_loop_entry is not allowed in postconditions.$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    This test ensures that __CPROVER_loop_entry cannot be used within ensures clause.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^main.c.* error: __CPROVER_loop_entry is not allowed in postconditions.$ [OK]
+^CONVERSION ERROR$ [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'function_loop_history_requires_fail'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract bar
+  Results:
+    ^main.c.* error: __CPROVER_loop_entry is not allowed in preconditions.$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    This test ensures that __CPROVER_loop_entry cannot be used within requires clause.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract bar 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^main.c.* error: __CPROVER_loop_entry is not allowed in preconditions.$ [OK]
+^CONVERSION ERROR$ [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'function_no_apply_01'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main 
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.assertion.1\] line 17 assertion x == 0: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    ^warning: ignoring
+    --
+    We don't actually replace the function call with its contract here, so
+    CBMC should notice that the program is unsound.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main  'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 10
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=10$ [OK]
+^SIGNAL=0$ [OK]
+^\[main.assertion.1\] line 17 assertion x == 0: FAILURE$ [OK]
+^VERIFICATION FAILED$ [OK]
+^warning: ignoring [OK]
+
+Test 'github_6168_infinite_unwinding_bug'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    ^\[main.loop_assigns.\d+\] line 15 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 15 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 15 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 15 Check step was unwound for loop .*: SUCCESS$
+    --
+    --
+    This is guarding against an issue described in https://github.com/diffblue/cbmc/issues/6168.
+Execution [SKIPPED]
+Test 'havoc-conditional-target'
+  Level: CORE
+  Input: check-foo.c
+  Descriptor: check-foo.desc
+  Output: check-foo-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo _ --pointer-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks conditional havocs are behaving as expected.
+Execution [SKIPPED]
+Test 'havoc-conditional-target'
+  Level: KNOWNBUG
+  Input: replace-foo.c
+  Descriptor: replace-foo.desc
+  Output: replace-foo-non-dfcc.out
+  Options: --dfcc main --enforce-contract bar --replace-call-with-contract foo _ --pointer-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks conditional havocs are behaving as expected.
+Execution [SKIPPED]
+Test 'havoc-static'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-exclude.desc
+  Output: test-exclude-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo --nondet-static-exclude main.c:a --nondet-static-exclude main.c:c
+  Results:
+    ^\[foo.assertion.\d+\].* guarded by a: SUCCESS$
+    ^\[foo.assertion.\d+\].* guarded by b: SUCCESS$
+    ^\[foo.assertion.\d+\].* guarded by c: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks that we can exclude some statics from havocing.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo --nondet-static-exclude main.c:a --nondet-static-exclude main.c:c 'main.c' >'test-exclude-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^\[foo.assertion.\d+\].* guarded by a: SUCCESS$ [OK]
+^\[foo.assertion.\d+\].* guarded by b: SUCCESS$ [OK]
+^\[foo.assertion.\d+\].* guarded by c: SUCCESS$ [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+
+Test 'havoc-static'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^\[foo.assertion.\d+\].* guarded by a: FAILURE$
+    ^\[foo.assertion.\d+\].* guarded by b: SUCCESS$
+    ^\[foo.assertion.\d+\].* guarded by c: FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Checks that statics are havoced when using contracts, 
+    unless they are marked const.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 10
+  Signal: 0
+  Core: 0
+Execution [OK]
+^\[foo.assertion.\d+\].* guarded by a: FAILURE$ [OK]
+^\[foo.assertion.\d+\].* guarded by b: SUCCESS$ [OK]
+^\[foo.assertion.\d+\].* guarded by c: FAILURE$ [OK]
+^EXIT=10$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION FAILED$ [OK]
+
+Test 'history-constant'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^Tracking history of constant expressions is not supported yet
+    --
+    This test checks that history variables are supported for constant expressions.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+^Tracking history of constant expressions is not supported yet [OK]
+
+Test 'history-index'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^Tracking history of index expressions is not supported yet\.
+    --
+    This test checks that `ID_index` expressions are allowed within history variables.
+Execution [SKIPPED]
+Test 'history-invalid'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc --apply-loop-contracts
+  Results:
+    ^main.c.* error: Tracking history of side_effect expressions is not supported yet.$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    This test ensures that expressions with side effect, such as function calls,
+    may not be used in history variables.
+Execution [SKIPPED]
+Test 'history-pointer-both-01'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo --replace-call-with-contract bar
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that history variables are supported for parameters of the
+    the function under test. By using the --enforce-contract flag,
+    the post-condition (which contains the history variable) is asserted.
+    In this case, this assertion should pass.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo --replace-call-with-contract bar 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+
+Test 'history-pointer-enforce-01'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Verification:
+    This test checks that history variables are supported for parameters of the
+    the function under test. By using the --enforce-contract flag,
+    the post-condition (which contains the history variable) is asserted.
+    In this case, this assertion should pass.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+
+Test 'history-pointer-enforce-02'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Verification:
+    This test checks that history variables are supported for parameters of the
+    the function under test. By using the --enforce-contract flag,
+    the post-condition (which contains the history variable) is asserted.
+    In this case, this assertion should fail.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 10
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=10$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION FAILED$ [OK]
+
+Test 'history-pointer-enforce-03'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    ASSERT .*::tmp_if_expr\$\d
+    --
+    --
+    Verification:
+    This test checks that history variables are supported in the case where a
+    history variable is referred to multiple times within an ensures clause.
+    By using the --enforce-contract flag, the post-condition (which contains
+    the history variable) is asserted. In this case, this assertion should pass.
+Execution [SKIPPED]
+Test 'history-pointer-enforce-04'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    ASSERT .*::tmp_if_expr
+    --
+    --
+    Verification:
+    This test checks that history variables are supported in the case where the
+    function under test has multiple parameters. By using the
+    --enforce-contract flag, the post-condition (which contains the history
+    variables) is asserted. In this case, this assertion should pass.
+Execution [SKIPPED]
+Test 'history-pointer-enforce-05'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    ASSERT .*::tmp_if_expr
+    --
+    --
+    Verification:
+    This test checks that history variables are supported in the case where the
+    function under test has multiple parameters. By using the
+    --enforce-contract flag, the post-condition (which contains the history
+    variables) is asserted. In this case, this assertion should fail.
+Execution [SKIPPED]
+Test 'history-pointer-enforce-06'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    warning: ignoring old
+    --
+    --
+    Verification:
+    This test checks that history variables are not supported when referred to from
+    a function body. In such a case, verification should fail.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 10
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=10$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION FAILED$ [OK]
+warning: ignoring old [OK]
+
+Test 'history-pointer-enforce-07'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    ^CONVERSION ERROR$
+    error: failed to find symbol 'y'
+    --
+    --
+    Verification:
+    This test checks that history variables may only be used with existing
+    symbols. In other words, including a new symbol as part of __CPROVER_old()
+    is not alowed. In such a case, the program should not parse and there
+    should be a conversion error.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+^CONVERSION ERROR$ [OK]
+error: failed to find symbol 'y' [OK]
+
+Test 'history-pointer-enforce-08'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Verification:
+    This test checks that history variables are supported for dereferences over
+    pointers to struct members. By using the --enforce-contract flag, the
+    post-condition (which contains the history variable) is asserted. In this
+    case, this assertion should pass.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+
+Test 'history-pointer-enforce-09'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[foo.postcondition.\d+\] line \d+ Check ensures clause( of contract contract::foo for function foo)?: SUCCESS$
+    ^\[foo.assigns.\d+\] line \d+ Check that p->y is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that history variables are supported for struct members.
+    By using the --enforce-contract flag, the post-condition (which contains
+    the history variable) is asserted. In this case, this assertion should pass.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^\[foo.postcondition.\d+\] line \d+ Check ensures clause( of contract contract::foo for function foo)?: SUCCESS$ [OK]
+^\[foo.assigns.\d+\] line \d+ Check that p->y is assignable: SUCCESS$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+
+Test 'history-pointer-enforce-10'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-bar.desc
+  Output: test-bar-non-dfcc.out
+  Options: --dfcc main --enforce-contract bar
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[bar.postcondition.\d+\] line \d+ Check ensures clause of contract contract::bar for function bar: SUCCESS$
+    ^\[bar.assigns.\d+\] line \d+ Check that p->y is assignable: SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion \*\(p->y\) == 7: SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion \*\(p->y\) == -1: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that history variables are supported for structs, symbols, and
+    struct members. By using the --enforce-contract flag, the postcondition
+    (with history variable) is asserted. In this case, this assertion should pass.
+    Note: A function is always authorized to assign the variables that store
+    its arguments, there is no need to mention them in the assigns clause.
+Execution [SKIPPED]
+Test 'history-pointer-enforce-10'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-baz.desc
+  Output: test-baz-non-dfcc.out
+  Options: --dfcc main --enforce-contract baz
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[baz.postcondition.\d+\] line \d+ Check ensures clause of contract contract::baz for function baz: SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion \*\(p->y\) == 7: SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion \*\(p->y\) == -1: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that history variables are supported for structs, symbols, and
+    struct members. By using the --enforce-contract flag, the postcondition
+    (with history variable) is asserted. In this case, this assertion should pass.
+    Note: A function is always authorized to assign the variables that store
+    its arguments, there is no need to mention them in the assigns clause.
+Execution [SKIPPED]
+Test 'history-pointer-enforce-10'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-foo.desc
+  Output: test-foo-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[foo.postcondition.\d+\] line \d+ Check ensures clause of contract contract::foo for function foo: SUCCESS$
+    ^\[foo.assigns.\d+\] line \d+ Check that \*p->y is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line \d+ Check that z is assignable: SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion \*\(p->y\) == 7: SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion \*\(p->y\) == -1: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that history variables are supported for structs, symbols, and
+    struct members. By using the --enforce-contract flag, the postcondition
+    (with history variable) is asserted. In this case, this assertion should pass.
+    Note: A function is always authorized to assign the variables that store
+    its arguments, there is no need to mention them in the assigns clause.
+Execution [SKIPPED]
+Test 'history-pointer-enforce-11'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[postcondition.\d+\] Check ensures clause: SUCCESS$
+    ^\[foo.\d+\] line \d+ Check that p->y is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that history variables handle NULL pointers.
+    History variables currently do not check for nullness while
+    storing values of objects, which may lead to NULL pointer dereferences.
+Execution [SKIPPED]
+Test 'history-pointer-replace-01'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^\[foo.precondition.\d+\].*Check requires clause of contract contract::foo for function foo: SUCCESS$
+    ^\[main.assertion.\d+\].*assertion x == old_x \+ 1: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Verification:
+    This test checks that history variables are supported with the use of the
+    --replace-call-with-contract flag.
+    We check that the contracts preconditions are satisfied and that post conditions
+    involving history variables are established after replacement by checking
+    them at the call site using a manual assertion.
+Execution [SKIPPED]
+Test 'history-pointer-replace-02'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^\[foo.precondition.\d+\].*Check requires clause of contract contract::foo for function foo: SUCCESS$
+    ^\[main.assertion.\d+\].*assertion x >= old_x: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Verification:
+    This test checks that history variables are supported with the use of the
+    --replace-call-with-contract flag.
+    
+Execution [SKIPPED]
+Test 'history-pointer-replace-03'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^main.c.* error: __CPROVER_old is not allowed in preconditions.$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that history variables cannot be used as part of the
+    pre-condition (requires) contract.
+Execution [SKIPPED]
+Test 'history-pointer-replace-04'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^\[foo.precondition.\d+\] line \d+ Check requires clause of contract contract::foo for function foo: SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion p.y == old_y \+ 1: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that history variables are supported for struct members.
+    We use the --replace-call-with-contract flag and use a manual assertion
+    assertion in main to show that post conditions are established when replacing
+    the call by the contract.
+Execution [SKIPPED]
+Test 'history-typecast'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract bar --enforce-contract foo 
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^Tracking history of typecast expressions is not supported yet
+    --
+    This test checks that history variables are supported for typecast expressions.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract bar --enforce-contract foo  'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+^Tracking history of typecast expressions is not supported yet [OK]
+
+Test 'ignored_return_value'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract get_at_idx
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^warning: ignoring
+    --
+    This test exposes a bug where CBMC would crash on a program where a function
+    with a return value has a postcondition that mentions __CPROVER_return_value,
+    but the caller does not assign the return value to anything.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract get_at_idx 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+^warning: ignoring [OK]
+
+Test 'invar_assigns_empty'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 5 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 5 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 5 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 5 Check step was unwound for loop .*: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that empty assigns clause is supported 
+    in loop contracts.
+Execution [SKIPPED]
+Test 'invar_assigns_opt'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[foo.loop_assigns.\d+\] line 12 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[foo.loop_invariant_base.\d+\] line 12 Check invariant before entry for loop .*: SUCCESS$
+    ^\[foo.loop_invariant_step.\d+\] line 12 Check invariant after step for loop .*: SUCCESS$
+    ^\[foo.loop_step_unwinding.\d+\] line 12 Check step was unwound for loop .*: SUCCESS$
+    ^\[foo.loop_decreases.\d+\] line 12 Check variant decreases after step for loop .*: SUCCESS$
+    ^\[foo.loop_assigns.\d+\] line 22 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[foo.loop_assigns.\d+\] line 22 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[foo.loop_invariant_base.\d+\] line 22 Check invariant before entry for loop .*: SUCCESS$
+    ^\[foo.loop_invariant_base.\d+\] line 22 Check invariant before entry for loop .*: SUCCESS$
+    ^\[foo.loop_invariant_step.\d+\] line 22 Check invariant after step for loop .*: SUCCESS$
+    ^\[foo.loop_step_unwinding.\d+\] line 22 Check step was unwound for loop .*: SUCCESS$
+    ^\[foo.loop_decreases.\d+\] line 22 Check variant decreases after step for loop .*: SUCCESS$
+    ^\[foo.assertion.\d+\] .* assertion r1 == 0: SUCCESS$
+    ^\[foo.assigns.\d+\] .* Check that s2 is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] .* Check that r2 is assignable: SUCCESS$
+    ^\[foo.assertion.\d+\] .* assertion r2 == 0: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that adding assigns clause is optional
+    and that if a proof does not require it, then adding an
+    appropriate assigns clause does not lead to any 
+    unexpected behavior. 
+Execution [SKIPPED]
+Test 'invar_check_break_fail'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.loop_invariant_base.\d+\] line 8 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 8 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 8 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that r is assignable: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion r == 0: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    This test is expected to fail along the code path where r is an even integer
+    before entering the loop.
+    The program is simply incompatible with the desired property in this case --
+    there is no loop invariant that can establish the required assertion.
+Execution [SKIPPED]
+Test 'invar_check_break_pass'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[main.loop_invariant_base.\d+\] line 8 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 8 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 8 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_decreases.\d+\] line 8 Check variant decreases after step for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that r is assignable: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion r == 0 || r == 1: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    This test checks that conditionals and `break` are correctly handled.
+Execution [SKIPPED]
+Test 'invar_check_continue'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 8 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 8 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 8 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 8 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_decreases.\d+\] line 8 Check variant decreases after step for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that r is assignable: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion r == 0: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    This test checks that conditionals and `continue` are correctly handled.
+Execution [SKIPPED]
+Test 'invar_check_large'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 24 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 24 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 24 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 24 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_decreases.\d+\] line 24 Check variant decreases after step for loop .*: SUCCESS$
+    ^\[main.assertion.1\] .* assertion 0 <= r && r < 5: SUCCESS$
+    ^\[main.assertion.2\] .* assertion \*\(arr\[r\]\) == pivot: SUCCESS$
+    ^\[main.assertion.3\] .* assertion 0 < r ==> arr0 <= pivot: SUCCESS$
+    ^\[main.assertion.4\] .* assertion 1 < r ==> arr1 <= pivot: SUCCESS$
+    ^\[main.assertion.5\] .* assertion 2 < r ==> arr2 <= pivot: SUCCESS$
+    ^\[main.assertion.6\] .* assertion 3 < r ==> arr3 <= pivot: SUCCESS$
+    ^\[main.assertion.7\] .* assertion 4 < r ==> arr4 <= pivot: SUCCESS$
+    ^\[main.assertion.8\] .* assertion 0 > r ==> arr0 >= pivot: SUCCESS$
+    ^\[main.assertion.9\] .* assertion 1 > r ==> arr1 >= pivot: SUCCESS$
+    ^\[main.assertion.10\] .* assertion 2 > r ==> arr2 >= pivot: SUCCESS$
+    ^\[main.assertion.11\] .* assertion 3 > r ==> arr3 >= pivot: SUCCESS$
+    ^\[main.assertion.12\] .* assertion 4 > r ==> arr4 >= pivot: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    This test checks the invariant contracts on a larger problem --- in this case,
+    the partition function of quicksort, applied to a fixed-length array.
+    This serves as a stop-gap test until issues to do with quantifiers and
+    side-effects in loop invariants are fixed.
+Execution [SKIPPED]
+Test 'invar_check_multiple_loops'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 8 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 8 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 8 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 8 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_decreases.\d+\] line 8 Check variant decreases after step for loop .*: SUCCESS$
+    ^\[main.loop_assigns.\d+\] line 17 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 17 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 17 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 17 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_decreases.\d+\] line 17 Check variant decreases after step for loop .*: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion x == y \+ 2 \* n: SUCCESS$
+    ^\[main.assigns.\d+\] line 8 Check that r is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] line 15 Check that x is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] line 23 Check that y is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] line 24 Check that r is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    This test checks that multiple loops and `for` loops are correctly handled.
+Execution [SKIPPED]
+Test 'invar_check_nested_loops'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 8 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 8 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 8 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 8 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_decreases.\d+\] line 8 Check variant decreases after step for loop .*: SUCCESS$
+    ^\[main.loop_assigns.\d+\] line 17 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 17 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 17 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 17 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_decreases.\d+\] line 17 Check variant decreases after step for loop .*: SUCCESS$
+    ^\[main\.assigns\.\d+\].*line 23 Check that s is assignable: SUCCESS$
+    ^\[main\.assigns\.\d+\].*line 24 Check that a is assignable: SUCCESS$
+    ^\[main\.assigns\.\d+\].*line 27 Check that s is assignable: SUCCESS$
+    ^\[main\.assertion.\d+\] .* assertion s == n: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    This test checks that nested loops, `for` loops,
+    and loop-local declarations of the index variable are correctly handled.
+Execution [SKIPPED]
+Test 'invar_check_pointer_modifies-01'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts --pointer-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 10 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 10 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 10 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 10 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_decreases.\d+\] line 10 Check variant decreases after step for loop .*: SUCCESS$
+    ^\[main.assigns.\d+] .* Check that \*data is assignable: SUCCESS$
+    ^\[main.assigns.\d+] .* Check that i is assignable: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion \*data = 42: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^\[main.pointer_dereference.*\] line .* dereference failure: pointer NULL in \*data: FAILURE
+    --
+    This test checks that modifications to deref-ed pointers are correctly handled.
+    In such cases, pointers should not be havoc'ed, only the value should be.
+Execution [SKIPPED]
+Test 'invar_check_pointer_modifies-02'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts --pointer-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 12 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 12 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 12 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 12 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_decreases.\d+\] line 12 Check variant decreases after step for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that \*data is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that i is assignable: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion data == copy: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion \*copy = 42: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^\[main.pointer_dereference.*\] line .* dereference failure: pointer NULL in \*data: FAILURE
+    --
+    This test checks that modifications to aliased pointers are correctly handled.
+Execution [SKIPPED]
+Test 'invar_check_sufficiency'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 8 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 8 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 8 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 8 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_decreases.\d+\] line 8 Check variant decreases after step for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that r is assignable: SUCCESS$
+    ^\[main\.assertion\.1\] .* assertion r == 0: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    This test checks that a loop invariant can be proven to be inductive,
+    and is used in conjunction with the negation of the loop guard
+    to establish the postcondition.
+Execution [SKIPPED]
+Test 'invar_dynamic_struct_member'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 12 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 12 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 12 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 12 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that i is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] line 22 Check that t->x is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] line 25 Check that t->x is assignable: SUCCESS$
+    ^\[main.assertion.\d+\] line 29 assertion .*: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test checks that  members of typedef'd and dynamically allocated structs
+    are correctly havoced when enforcing loop invariants.
+    The assertion is expected to fail when `t->x` is correctly havoced (so would be
+    set to a nondet value).
+    However, it `t->x` is not havoced then it stays at value `0` and would satisfy
+    the assertion when the loop is replaced by a single nondet iteration.
+    
+Execution [SKIPPED]
+Test 'invar_function-old_fail'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^main.c.* error: __CPROVER_old is not allowed in loop invariants.$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    This test ensures that __CPROVER_old cannot be used within loop contracts. 
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --apply-loop-contracts 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^main.c.* error: __CPROVER_old is not allowed in loop invariants.$ [OK]
+^CONVERSION ERROR$ [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'invar_havoc_dynamic_array'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 11 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 11 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 11 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 11 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that i is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that data\[\(signed long (long )?int\)i\] is assignable: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion data\[5\] == 0: FAILURE$
+    ^\[main\.assertion\.\d+\] .* assertion data\[5\] == 1: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Test case related to issue #6020: it checks that dynamically allocated arrays
+    are correctly havoced when enforcing loop invariant contracts.
+    The `data[5] == 0` assertion is expected to fail since `data` is havoced.
+    The `data[5] == 1` assertion is also expected to fail since the invariant does
+    not reestablish the value for `data[5]`.
+Execution [SKIPPED]
+Test 'invar_havoc_dynamic_array_const_idx'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 12 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 12 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 12 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 12 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that i is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that data\[\(signed long (long )?int\)1\] is assignable: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion data\[1\] == 0 \|\| data\[1\] == 1: FAILURE$
+    ^\[main\.assertion\.\d+\] .* assertion data\[4\] == 0: SUCCESS$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Test case related to issue #6020: it checks that dynamically allocated arrays
+    are correctly havoced when enforcing loop invariant contracts.
+    The `data[1] == 0 || data[1] == 1` assertion is expected to fail since `data[1]`
+    is havoced and the invariant does not reestablish the value of `data[1]`.
+    However, the `data[4] == 0` assertion is expected to pass -- we should not havoc
+    the entire `data` array, if only a constant index if being modified.
+Execution [SKIPPED]
+Test 'invar_havoc_dynamic_multi-dim_array'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.1\] .* Check loop invariant before entry: SUCCESS$
+    ^\[main.2\] .* Check that loop invariant is preserved: SUCCESS$
+    ^\[main.assertion.1\] .* assertion __CPROVER_same_object(old_data123, &(data\[1\]\[2\]\[3\])): SUCCESS$
+    ^\[main.assertion.2\] .* assertion data\[1\]\[2\]\[3\] == 0: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Test case related to issue #6020: it checks that dynamically allocated multi
+    dimensional arrays are correctly havoced when enforcing invariant contracts.
+    
+    The `__CPROVER_same_object(old_data123, &(data[1][2][3]))` assertion is expected
+    to pass -- we should not mistakenly havoc the allocations, just their values.
+    However, the `data[1][2][3] == 0` assertion is expected to fail since `data`
+    is havoced.
+    
+    Blocked on #6326:
+    The assigns clause in this case would have an entire 3D space,
+    and some of it must be re-established, to the original objects
+    but with different values at certain locations, by the loop invariant.
+    However, currently we cannot restrict same_object for pointers
+    within loop invariants.
+Execution [SKIPPED]
+Test 'invar_havoc_dynamic_multi-dim_array_all_const_idx'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 19 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 19 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 19 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 19 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that i is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that data\[(.*)4\]\[(.*)5\]\[(.*)6\] is assignable: SUCCESS$
+    ^\[main.assertion.\d+\] .* assertion data\[4\]\[5\]\[6\] == 0: FAILURE$
+    ^\[main.assertion.\d+\] .* assertion data\[1\]\[2\]\[3\] == 0: SUCCESS$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Test case related to issue #6020: it checks that dynamically allocated multi
+    dimensional arrays are correctly havoced when enforcing invariant contracts.
+    
+    The `data[4][5][6] == 0` assertion is expected to fail since `data[4][5][6]`
+    is havoced and the invariant does not reestablish its value.
+    However, the `data[1][2][3] == 0` assertion is expected to pass -- we should
+    not havoc the entire `data` array, if only a constant index if being modified.
+Execution [SKIPPED]
+Test 'invar_havoc_dynamic_multi-dim_array_partial_const_idx'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.1\] .* Check loop invariant before entry: SUCCESS$
+    ^\[main.2\] .* Check that loop invariant is preserved: SUCCESS$
+    ^\[main.assertion.1\] .* assertion data\[1\]\[2\]\[3\] == 0: FAILURE$
+    ^\[main.assertion.2\] .* assertion data\[4\]\[5\]\[6\] == 0: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Test case related to issue #6020: it checks that dynamically allocated multi
+    dimensional arrays are correctly havoced when enforcing invariant contracts.
+    
+    Here, both assertions are expected to fail -- the entire `data` array should
+    be havoced since we are assigning to a non-constant index.
+    We _could_ do a more precise analysis in future where we only havoc
+    `data[4][5][6]` but not `data[1][2][3]` since the latter clearly cannot be
+    modified in the given loop.
+    
+    Blocked on #6326:
+    The assigns clause in this case would have an entire 2D grid,
+    and some of it must be re-established, to the original objects
+    but with different values at certain locations, by the loop invariant.
+    However, currently we cannot restrict same_object for pointers
+    within loop invariants.
+Execution [SKIPPED]
+Test 'invar_havoc_static_array'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 11 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 11 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 11 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 11 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that i is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that data\[\(signed long (long )?int\)i\] is assignable: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion data\[5\] == 0: FAILURE$
+    ^\[main\.assertion\.\d+\] .* assertion data\[5\] == 1: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Test case related to issue #6020: it checks that arrays are correctly havoced
+    when enforcing loop invariant contracts.
+    The `data[5] == 0` assertion is expected to fail since `data` is havoced.
+    The `data[5] == 1` assertion is also expected to fail since the invariant does
+    not reestablish the value for `data[5]`.
+Execution [SKIPPED]
+Test 'invar_havoc_static_array_const_idx'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 12 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 12 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 12 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 12 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that i is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that data\[\(signed long (long )?int\)1\] is assignable: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion data\[1\] == 0 \|\| data\[1\] == 1: FAILURE$
+    ^\[main\.assertion\.\d+\] .* assertion data\[4\] == 0: SUCCESS$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Test case related to issue #6020: it checks that arrays are correctly havoced
+    when enforcing loop invariant contracts.
+    The `data[1] == 0 || data[1] == 1` assertion is expected to fail since `data[1]`
+    is havoced and the invariant does not reestablish the value of `data[1]`.
+    However, the `data[4] == 0` assertion is expected to pass -- we should not havoc
+    the entire `data` array, if only a constant index if being modified.
+Execution [SKIPPED]
+Test 'invar_havoc_static_multi-dim_array'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 13 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 13 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 13 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 13 Check step was unwound for loop .*: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion __CPROVER_same_object\(old_data123, &\(data\[1\]\[2\]\[3\]\)\): SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion data\[1\]\[2\]\[3\] == 0: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Test case related to issue #6020: it checks that multi dimensional arrays
+    are correctly havoced when enforcing invariant contracts.
+    
+    The `__CPROVER_same_object(old_data123, &(data[1][2][3]))` assertion is expected
+    to pass -- we should not mistakenly havoc the allocations, just their values.
+    However, the `data[1][2][3] == 0` assertion is expected to fail since `data`
+    is havoced.
+Execution [SKIPPED]
+Test 'invar_havoc_static_multi-dim_array_all_const_idx'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 13 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 13 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 13 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 13 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that data\[\(signed long (long )?int\)4\]\[\(signed long (long )?int\)5\]\[\(signed long (long )?int\)6\] is assignable: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion data\[4\]\[5\]\[6\] == 0: FAILURE$
+    ^\[main\.assertion\.\d+\] .* assertion data\[1\]\[2\]\[3\] == 0: SUCCESS$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Test case related to issue #6020: it checks that multi dimensional arrays
+    are correctly havoced when enforcing invariant contracts.
+    
+    The `data[4][5][6] == 0` assertion is expected to fail since `data[4][5][6]`
+    is havoced and the invariant does not reestablish its value.
+    However, the `data[1][2][3] == 0` assertion is expected to pass -- we should
+    not havoc the entire `data` array, if only a constant index if being modified.
+Execution [SKIPPED]
+Test 'invar_havoc_static_multi-dim_array_partial_const_idx'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 13 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 13 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 13 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 13 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that i is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that data\[\(signed long (long )?int\)4\]\[\(signed long (long )?int\)i\]\[\(signed long (long )?int\)6\] is assignable: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion data\[1\]\[2\]\[3\] == 0: FAILURE$
+    ^\[main\.assertion\.\d+\] .* assertion data\[4\]\[5\]\[6\] == 0: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Test case related to issue #6020: it checks that multi dimensional arrays
+    are correctly havoced when enforcing invariant contracts.
+    
+    Here, both assertions are expected to fail -- the entire `data` array should
+    be havoced since we are assigning to a non-constant index.
+    We _could_ do a more precise analysis in future where we only havoc
+    `data[4][5][6]` but not `data[1][2][3]` since the latter clearly cannot be
+    modified in the given loop.
+Execution [SKIPPED]
+Test 'invar_loop-entry_check'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts _ --pointer-primitive-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+] line 14 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+] line 14 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+] line 14 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+] line 14 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_assigns.\d+] line 26 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+] line 26 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+] line 26 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+] line 26 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_assigns.\d+] line 40 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+] line 40 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+] line 40 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+] line 40 Check step was unwound for loop .*: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion \*x1 == z1: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion x2 == z2: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that y1 is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] line 18 Check that \*x1 is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] line 19 Check that \*x1 is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that y2 is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] line 30 Check that x2 is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] line 31 Check that x2 is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that y3 is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that s0\.n is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that s2->n is assignable: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion \*\(s1\.n\) == \*\(s2->n\): SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that __CPROVER_loop_entry is supported.
+Execution [SKIPPED]
+Test 'invar_loop-entry_fail'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=(10|6)$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+] line 8 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+] line 8 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+] line 8 Check invariant after step for loop .*: FAILURE$
+    ^\[main.loop_step_unwinding.\d+] line 8 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] line 11 Check that y is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] line 12 Check that x is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] line 13 Check that x is assignable: SUCCESS$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test ensures that __CPROVER_loop_entry violations are checked.
+Execution [SKIPPED]
+Test 'invar_loop_constant_fail'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 8 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_assigns.\d+\] line 8 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 8 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 8 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 8 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 8 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that s is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that r is assignable: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion r == 0: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion s == 1: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    This test is expected to fail because it modifies a variable within a loop,
+    but attempts to check that it is "effectively constant" without asserting so
+    within the loop invariant.
+    The current implementation of `check_apply_invariant` correctly havocs all
+    variables that are modified within the loop.
+    The fact that a variable is "effectively constant" within a loop must be
+    established using an appropriate clause in the invariant.
+Execution [SKIPPED]
+Test 'invar_loop_constant_no_modify'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 8 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 8 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 8 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 8 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_decreases.\d+\] line 8 Check variant decreases after step for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that r is assignable: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion r == 0: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion s == 1: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    This test checks that variables that are not modified within the loop
+    are not unnecessarily havoced by `check_apply_invariant`.
+Execution [SKIPPED]
+Test 'invar_loop_constant_pass'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 7 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 7 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 7 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 7 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_decreases.\d+\] line 7 Check variant decreases after step for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that s is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that r is assignable: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion r == 0: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion s == 1: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    This test checks that the invariant is correctly used to satisfy
+    all assertions that follow a loop.
+Execution [SKIPPED]
+Test 'invar_loop_constant_pass'
+  Level: CORE
+  Input: main.c
+  Descriptor: test_unwind.desc
+  Output: test_unwind-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts --unwind 1 --unwinding-assertions
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 7 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 7 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 7 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 7 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_decreases.\d+\] line 7 Check variant decreases after step for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that s is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that r is assignable: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion r == 0: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion s == 1: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    This test checks that there is no loop after contract transformation.
+Execution [SKIPPED]
+Test 'invar_struct_member'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 12 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 12 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 12 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 12 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\].* Check that i is assignable: SUCCESS$
+    ^\[main.assigns.\d+\].* Check that t\.x is assignable: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion t.x == 0 || t.x == 2: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test checks that members of statically allocated are correctly havoced
+    when enforcing loop invariants.
+    The `t.x == 0 || t.x == 2` assertion is expected to fail when `t.x` is correctly
+    havoced (so would be set to a nondet value).
+    However, it `t.x` is not havoced then it stays at value `0` and would satisfy
+    the assertion when the loop is replaced by a single nondet iteration.
+Execution [SKIPPED]
+Test 'invariant_side_effects'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[main.loop_invariant_base.\d+\] line 9 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 9 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 9 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 9 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_decreases.\d+\] line 9 Check variant decreases after step for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that \*a is assignable: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion \*a == N: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    This test checks that C expressions are correctly converted to logic
+    when enforcing loop invariant annotations.
+Execution [SKIPPED]
+Test 'is_fresh_indirect_calls'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^\[main.assertion.\d+\].*c is rw_ok: SUCCESS$
+    ^\[main.assertion.\d+\].*c and a are distinct: SUCCESS$
+    ^\[main.assertion.\d+\].*c and b are distinct: SUCCESS$
+    ^\[main.assertion.\d+\].*d is rw_ok: SUCCESS$
+    ^\[main.assertion.\d+\].*d and a are distinct: SUCCESS$
+    ^\[main.assertion.\d+\].*d and b are distinct: SUCCESS$
+    ^\[main.assertion.\d+\].*d and c distinct: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that the interpretation of is_fresh predicates is 
+    local to a call. `bar` is called twice with the same arguments.
+    `bar` calls `foo` so `foo` also gets called twice with the same arguments.
+    The is_fresh preconditions of `foo` are checked and satisfied independently
+    for each call.
+    This shows that the memory_map which keeps track of objects seen by the 
+    is_fresh predicates and the input and output of a function call is local to
+    that function call.
+Execution [SKIPPED]
+Test 'is_unique_01_replace'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test shows that replacing a call by a contract establishes the
+    postconditions of the contracts.
+Execution [SKIPPED]
+Test 'labeled_loop_head'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 7 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 7 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 7 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 7 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that x is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks transformed loop won't be skipped by a jump to the loop head.
+Execution [SKIPPED]
+Test 'loop-freeness-check'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^\[foo.assigns.\d+\].*Check that i is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\].*Check that arr\[\(.*\)i\] is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that program with loops can be instrumented and that
+    loops can be automatically unwound by cbmc in a second step, with the
+    instrumentation scaling automatically.
+Execution [SKIPPED]
+Test 'loop_assigns-01'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[foo.loop_assigns.\d+\] line 22 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[foo.loop_invariant_base.\d+\] line 22 Check invariant before entry for loop .*: SUCCESS$
+    ^\[foo.loop_invariant_step.\d+\] line 22 Check invariant after step for loop .*: SUCCESS$
+    ^\[foo.loop_step_unwinding.\d+\] line 22 Check step was unwound for loop .*: SUCCESS$
+    ^\[foo.assigns.\d+\] .* Check that i is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] .* Check that b->data\[(.*)i\] is assignable: SUCCESS$
+    ^\[foo.assertion.\d+\] .* assertion b->data\[5\] == 0: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test (taken from #6021) shows the need for assigns clauses on loops.
+    The alias analysis in this case returns `unknown`,
+    and so we must manually annotate an assigns clause on the loop.
+Execution [SKIPPED]
+Test 'loop_assigns-02'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 17 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 17 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 17 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 17 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that i is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that b->data\[(.*)i\] is assignable: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test (taken from #6021) shows the need for assigns clauses on loops.
+    The alias analysis in this case returns `unknown`,
+    and so we must manually annotate an assigns clause on the loop.
+    
+    Note that the annotated assigns clause in this case us an underapproximation,
+    per the current semantics of the assigns clause -- it must model ALL memory
+    being assigned to by the loop, not just a single symbolic iteration so we expect
+    this to fail.
+Execution [SKIPPED]
+Test 'loop_assigns-03'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 17 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 17 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 17 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 17 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that i is assignable: FAILURE$
+    ^\[main.assigns.\d+\] .* Check that b->data\[(.*)i\] is assignable: SUCCESS$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test (taken from #6021) shows the need for assigns clauses on loops.
+    The alias analysis in this case returns `unknown`,
+    and so we must manually annotate an assigns clause on the loop.
+    
+    Note that the annotated assigns clause in this case is an underapproximation,
+    because `i` is also assigned in the loop and should be marked as assignable.
+Execution [SKIPPED]
+Test 'loop_assigns-04'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 18 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 18 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 18 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 18 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_assigns.\d+\] line 27 Check assigns clause inclusion for loop .*: FAILURE$
+    ^\[main.loop_invariant_base.\d+\] line 27 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 27 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 27 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that i is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that j is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that b->data\[(.*)i\] is assignable: SUCCESS$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test (taken from #6021) shows the need for assigns clauses on loops.
+    The alias analysis in this case returns `unknown`,
+    and so we must manually annotate an assigns clause on the loop.
+    
+    Note that the annotated assigns clause in this case is an underapproximation,
+    because `y` is also assigned in the loop and should be marked as assignable.
+Execution [SKIPPED]
+Test 'loop_assigns-05'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[body_1.assigns.\d+\] .* Check that j is assignable: SUCCESS$
+    ^\[body_2.assigns.\d+\] .* Check that \*i is assignable: SUCCESS$
+    ^\[body_3.assigns.\d+\] .* Check that \*i is assignable: SUCCESS$
+    ^\[incr.assigns.\d+\] .* Check that \*i is assignable: SUCCESS$
+    ^\[main.loop_assigns.\d+\] line 43 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 43 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 43 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 43 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assertion.\d+\] .* assertion j == 9: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks write set inclusion checks in presence of function calls,
+    which are inlined, and also checks that DEAD instructions introduced during
+    inlining is correctly handled.
+Execution [SKIPPED]
+Test 'loop_assigns-fail'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^\[main.assigns.\d+\] line 20 Check that b->data\[\(.*\)i\] is assignable: FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test shows the need for assigns clauses on loops. The assigns the local may
+    alias analysis cannot identify the target of `b->data\[\(.*\)i\]` and assigns
+    clause inference computes an incomplete set of targets,
+    which makes the analysis fail with an assigns clause violation.
+Execution [SKIPPED]
+Test 'loop_assigns-slice-assignable-ptr'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 24 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 24 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 24 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 24 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that i is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that b->data is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that \*b->data is assignable: SUCCESS$
+    ^\[main.assertion.\d+\] .* assertion b->data == start: SUCCESS$
+    ^\[main.assertion.\d+\] .* assertion start <= b->data && b->data <= end: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that __CPROVER_typed_target(ptr) is supported in loop contracts
+    for pointer typed targets and gets translated to
+    __CPROVER_assignable(address_of(ptr), sizeof(ptr), TRUE).
+Execution [SKIPPED]
+Test 'loop_assigns-slice-assignable-scalar'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 21 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 21 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 21 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 21 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that i is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that b->data\[\(.*\)0\] is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that b->data\[\(.*\)i\] is assignable: FAILURE$
+    ^\[main.assertion.\d+\] .* assertion b->data\[0\] == 0: FAILURE$
+    ^\[main.assertion.\d+\] .* assertion b->data\[1\] == 0: SUCCESS$
+    ^\[main.assertion.\d+\] .* assertion b->data\[2\] == 0: SUCCESS$
+    ^\[main.assertion.\d+\] .* assertion b->data\[3\] == 0: SUCCESS$
+    ^\[main.assertion.\d+\] .* assertion b->data\[4\] == 0: SUCCESS$
+    ^VERIFICATION FAILED$
+    --
+    ^\[main.assigns.\d+\] .* Check that b->data\[(.*)i\] is assignable: FAILED$
+    --
+    This test shows that __CPROVER_typed_target is supported in loop contracts,
+    and gets translated to __CPROVER_assignable(&target, sizeof(target), FALSE)
+    for scalar targets.
+Execution [SKIPPED]
+Test 'loop_assigns-slice-from'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 21 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 21 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 21 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 21 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that i is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that b->data\[(.*)i\] is assignable: SUCCESS$
+    ^\[main.assertion.\d+\] .* assertion b->data\[0\] == 0: FAILURE$
+    ^\[main.assertion.\d+\] .* assertion b->data\[1\] == 0: FAILURE$
+    ^\[main.assertion.\d+\] .* assertion b->data\[2\] == 0: FAILURE$
+    ^\[main.assertion.\d+\] .* assertion b->data\[3\] == 0: FAILURE$
+    ^\[main.assertion.\d+\] .* assertion b->data\[4\] == 0: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    ^\[main.assigns.\d+\] .* Check that b->data\[(.*)i\] is assignable: FAILURE$
+    --
+    This test shows that __CPROVER_object_from is supported in loop contracts.
+Execution [SKIPPED]
+Test 'loop_assigns-slice-upto-fail'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^\[main.loop_assigns.\d+\] line 21 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 21 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 21 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 21 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that i is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that b->data\[\(.*\)0\] is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that b->data\[\(.*\)1\] is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that b->data\[\(.*\)2\] is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that b->data\[\(.*\)i\] is assignable: FAILURE$
+    ^\[main.assertion.\d+\] .* assertion b->data\[0\] == 0: FAILURE$
+    ^\[main.assertion.\d+\] .* assertion b->data\[1\] == 0: FAILURE$
+    ^\[main.assertion.\d+\] .* assertion b->data\[2\] == 0: FAILURE$
+    ^\[main.assertion.\d+\] .* assertion b->data\[3\] == 0: SUCCESS$
+    ^\[main.assertion.\d+\] .* assertion b->data\[4\] == 0: SUCCESS$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    This test shows that __CPROVER_object_upto is supported in loop contracts.
+Execution [SKIPPED]
+Test 'loop_assigns-slice-upto-pass'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^\[main.loop_assigns.\d+\] line 21 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 21 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 21 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 21 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that i is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that b->data\[\(.*\)i\] is assignable: SUCCESS$
+    ^\[main.assertion.\d+\] .* assertion b->data\[0\] == 0: FAILURE$
+    ^\[main.assertion.\d+\] .* assertion b->data\[1\] == 0: FAILURE$
+    ^\[main.assertion.\d+\] .* assertion b->data\[2\] == 0: FAILURE$
+    ^\[main.assertion.\d+\] .* assertion b->data\[3\] == 0: SUCCESS$
+    ^\[main.assertion.\d+\] .* assertion b->data\[4\] == 0: SUCCESS$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    This test hows that __CPROVER_object_upto is supported in loop contracts.
+Execution [SKIPPED]
+Test 'loop_assigns_inference-01'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[body_1.assigns.\d+\] .* Check that j is assignable: SUCCESS$
+    ^\[body_2.assigns.\d+\] .* Check that \*i is assignable: SUCCESS$
+    ^\[body_3.assigns.\d+\] .* Check that \*i is assignable: SUCCESS$
+    ^\[incr.assigns.\d+\] .* Check that \*i is assignable: SUCCESS$
+    ^\[main.\d+\] .* Check loop invariant before entry: SUCCESS$
+    ^\[main.\d+\] .* Check that loop invariant is preserved: SUCCESS$
+    ^\[main.assertion.\d+\] .* assertion j == 9: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks loop locals are correctly removed during assigns inference so
+    that the assign clause is correctly inferred.
+    This test failed when using dfcc for loop contracts.
+Execution [SKIPPED]
+Test 'loop_assigns_inference-02'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[foo.loop_assigns.\d+\] line 13 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[foo.loop_assigns.\d+\] line 13 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[foo.loop_invariant_base.\d+\] line 13 Check invariant before entry for loop .*: SUCCESS$
+    ^\[foo.loop_invariant_base.\d+\] line 13 Check invariant before entry for loop .*: SUCCESS$
+    ^\[foo.loop_invariant_step.\d+\] line 13 Check invariant after step for loop .*: SUCCESS$
+    ^\[foo.loop_step_unwinding.\d+\] line 13 Check step was unwound for loop .*: SUCCESS$
+    ^\[foo.assigns.\d+\] .* Check that i is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] .* Check that b\[(.*)i\] is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks assigns clauses (i, __CPROVER_object_whole(b)) is inferred,
+    and widened correctly.
+Execution [SKIPPED]
+Test 'loop_assigns_inference-03'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 8 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 8 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 8 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 8 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that i is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that b\[(.*)i\] is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that the assigns clause (i, __CPROVER_object_whole(b)) is inferred.
+Execution [SKIPPED]
+Test 'loop_assigns_scoped_local_statics'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[body_1.assigns.\d+\] .* Check that j is assignable: SUCCESS$
+    ^\[body_2.assigns.\d+\] .* Check that \*i is assignable: SUCCESS$
+    ^\[body_3.assigns.\d+\] .* Check that \*i is assignable: SUCCESS$
+    ^\[incr.assigns.\d+\] .* Check that \*i is assignable: SUCCESS$
+    ^\[main.assertion.\d+\] .* assertion j == 9: SUCCESS$
+    ^\[body_1.assigns.\d+\] line \d+ Check that __static_local is assignable: SUCCESS$
+    ^\[body_2.assigns.\d+\] line \d+ Check that __static_local is assignable: SUCCESS$
+    ^\[body_3.assigns.\d+\] line \d+ Check that __static_local is assignable: SUCCESS$
+    ^\[incr.assigns.\d+\] line \d+ Check that __static_local is assignable: SUCCESS$
+    ^\[main.loop_assigns.\d+\] line 73 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 73 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 73 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 73 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion before_loop\(\) == 0: SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion after_loop\(\) == 0: SUCCESS$
+    ^\[upperbound.assigns.\d+\] line \d+ Check that __static_local is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks assigns clause checking presence of locally declared static 
+    variables.
+    We observe that the local static variables declared within the loop's
+    scope are correctly gathered and added to the write set,
+    and are havoced (body_1 and body_2 do not return 0 anymore after the loop). 
+Execution [SKIPPED]
+Test 'loop_assigns_scoped_local_statics_propagate'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract bar --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 33 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 33 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 33 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 33 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion before_loop\(\) == 0: SUCCESS$
+    ^\[main.assigns.\d+\] line \d+ Check that i is assignable: SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion j == 9: SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion before_loop\(\) == 0: SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion after_loop\(\) == 0: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks assigns clause checking presence of locally declared static 
+    variables and loops.
+    We observe that the local static variables declared within the loop's
+    scope are correctly gathered and added to the write set,
+    and are havoced (body_1 and body_2 do not return 0 anymore after the loop). 
+Execution [SKIPPED]
+Test 'loop_assigns_target_base_idents'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --malloc-may-fail --malloc-fail-null --dfcc main --enforce-contract foo --apply-loop-contracts
+  Results:
+    ^\[foo.assigns.\d+\] line .* Check that i is assignable: SUCCESS$
+    ^\[foo.loop_assigns.\d+\] line .* Check assigns clause inclusion for loop foo.0: SUCCESS$
+    ^\[foo.loop_invariant_base.\d+\] line .* Check invariant before entry for loop foo.0: SUCCESS$
+    ^\[foo.loop_invariant_step.\d+\] line .* Check invariant after step for loop foo.0: SUCCESS$
+    ^\[foo.loop_step_unwinding.\d+\] line .* Check step was unwound for loop foo.0: SUCCESS$
+    ^\[foo.assigns.\d+\] line .* Check that buf1\[\(.*\)i\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line .* Check that buf1\[\(.*\)\(32 - 1\)\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line .* Check that buf2\[\(.*\)0\] is assignable: FAILURE$
+    ^\[foo.assigns.\d+\] line .* Check that buf2\[\(.*\)10\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line .* Check that buf2\[\(.*\)11\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line .* Check that buf1\[\(.*\)\(32 - 1\)\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line .* Check that buf3\[\(.*\)0\] is assignable: FAILURE$
+    ^\[foo.assigns.\d+\] line .* Check that buf3\[\(.*\)9\] is assignable: FAILURE$
+    ^\[foo.assigns.\d+\] line .* Check that buf3\[\(.*\)10\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line .* Check that buf3\[\(.*\)11\] is assignable: FAILURE$
+    ^\[foo.assigns.\d+\] line .* Check that buf3\[\(.*\)\(32 - 1\)\] is assignable: FAILURE$
+    ^\[foo.assigns.\d+\] line .* Check that i is assignable: SUCCESS$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test checks that the optimisation that consists in not tracking locally
+    declared array symbols in the write set *not* kick in when said symbols are
+    assigned by a loop. This specifically tests the pattern matchin logic that is
+    used to identify the set of base symbols touched by an assigns clause target.
+    In particular the succesfull check
+    `[foo.assigns.*] Check assigns clause inclusion for loop foo.0`
+    shows that the targets listed in the loop's assigns clause are also found in the
+    function write set and hence explicitly tracked.
+Execution [SKIPPED]
+Test 'loop_body_with_hole'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^\[main.assigns.\d+\] line 6 Check that sum_to_k is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] line 7 Check that flag is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] line 9 Check that i is assignable: SUCCESS$
+    ^\[main.loop_assigns.\d+\] line 9 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 9 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 9 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 9 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] line 17 Check that flag is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] line 20 Check that sum_to_k is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that we only instrument instructions contained in natural loops
+    against loop write sets.
+    The variable `flag` is not listed in the assigns clause of the loop.
+    The statement `flag = true;` is not part of the natural loop since it is only
+    executed once when breaking out of the loop. In the goto program this assignment
+    it is found between the loop head instruction and the loop latch instructions
+    it should not cause an loop assigns clause violation.
+Execution [SKIPPED]
+Test 'loop_contracts_binary_search'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts _ --pointer-check --bounds-check --signed-overflow-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[binary_search.loop_assigns.\d+\] line 15 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[binary_search.loop_invariant_base.\d+\] line 15 Check invariant before entry for loop .*: SUCCESS$
+    ^\[binary_search.loop_invariant_step.\d+\] line 15 Check invariant after step for loop .*: SUCCESS$
+    ^\[binary_search.loop_step_unwinding.\d+\] line 15 Check step was unwound for loop .*: SUCCESS$
+    ^\[binary_search.loop_decreases.\d+\] line 15 Check variant decreases after step for loop .*: SUCCESS$
+    ^\[binary_search.assigns.\d+\] .* Check that lb is assignable: SUCCESS$
+    ^\[binary_search.assigns.\d+\] .* Check that ub is assignable: SUCCESS$
+    ^\[binary_search.assigns.\d+\] .* Check that mid is assignable: SUCCESS$
+    ^\[main\.assertion\.\d+\] .* assertion buf\[idx\] == val: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test case verifies memory safety and termination of a binary search implementation.
+Execution [SKIPPED]
+Test 'loop_contracts_do_while'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that loop contracts work correctly on do/while loops.
+Execution [SKIPPED]
+Test 'loop_contracts_no_unwind'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts --loop-contracts-no-unwind _ --unwind 1 --unwinding-assertions
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    \[main.unwind.\d+\] line \d+ unwinding assertion loop 0: FAILURE
+    ^VERIFICATION FAILED$
+    --
+    --
+    Check that transformed loop will not be unwound with flag --loop-contracts-no-unwind.
+Execution [SKIPPED]
+Test 'loop_contracts_reject_inner_loops_without_contracts'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^file main.c line 10 function main: Found loop without contract nested in a loop with a contract.$
+    ^Please provide a contract or unwind this loop before applying loop contracts.$
+    ^EXIT=(6|10)$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that our loop contract instrumentation verifies that loops
+    nested in loops with contracts also have contracts.
+Execution [SKIPPED]
+Test 'loop_contracts_reject_loops_instruction_not_in_head_latch'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^Found loop body instruction outside of the \[head, latch\] instruction span$
+    ^EXIT=(6|10)$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that our loop contract instrumentation verifies that loops
+    nested in loops with contracts also have contracts.
+Execution [SKIPPED]
+Test 'loop_contracts_reject_loops_overlapping_spans'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^Found loops with overlapping instruction spans$
+    ^EXIT=(6|10)$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that our loop contract instrumentation verifies that loops
+    nested in loops with contracts also have contracts.
+Execution [SKIPPED]
+Test 'loop_contracts_reject_loops_two_latches'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^Found loop with more than one latch instruction$
+    ^EXIT=(6|10)$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that our loop contract instrumentation verifies that loops
+    nested in loops with contracts also have contracts.
+Execution [SKIPPED]
+Test 'loop_guard_with_side_effects'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts _ --unsigned-overflow-check
+  Results:
+    \[main.loop_assigns.\d+\] line 18 Check assigns clause inclusion for loop .*: SUCCESS$
+    \[main.loop_invariant_base.\d+\] line 18 Check invariant before entry for loop .*: SUCCESS$
+    \[main.loop_invariant_step.\d+\] line 18 Check invariant after step for loop .*: SUCCESS$
+    \[main.loop_step_unwinding.\d+\] line 18 Check step was unwound for loop .*: SUCCESS$
+    \[check.assigns.\d+\] line \d+ Check that \*j is assignable: SUCCESS$
+    \[check.overflow.\d+\] line \d+ arithmetic overflow on unsigned \+ in \*j \+ 1u: SUCCESS
+    \[check.overflow.\d+\] line \d+ arithmetic overflow on unsigned \+ in \*j \+ 1u: SUCCESS
+    \[main.assigns.\d+\] line \d+ Check that i is assignable: SUCCESS$
+    \[main.overflow.\d+\] line \d+ arithmetic overflow on unsigned \+ in i \+ 1u: SUCCESS
+    \[main.assertion.\d+\] line \d+ assertion i == k: SUCCESS$
+    \[main.overflow.\d+\] line \d+ arithmetic overflow on unsigned \+ in k \+ \(unsigned int\)1: SUCCESS
+    \[main.assertion.\d+\] line \d+ assertion j == k \+ 1: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test demonstrates a case where the loop guard has side effects.
+    The loop contracts must specify the state of all modified variables,
+    including those in the loop guard.
+Execution [SKIPPED]
+Test 'loop_guard_with_side_effects_fail'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts _ --unsigned-overflow-check
+  Results:
+    \[main.loop_assigns.\d+\] line 16 Check assigns clause inclusion for loop .*: SUCCESS$
+    \[main.loop_invariant_base.\d+\] line 16 Check invariant before entry for loop .*: SUCCESS$
+    \[main.loop_invariant_step.\d+\] line 16 Check invariant after step for loop .*: SUCCESS$
+    \[main.loop_step_unwinding.\d+\] line 16 Check step was unwound for loop .*: SUCCESS$
+    \[check.assigns.\d+\] line \d+ Check that \*j is assignable: FAILURE$
+    \[main.assigns.\d+\] line \d+ Check that i is assignable: SUCCESS$
+    \[main.assertion.\d+\] line \d+ assertion i == k: SUCCESS$
+    ^EXIT=(6|10)$
+    ^SIGNAL=0$
+    --
+    --
+    This test demonstrates a case where the loop guard has side effects.
+    The writes performed in the guard must also be specified
+    in the assigns clause of the loop.
+Execution [SKIPPED]
+Test 'memory-predicates-is-fresh-failure-modes'
+  Level: KNOWNBUG
+  Input: main_bounded.c
+  Descriptor: test-fail-assert-bounded.desc
+  Output: test-fail-assert-bounded-non-dfcc.out
+  Options: --malloc-may-fail --malloc-fail-assert --dfcc main --enforce-contract foo _ --pointer-check --pointer-primitive-check --pointer-overflow-check
+  Results:
+    ^\[__CPROVER_contracts_is_fresh.assertion.\d+\] line \d+ __CPROVER_is_fresh max allocation size exceeded: SUCCESS$
+    ^\[__CPROVER_contracts_car_set_insert.assertion.\d+\] line \d+ CAR size is less than __CPROVER_max_malloc_size: SUCCESS$
+    ^\[__CPROVER_contracts_write_set_check_assignment.assertion.\d+\] line \d+ ptr NULL or writable up to size: SUCCESS$
+    ^\[__CPROVER_contracts_write_set_check_assignment.assertion.\d+\] line \d+ no offset bits overflow on CAR upper bound computation: SUCCESS$
+    ^\[foo.assertion.\d+\] line \d+ size is capped: SUCCESS$
+    ^\[foo.assigns.\d+\] line \d+ Check that arr\[\(.*\)0\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line \d+ Check that arr\[\(.*\)\(size - \(.*\)1\)\] is assignable: SUCCESS$
+    ^\[foo.pointer_arithmetic.\d+\] line \d+ pointer arithmetic: pointer outside object bounds in arr \+ \(.*\)\(size - \(.*\)1\): SUCCESS$
+    ^\[foo.pointer_arithmetic.\d+\] line \d+ pointer arithmetic: pointer outside object bounds in arr \+ \(.*\)\(size - \(.*\)1\): SUCCESS$
+    ^\[foo.pointer_dereference.\d+\] line \d+ dereference failure: pointer outside object bounds in arr\[\(.*\)\(size - \(.*\)1\)\]: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This tests shows that using is_fresh with --malloc-fail-assert active and
+    imposing a limit on the size parameter succeeds.
+Execution [SKIPPED]
+Test 'memory-predicates-is-fresh-failure-modes'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test-fail-assert.desc
+  Output: test-fail-assert-non-dfcc.out
+  Options: --malloc-may-fail --malloc-fail-assert --dfcc main --enforce-contract foo _ --pointer-check --pointer-primitive-check --pointer-overflow-check
+  Results:
+    ^\[__CPROVER_contracts_is_fresh.assertion.\d+\] line \d+ __CPROVER_is_fresh max allocation size exceeded: FAILURE$
+    ^\[__CPROVER_contracts_car_set_insert.assertion.\d+\] line \d+ CAR size is less than __CPROVER_max_malloc_size: SUCCESS$
+    ^\[__CPROVER_contracts_write_set_check_assignment.assertion.\d+\] line \d+ ptr NULL or writable up to size: SUCCESS$
+    ^\[__CPROVER_contracts_write_set_check_assignment.assertion.\d+\] line \d+ no offset bits overflow on CAR upper bound computation: SUCCESS$
+    ^\[foo.assertion.\d+\] line \d+ size is capped: SUCCESS$
+    ^\[foo.assigns.\d+\] line \d+ Check that arr\[\(.*\)0\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line \d+ Check that arr\[\(.*\)\(size - \(.*\)1\)\] is assignable: SUCCESS$
+    ^\[foo.pointer_arithmetic.\d+\] line \d+ pointer arithmetic: pointer outside object bounds in arr \+ \(.*\)\(size - \(.*\)1\): SUCCESS$
+    ^\[foo.pointer_arithmetic.\d+\] line \d+ pointer arithmetic: pointer outside object bounds in arr \+ \(.*\)\(size - \(.*\)1\): SUCCESS$
+    ^\[foo.pointer_dereference.\d+\] line \d+ dereference failure: pointer outside object bounds in arr\[\(.*\)\(size - \(.*\)1\)\]: SUCCESS$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This tests shows that using is_fresh with --malloc-fail-assert active and
+    without imposing a limit on the size parameter results in an failed assertion
+    in is_fresh that detects that the size may be too large, but also results in an
+    implicit assumption that the size is less than the maximum allocation size
+    (just like when used with malloc).
+Execution [SKIPPED]
+Test 'memory-predicates-is-fresh-failure-modes'
+  Level: KNOWNBUG
+  Input: main_bounded.c
+  Descriptor: test-fail-none-bounded.desc
+  Output: test-fail-none-bounded-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo _ --pointer-check --pointer-primitive-check --pointer-overflow-check
+  Results:
+    ^\[__CPROVER_contracts_car_set_insert.assertion.\d+\] line \d+ CAR size is less than __CPROVER_max_malloc_size: SUCCESS$
+    ^\[__CPROVER_contracts_write_set_check_assignment.assertion.\d+\] line \d+ ptr NULL or writable up to size: SUCCESS$
+    ^\[__CPROVER_contracts_write_set_check_assignment.assertion.\d+\] line \d+ no offset bits overflow on CAR upper bound computation: SUCCESS$
+    ^\[foo.assertion.\d+\] line \d+ size is capped: SUCCESS$
+    ^\[foo.assigns.\d+\] line \d+ Check that arr\[\(.*\)0\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line \d+ Check that arr\[\(.*\)\(size - \(.*\)1\)\] is assignable: SUCCESS$
+    ^\[foo.pointer_arithmetic.\d+\] line \d+ pointer arithmetic: pointer outside object bounds in arr \+ \(.*\)\(size - \(.*\)1\): SUCCESS$
+    ^\[foo.pointer_arithmetic.\d+\] line \d+ pointer arithmetic: pointer outside object bounds in arr \+ \(.*\)\(size - \(.*\)1\): SUCCESS$
+    ^\[foo.pointer_dereference.\d+\] line \d+ dereference failure: pointer outside object bounds in arr\[\(.*\)\(size - \(.*\)1\)\]: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This tests shows that using is_fresh without malloc failure modes active and
+    imposing a limit on the size parameter succeeds.
+Execution [SKIPPED]
+Test 'memory-predicates-is-fresh-failure-modes'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-fail-none.desc
+  Output: test-fail-none-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo _ --pointer-check --pointer-primitive-check --pointer-overflow-check
+  Results:
+    ^\[__CPROVER_contracts_car_set_insert.assertion.\d+\] line \d+ CAR size is less than __CPROVER_max_malloc_size: FAILURE$
+    ^\[foo.assertion.\d+\] line \d+ size is capped: FAILURE$
+    ^\*\* 2 of \d+ failed
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This tests shows that using is_fresh without malloc failure modes active and
+    without imposing a limit on the size parameter results in failures:
+    1. in the contracts library because the addressable range of the allocated object
+    cannot be represented without pointer overflow
+    2. in the assigns clause checking because the assignable range cannot be represented
+    3. in pointer overflow checks generated by CBMC pointer checks
+Execution [SKIPPED]
+Test 'memory-predicates-is-fresh-failure-modes'
+  Level: KNOWNBUG
+  Input: main_bounded.c
+  Descriptor: test-fail-null-bounded.desc
+  Output: test-fail-null-bounded-non-dfcc.out
+  Options: --malloc-may-fail --malloc-fail-null --dfcc main --enforce-contract foo _ --pointer-check --pointer-primitive-check --pointer-overflow-check
+  Results:
+    ^\[__CPROVER_contracts_car_set_insert.assertion.\d+\] line \d+ CAR size is less than __CPROVER_max_malloc_size: SUCCESS$
+    ^\[__CPROVER_contracts_write_set_check_assignment.assertion.\d+\] line \d+ ptr NULL or writable up to size: SUCCESS$
+    ^\[__CPROVER_contracts_write_set_check_assignment.assertion.\d+\] line \d+ no offset bits overflow on CAR upper bound computation: SUCCESS$
+    ^\[foo.assertion.\d+\] line \d+ size is capped: SUCCESS$
+    ^\[foo.assigns.\d+\] line \d+ Check that arr\[\(.*\)0\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line \d+ Check that arr\[\(.*\)\(size - \(.*\)1\)\] is assignable: SUCCESS$
+    ^\[foo.pointer_arithmetic.\d+\] line \d+ pointer arithmetic: pointer outside object bounds in arr \+ \(.*\)\(size - \(.*\)1\): SUCCESS$
+    ^\[foo.pointer_arithmetic.\d+\] line \d+ pointer arithmetic: pointer outside object bounds in arr \+ \(.*\)\(size - \(.*\)1\): SUCCESS$
+    ^\[foo.pointer_dereference.\d+\] line \d+ dereference failure: pointer outside object bounds in arr\[\(.*\)\(size - \(.*\)1\)\]: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This tests shows that using is_fresh with --malloc-fail-null active and
+    imposing a limit on the size parameter succeeds.
+Execution [SKIPPED]
+Test 'memory-predicates-is-fresh-failure-modes'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test-fail-null.desc
+  Output: test-fail-null-non-dfcc.out
+  Options: --malloc-may-fail --malloc-fail-null --dfcc main --enforce-contract foo _ --pointer-check --pointer-primitive-check --pointer-overflow-check
+  Results:
+    ^\[__CPROVER_contracts_car_set_insert.assertion.\d+\] line \d+ CAR size is less than __CPROVER_max_malloc_size: SUCCESS$
+    ^\[__CPROVER_contracts_write_set_check_assignment.assertion.\d+\] line \d+ ptr NULL or writable up to size: SUCCESS$
+    ^\[__CPROVER_contracts_write_set_check_assignment.assertion.\d+\] line \d+ no offset bits overflow on CAR upper bound computation: SUCCESS$
+    ^\[foo.assertion.\d+\] line \d+ size is capped: SUCCESS$
+    ^\[foo.assigns.\d+\] line \d+ Check that arr\[\(.*\)0\] is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\] line \d+ Check that arr\[\(.*\)\(size - \(.*\)1\)\] is assignable: SUCCESS$
+    ^\[foo.pointer_arithmetic.\d+\] line \d+ pointer arithmetic: pointer outside object bounds in arr \+ \(.*\)\(size - \(.*\)1\): SUCCESS$
+    ^\[foo.pointer_arithmetic.\d+\] line \d+ pointer arithmetic: pointer outside object bounds in arr \+ \(.*\)\(size - \(.*\)1\): SUCCESS$
+    ^\[foo.pointer_dereference.\d+\] line \d+ dereference failure: pointer outside object bounds in arr\[\(.*\)\(size - \(.*\)1\)\]: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This tests shows that using is_fresh with --malloc-fail-null active and
+    without imposing a limit on the size parameter results in an implicit assumption
+    that the size is less than the maximum allocation size
+    (just like malloc does, except is_fresh does not fail).
+Execution [SKIPPED]
+Test 'memory-predicates-pointer-in-range-nondet'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --restrict-function-pointer foo.CALL/return_0,return_1 --nondet-static-exclude vtable_0 --nondet-static-exclude vtable_1 --dfcc main --enforce-contract foo _ --pointer-check --pointer-primitive-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Demonstrates the use of __CPROVER_pointer_in_range_dfcc to define nondeterministic
+    pointers to one or more targets.
+Execution [SKIPPED]
+Test 'memory-predicates-pointer-in-range-requires'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --malloc-may-fail --malloc-fail-null --dfcc main --enforce-contract foo _ --pointer-check --pointer-primitive-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks that assuming pointer-in-range as preconditions establishes a state
+    in which the definition of the predicate holds.
+Execution [SKIPPED]
+Test 'memory-predicates-pointer-in-range-typecheck-failure-01'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --malloc-may-fail --malloc-fail-null --dfcc main --enforce-contract foo _ --pointer-check --pointer-primitive-check
+  Results:
+    ^.*error: __CPROVER_pointer_in_range_dfcc expects three arguments$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    ^CONVERSION ERROR$
+    --
+    --
+    Checks that badly typed occurrences of __CPROVER_pointer_in_range_dfcc are detected.
+Execution [SKIPPED]
+Test 'memory-predicates-pointer-in-range-typecheck-failure-02'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --malloc-may-fail --malloc-fail-null --dfcc main --enforce-contract foo _ --pointer-check --pointer-primitive-check
+  Results:
+    ^.*error: __CPROVER_pointer_in_range_dfcc expects pointer-typed arguments$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    ^CONVERSION ERROR$
+    --
+    --
+    Checks that badly typed occurrences of __CPROVER_pointer_in_range_dfcc are detected.
+Execution [SKIPPED]
+Test 'memory-predicates-user-defined-ensures-enforce'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo _ --pointer-check --pointer-primitive-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks if user defined predicates in ensures clauses are successfully asserted
+    when enforcing contracts.
+Execution [SKIPPED]
+Test 'memory-predicates-user-defined-ensures-replace'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract bar --replace-call-with-contract foo _ --pointer-check --pointer-primitive-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks that user defined predicates assumed in ensures clauses for replaced
+    contracts build a state such that the predicates holds.
+Execution [SKIPPED]
+Test 'memory-predicates-user-defined-mutually-recursive-fail'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo _ --pointer-check --pointer-primitive-check
+  Results:
+    ^could not determine instrumentation order for memory predicates, most likely due to mutual recursion$
+    ^EXIT=(0|127|134|137)$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that mutually recursive memory predicates are detected and rejected.
+Execution [SKIPPED]
+Test 'memory-predicates-user-defined-recursive-alternation'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo _ --pointer-check --pointer-primitive-check
+  Results:
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    Checks that recursive memory predicates that specify alternating patterns on
+    values can be assumed and checked.
+Execution [SKIPPED]
+Test 'memory-predicates-user-defined-requires-enforce'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo _ --pointer-check --pointer-primitive-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks if user-defined memory predicates in requires clauses are succesfully
+    assumed when enforcing a contract.
+Execution [SKIPPED]
+Test 'memory-predicates-user-defined-requires-replace'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo --replace-call-with-contract bar --replace-call-with-contract baz _ --pointer-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks that user defined predicates assumed in requires clauses for checked
+    contracts build a state such that the same predicates used in requires clauses
+    for function calls replaced by their contracts hold.
+Execution [SKIPPED]
+Test 'missing-function-body'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract bar
+  Results:
+    ^\[foo.assertion.\d+\] line 1 undefined function should be unreachable: FAILURE$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that functions without bodies result in analysis failures.
+Execution [SKIPPED]
+Test 'named-contracts'
+  Level: KNOWNBUG
+  Input: main-contract-after-declaration.c
+  Descriptor: test-contract-after-declaration.desc
+  Output: test-contract-after-declaration-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that we can have a function declaration with a contract after
+    having seen an earlier declaration of that same function.
+Execution [SKIPPED]
+Test 'named-contracts'
+  Level: KNOWNBUG
+  Input: main-contract-after-definition.c
+  Descriptor: test-contract-after-definition.desc
+  Output: test-contract-after-definition-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that we can have a function declaration with a contract after
+    having seen that function's definition.
+Execution [SKIPPED]
+Test 'named-contracts'
+  Level: CORE
+  Input: main-contract-incomplete.c
+  Descriptor: test-contract-incomplete.desc
+  Output: test-contract-incomplete-non-dfcc.out
+  Options: --dfcc main 
+  Results:
+    error: code contract on incomplete function re-declaration
+    CONVERSION ERROR
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that contracts on incomplete re-declarations are rejected.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main  'main-contract-incomplete.c' >'test-contract-incomplete-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+error: code contract on incomplete function re-declaration [OK]
+CONVERSION ERROR [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'named-contracts'
+  Level: CORE
+  Input: main-contract-signature-conflict.c
+  Descriptor: test-contract-signature-conflict.desc
+  Output: test-contract-signature-conflict-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    function symbol 'foo' redefined with a different type
+    ^EXIT=(64|1)$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that contracts on function declarations with a matching name
+    but different type are rejected.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main-contract-signature-conflict.c' >'test-contract-signature-conflict-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+function symbol 'foo' redefined with a different type [OK]
+^EXIT=(64|1)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'named-contracts'
+  Level: KNOWNBUG
+  Input: main-definition-after-contract.c
+  Descriptor: test-definition-after-contract.desc
+  Output: test-definition-after-contract-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that we can have a function declaration with a contract and
+    without body, then the function definition, and successfully replace a call to
+    the function by the contract.
+Execution [SKIPPED]
+Test 'named-contracts'
+  Level: KNOWNBUG
+  Input: main-no-definition.c
+  Descriptor: test-no-definition.desc
+  Output: test-no-definition-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that we can have a function declaration with a contract and
+    without body and replace a call to the function by the contract.
+Execution [SKIPPED]
+Test 'no_redudant_checks'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --pointer-overflow-check _ --pointer-overflow-check --unsigned-overflow-check
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[main.overflow.1\].*: SUCCESS
+    ^\[main.pointer_arithmetic.1\].*: SUCCESS
+    ^\[main.pointer_arithmetic.2\].*: SUCCESS
+    ^\[main.pointer_arithmetic.3\].*: SUCCESS
+    ^\[main.pointer_arithmetic.4\].*: SUCCESS
+    ^\[main.pointer_arithmetic.5\].*: SUCCESS
+    ^\[main.pointer_arithmetic.6\].*: SUCCESS
+    ^\[main.pointer_arithmetic.7\].*: SUCCESS
+    ^\[main.pointer_arithmetic.8\].*: SUCCESS
+    ^\[main.pointer_arithmetic.9\].*: SUCCESS
+    ^\[main.pointer_arithmetic.10\].*: SUCCESS
+    ^\[main.pointer_arithmetic.11\].*: SUCCESS
+    ^\[main.pointer_arithmetic.12\].*: SUCCESS
+    ^\[main.pointer_arithmetic.13\].*: SUCCESS
+    ^\[main.pointer_arithmetic.14\].*: SUCCESS
+    ^\[main.pointer_arithmetic.15\].*: SUCCESS
+    ^\[main.pointer_arithmetic.16\].*: SUCCESS
+    ^\[main.pointer_arithmetic.17\].*: SUCCESS
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks that assertions generated by the first --pointer-overflow-check:
+    - do not get duplicated by the second --unsigned-overflow-check
+    - do not get instrumented with --unsigned-overflow-check (would fail the proof)
+    
+    We expect 17 assertions caused by --pointer-overflow-check
+    In the final cbmc run:
+    - 0 caused by --pointer-overflow-check
+    - 1 caused by the --unsigned-overflow-check
+Execution [SKIPPED]
+Test 'nonvacuous_loop_contracts'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts _ --signed-overflow-check --unsigned-overflow-check
+  Results:
+    ^\[main.loop_assigns.\d+\] line 14 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 14 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 14 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 14 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_decreases.\d+\] line 14 Check variant decreases after step for loop .*: SUCCESS$
+    \[main.assigns.\d+\] line \d+ Check that end is assignable: SUCCESS$
+    \[main.assertion.\d+\] line \d+ assertion end == start: SUCCESS$
+    \[main.assertion.\d+\] line \d+ assertion start <= end && end <= size: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    This test demonstrates a simplification that is now possible on loop contracts.
+    
+    Prior to this commit, loop contracts were unconditionally applied on loops,
+    and thus had to also consider the case when the loop doesn't run even once.
+    
+    The contracts that were previously necessary were:
+      __CPROVER_loop_invariant(
+        (start > size && end == start) || (start <= end && end <= size)
+      )
+      __CPROVER_decreases(
+        max(start, size) - end
+      )
+Execution [SKIPPED]
+Test 'quantifiers-exists-both-enforce'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[f1.postcondition.\d+\] line \d+ Check ensures clause( of contract contract::f1 for function f1)?: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^warning: ignoring
+    --
+    The purpose of this test is to ensure that we can safely use __CPROVER_exists within both
+    positive and negative contexts (ENSURES and REQUIRES clauses).
+    
+    With the SAT backend existential quantifiers in a positive context,
+    e.g., the ENSURES clause being enforced in this case,
+    are supported only if the quantifier is bound to a constant range.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract f1 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^\[f1.postcondition.\d+\] line \d+ Check ensures clause( of contract contract::f1 for function f1)?: SUCCESS$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+^warning: ignoring [OK]
+
+Test 'quantifiers-exists-both-replace'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract f1
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[f1.precondition.\d+\] line \d+ Check requires clause of (contract contract::f1 for function f1|f1 in main): SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^warning: ignoring
+    --
+    The purpose of this test is to ensure that we can safely use __CPROVER_exists within both
+    positive and negative contexts (ENSURES and REQUIRES clauses).
+    
+    With the SAT backend existential quantifiers in a positive context,
+    e.g., the REQUIRES clause being replaced in this case,
+    are supported only if the quantifier is bound to a constant range.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract f1 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^\[f1.precondition.\d+\] line \d+ Check requires clause of (contract contract::f1 for function f1|f1 in main): SUCCESS$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+^warning: ignoring [OK]
+
+Test 'quantifiers-exists-ensures-enforce'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-f1.desc
+  Output: test-f1-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    ^warning: ignoring
+    --
+    The purpose of this test is to ensure that we can safely use __CPROVER_exists
+    within positive contexts (enforced ENSURES clauses).
+    
+    With the SAT backend existential quantifiers in a positive context,
+    e.g., the ENSURES clause being enforced in this case,
+    are supported only if the quantifier is bound to a constant range.
+Execution [SKIPPED]
+Test 'quantifiers-exists-ensures-enforce'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-f2.desc
+  Output: test-f2-non-dfcc.out
+  Options: --dfcc main --enforce-contract f2
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    ^warning: ignoring
+    --
+    The purpose of this test is to ensure that we can safely use __CPROVER_exists
+    within positive contexts (enforced ENSURES clauses).
+    
+    With the SAT backend existential quantifiers in a positive context,
+    e.g., the ENSURES clause being enforced in this case,
+    are supported only if the quantifier is bound to a constant range.
+Execution [SKIPPED]
+Test 'quantifiers-exists-ensures-replace'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract f1
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[main.assertion.1\] line .* assertion len > 0 ==> found_zero: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^warning: ignoring
+    --
+    The purpose of this test is to ensure that we can safely use __CPROVER_exists
+    within negative contexts (replaced ENSURES clauses).
+    
+    This is fully supported (without requiring full unrolling) with the SAT backend.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract f1 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^\[main.assertion.1\] line .* assertion len > 0 ==> found_zero: SUCCESS$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+^warning: ignoring [OK]
+
+Test 'quantifiers-exists-requires-enforce'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[f1.postcondition.\d+\] line \d+ Check ensures clause( of contract contract::f1 for function f1)?: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^warning: ignoring
+    --
+    The purpose of this test is to ensure that we can safely use __CPROVER_exists
+    within both negative contexts (enforced REQUIRES clauses).
+    
+    This is fully supported (without requiring full unrolling) with the SAT backend.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract f1 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^\[f1.postcondition.\d+\] line \d+ Check ensures clause( of contract contract::f1 for function f1)?: SUCCESS$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+^warning: ignoring [OK]
+
+Test 'quantifiers-exists-requires-replace'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract f1 --replace-call-with-contract f2
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[f1.precondition.\d+\] line \d+ Check requires clause of (contract contract::f1 for function f1|f1 in main): SUCCESS$
+    ^\[f2.precondition.\d+\] line \d+ Check requires clause of (contract contract::f2 for function f2|f2 in main): FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    ^warning: ignoring
+    --
+    The purpose of this test is to ensure that we can safely use __CPROVER_exists
+    within both positive contexts (replaced REQUIRES clauses).
+    
+    With the SAT backend existential quantifiers in a positive context,
+    e.g., the REQUIRES clause being replaced in this case,
+    are supported only if the quantifier is bound to a constant range.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract f1 --replace-call-with-contract f2 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 10
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=10$ [OK]
+^SIGNAL=0$ [OK]
+^\[f1.precondition.\d+\] line \d+ Check requires clause of (contract contract::f1 for function f1|f1 in main): SUCCESS$ [OK]
+^\[f2.precondition.\d+\] line \d+ Check requires clause of (contract contract::f2 for function f2|f2 in main): FAILURE$ [OK]
+^VERIFICATION FAILED$ [OK]
+^warning: ignoring [OK]
+
+Test 'quantifiers-forall-both-enforce'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[f1.postcondition.\d+\] line \d+ Check ensures clause( of contract contract::f1 for function f1)?: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^warning: ignoring
+    --
+    The purpose of this test is to ensure that we can safely use __CPROVER_forall within both
+    positive and negative contexts (ENSURES and REQUIRES clauses).
+    
+    With the SAT backend universal quantifiers in a negative context,
+    e.g., the REQUIRES clause being enforced in this case,
+    are supported only if the quantifier is bound to a constant range.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract f1 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^\[f1.postcondition.\d+\] line \d+ Check ensures clause( of contract contract::f1 for function f1)?: SUCCESS$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+^warning: ignoring [OK]
+
+Test 'quantifiers-forall-both-replace'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract f1
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[f1.precondition.\d+\] line \d+ Check requires clause of (contract contract::f1 for function f1|f1 in main): SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^warning: ignoring
+    --
+    The purpose of this test is to ensure that we can safely use __CPROVER_forall within both
+    positive and negative contexts (ENSURES and REQUIRES clauses).
+    
+    With the SAT backend universal quantifiers in a negative context,
+    e.g., the ENSURES clause being replaced in this case,
+    are supported only if the quantifier is bound to a constant range.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract f1 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^\[f1.precondition.\d+\] line \d+ Check requires clause of (contract contract::f1 for function f1|f1 in main): SUCCESS$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+^warning: ignoring [OK]
+
+Test 'quantifiers-forall-ensures-enforce'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[f1.postcondition.\d+\] line \d+ Check ensures clause of contract contract::f1 for function f1: SUCCESS$
+    ^\[f1.assigns.\d+\] line \d+ Check that arr\[\(.*\)\d\] is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^warning: ignoring
+    ^\[f1.assigns.\d+\] line \d+ Check that arr\[\(.*\)\d\] is assignable: FAILURE$
+    --
+    The purpose of this test is to ensure that we can safely use __CPROVER_forall
+    within positive contexts (enforced ENSURES clauses).
+    
+    This is fully supported (without requiring full unrolling) with the SAT backend.
+Execution [SKIPPED]
+Test 'quantifiers-forall-ensures-replace'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract f1
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.assertion.1\] line .* assertion check: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    ^warning: ignoring
+    --
+    The purpose of this test is to ensure that we can safely use __CPROVER_forall
+    within negative contexts (replaced ENSURES clauses).
+    
+    With the SAT backend universal quantifiers within a negative context,
+    e.g., the ENSURES clause being replaced in this case,
+    are supported only if the quantifier is bound to a constant range.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract f1 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 10
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=10$ [OK]
+^SIGNAL=0$ [OK]
+^\[main.assertion.1\] line .* assertion check: FAILURE$ [OK]
+^VERIFICATION FAILED$ [OK]
+^warning: ignoring [OK]
+
+Test 'quantifiers-forall-requires-enforce'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[f1.postcondition.\d+\] line \d+ Check ensures clause( of contract contract::f1 for function f1)?: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^warning: ignoring
+    --
+    The purpose of this test is to ensure that we can safely use __CPROVER_forall
+    within negative contexts (enforced REQUIRES clauses).
+    
+    With the SAT backend universal quantifiers within a negative context,
+    e.g., the REQUIRES clause being enforced in this case,
+    are supported only if the quantifier is bound to a constant range.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract f1 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^\[f1.postcondition.\d+\] line \d+ Check ensures clause( of contract contract::f1 for function f1)?: SUCCESS$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+^warning: ignoring [OK]
+
+Test 'quantifiers-forall-requires-replace'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract f1
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[f1.precondition.\d+\] line \d+ Check requires clause of (contract contract::f1 for function f1|f1 in main): SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^warning: ignoring
+    --
+    The purpose of this test is to ensure that we can safely use __CPROVER_forall
+    within positive contexts (replaced REQUIRES clauses).
+    
+    This is fully supported (without requiring full unrolling) with the SAT backend.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract f1 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^\[f1.precondition.\d+\] line \d+ Check requires clause of (contract contract::f1 for function f1|f1 in main): SUCCESS$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+^warning: ignoring [OK]
+
+Test 'quantifiers-loop-01'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^\[main.loop_assigns.\d+\] line 10 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 10 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 10 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 10 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] line .* Check that i is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] line .* Check that a\[\(signed long (long )?int\)i\] is assignable: SUCCESS$
+    ^\[main\.assertion\.\d+\] line .* assertion a\[10\] == 1: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    ^warning: ignoring
+    --
+    This test case checks the handling of a `forall` quantifier within a loop invariant.
+    
+    This test case uses explicit constant bounds on the quantified variable,
+    so that it can be unrolled (to conjunctions) with the SAT backend.
+Execution [SKIPPED]
+Test 'quantifiers-loop-02'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts _ --z3
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 9 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_assigns.\d+\] line 9 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 9 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 9 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 9 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 9 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] line .* Check that i is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] line .* Check that a\[\(signed long (long )?int\)i\] is assignable: SUCCESS$
+    ^\[main.assertion.\d+\] line .* assertion .*: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^warning: ignoring
+    --
+    This test case checks the handling of a universal quantifier, with a symbolic
+    upper bound, within a loop invariant.
+    
+    TODO: This test should:
+    - not use the `_ --z3` parameters:
+      once SMT-related tags are supported by the `Makefile`.
+Execution [SKIPPED]
+Test 'quantifiers-loop-03'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[main.loop_assigns.\d+\] line 13 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 13 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 13 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 13 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that i is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that a\[\(signed long (long )?int\)i\] is assignable: SUCCESS$
+    ^\[main\.assertion\.\d+\] line .* assertion .*: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^warning: ignoring
+    --
+    This test case checks the handling of an existential quantifier, with a symbolic
+    upper bound, within a loop invariant.
+    
+    This test case uses explicit constant bounds on the quantified variable,
+    so that it can be unrolled (to conjunctions) with the SAT backend.
+Execution [SKIPPED]
+Test 'quantifiers-nested-01'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^warning: ignoring
+    --
+    This test case checks the handling of a forall expression
+    nested within another forall expression.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract f1 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+^warning: ignoring [OK]
+
+Test 'quantifiers-nested-02'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract f1
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^warning: ignoring
+    --
+    This test case checks the handling of a forall expression
+    nested within an implication.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract f1 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+^warning: ignoring [OK]
+
+Test 'quantifiers-nested-03'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract f1
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^warning: ignoring
+    --
+    This test case checks the handling of an exists expression
+    nested within a conjunction.
+Execution [SKIPPED]
+Test 'quantifiers-nested-04'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract f1
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^warning: ignoring
+    --
+    This test case checks the handling of both a forall expression
+    and an exists expression nested within a disjunction.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract f1 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+^warning: ignoring [OK]
+
+Test 'quantifiers-nested-05'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract f1
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^warning: ignoring
+    --
+    This test case checks the handling of a forall expression
+    nested within a negation.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract f1 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+^warning: ignoring [OK]
+
+Test 'quantifiers-nested-06'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract f1
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    ^warning: ignoring
+    --
+    This test case checks the handling of forall and exists expressions
+    nested within ternary ITE expressions (condition ? true : false).
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract f1 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+^warning: ignoring [OK]
+
+Test 'quicksort_contracts_01'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract quicksort --enforce-contract partition --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Loop invariants are overzealous in deciding what counts as side effects.
+    Recursion is not supported for function contracts.
+Execution [SKIPPED]
+Test 'recursive-function-and-loop-contracts'
+  Level: THOROUGH
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract-rec foo --apply-loop-contracts --malloc-may-fail --malloc-fail-null _ --bounds-check --pointer-check --signed-overflow-check --unsigned-overflow-check --conversion-check --sat-solver cadical
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test illustrates the analysis of a function with a combination of features:
+    - the function is recursive
+    - the function contains loops
+    - the function assigns local static variables
+    
+    The following write set checks are performed:
+    - the write set of the recursive call is included in the caller'set
+    - the write set of each loop is included in the outer write set, either the
+      function's write set or some loop's write set)
+    - local statics are automatically detected and added to each write set
+    - the instructions are checked against their respective write sets
+Execution [SKIPPED]
+Test 'reject_history_expr_in_assigns_clause'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --enforce-contract foo
+  Results:
+    ^.*error: assigns clause target must be a non-void lvalue or a call to a function returning void$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that __CPROVER_old occurences in assigns clauses
+    are detected and rejected.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^.*error: assigns clause target must be a non-void lvalue or a call to a function returning void$ [OK]
+^CONVERSION ERROR$ [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'reject_history_expr_in_preconditions'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --enforce-contract foo
+  Results:
+    ^main.c.*error: __CPROVER_old is not allowed in preconditions.$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that __CPROVER_old occurences in preconditions
+    are detected and rejected.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^main.c.*error: __CPROVER_old is not allowed in preconditions.$ [OK]
+^CONVERSION ERROR$ [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'reject_return_value_in_assigns_clause'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --enforce-contract foo
+  Results:
+    ^main.c.*error: __CPROVER_return_value is not allowed in assigns clauses.$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that __CPROVER_return_value occurences in assigns clauses
+    are detected and rejected.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^main.c.*error: __CPROVER_return_value is not allowed in assigns clauses.$ [OK]
+^CONVERSION ERROR$ [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'reject_return_value_in_preconditions'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --enforce-contract foo
+  Results:
+    ^main.c.*error: __CPROVER_return_value is not allowed in preconditions.$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that __CPROVER_return_value occurences in preconditions
+    are detected and rejected.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^main.c.*error: __CPROVER_return_value is not allowed in preconditions.$ [OK]
+^CONVERSION ERROR$ [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'replace-nondet-return-value'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract cmp
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main\.assertion\.1\] line \d+ expecting SUCCESS: SUCCESS$
+    ^\[main\.assertion\.2\] line \d+ expecting FAILURE: FAILURE$
+    ^\[main\.assertion\.3\] line \d+ expecting SUCCESS: SUCCESS$
+    ^\[main\.assertion\.4\] line \d+ expecting FAILURE: FAILURE$
+    ^\*\* 2 of \d+ failed
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test checks that the return value of a replaced function call is made 
+    nondet at each replacement site.
+    The replaced function is called twice. Each call is expected to have a different
+    return value. If the return value of the call is not made nondet at each
+    replacement, it would be subject to contradictory constraints
+    (from the post conditions) and the assertions expected to fail would 
+    be vacuously satisfied.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract cmp 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 10
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=10$ [OK]
+^SIGNAL=0$ [OK]
+^\[main\.assertion\.1\] line \d+ expecting SUCCESS: SUCCESS$ [OK]
+^\[main\.assertion\.2\] line \d+ expecting FAILURE: FAILURE$ [OK]
+^\[main\.assertion\.3\] line \d+ expecting SUCCESS: SUCCESS$ [OK]
+^\[main\.assertion\.4\] line \d+ expecting FAILURE: FAILURE$ [OK]
+^\*\* 2 of \d+ failed [OK]
+^VERIFICATION FAILED$ [OK]
+
+Test 'ternary-lhs-loop-contract'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo --apply-loop-contracts
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    checks that when assignment lhs expressions have ternary expressions,
+    loop assigns clause checking correctly infers what gets assigned and
+    automatically tracks targets in the both the top level and the loop write sets.
+Execution [SKIPPED]
+Test 'test_aliasing_enforce'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    \[foo.postcondition.\d+\] line \d+ Check ensures clause of contract contract::foo for function foo: SUCCESS$
+    \[foo.assigns.\d+\] line \d+ Check that \*x is assignable: SUCCESS
+    \[foo.assigns.\d+\] line \d+ Check that \*y is assignable: SUCCESS
+    \[foo.assigns.\d+\] line \d+ Check that z is assignable: SUCCESS
+    \[main.assertion.\d+\] line \d+ assertion \!\(n \< 4\): SUCCESS
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks whether assuming __CPROVER_is_fresh will guarantee a new freshly
+    allocated pointer (no aliasing) for structs.
+Execution [SKIPPED]
+Test 'test_aliasing_ensure'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    \[foo.postcondition.\d+\].*Check ensures clause of contract contract::foo for function foo: SUCCESS$
+    \[foo.assigns.\d+\].*Check that \*x is assignable: SUCCESS
+    \[foo.assigns.\d+\].*Check that \*y is assignable: SUCCESS
+    \[foo.assigns.\d+\].*Check that z is assignable: SUCCESS
+    \[main.assertion.\d+\].*assertion \!\(n \< 4\): SUCCESS
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks whether ensures(is_fresh()) pass on functions that perform allocation
+    directly and return a new object.
+Execution [SKIPPED]
+Test 'test_aliasing_ensure_indirect'
+  Level: KNOWNBUG
+  Input: main_bar.c
+  Descriptor: test-bar.desc
+  Output: test-bar-non-dfcc.out
+  Options: --dfcc main --enforce-contract bar
+  Results:
+    ^\[bar.postcondition.\d+\].*Check ensures clause of contract contract::bar for function bar: SUCCESS$
+    ^\[bar.assertion.\d+\].*x is r_ok: SUCCESS$
+    ^\[bar.assigns.\d+\].*Check that \*x is assignable: SUCCESS$
+    ^\[bar.assertion.\d+\].*deref x is r_ok: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks that bar satisfies its contract (bar gets replaced by its contract
+    test-foo.desc).
+Execution [SKIPPED]
+Test 'test_aliasing_ensure_indirect'
+  Level: KNOWNBUG
+  Input: main_foo.c
+  Descriptor: test-foo.desc
+  Output: test-foo-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo --replace-call-with-contract bar
+  Results:
+    ^\[foo.postcondition.\d+\].*Check ensures clause of contract contract::foo for function foo: SUCCESS$
+    ^\[foo.assertion.\d+\].*x1 r_ok: SUCCESS$
+    ^\[foo.assertion.\d+\].*x2 r_ok: SUCCESS$
+    ^\[foo.assertion.\d+\].*deref x2 r_ok: SUCCESS$
+    ^\[foo.assertion.\d+\].*deref x2 r_ok: SUCCESS$
+    ^\[foo.assertion.\d+\].*x2 updated: SUCCESS$
+    ^\[bar.precondition.\d+\].*Check requires clause of contract contract::bar for function bar: SUCCESS$
+    ^\[bar.assigns.\d+\].*Check that the assigns clause of contract::bar is included in the caller's assigns clause: SUCCESS$
+    ^\[bar.frees.\d+\].*Check that the frees clause of contract::bar is included in the caller's frees clause: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks that __CPROVER_is_fresh assumed as postconditions in the contract of bar
+    allows to satisfy the __CPROVER_is_fresh post condition of foo.
+Execution [SKIPPED]
+Test 'test_aliasing_replace'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[foo.precondition.\d+\] line \d+ Check requires clause of (contract contract::foo for function foo|foo in main): FAILURE$
+    ^\[main.assertion.\d+\] line \d+ assertion \!\(n \< 4\): SUCCESS$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Checks whether asserting __CPROVER_is_fresh will guarantee that objects
+    mapped to distinct objetcs.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 10
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=10$ [OK]
+^SIGNAL=0$ [OK]
+^\[foo.precondition.\d+\] line \d+ Check requires clause of (contract contract::foo for function foo|foo in main): FAILURE$ [OK]
+^\[main.assertion.\d+\] line \d+ assertion \!\(n \< 4\): SUCCESS$ [OK]
+^VERIFICATION FAILED$ [OK]
+
+Test 'test_array_memory_enforce'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    \[foo.postcondition.\d+\] line \d+ Check ensures clause( of contract contract::foo for function foo)?: SUCCESS
+    \[foo.assigns.\d+\] line \d+ Check that \*x is assignable: SUCCESS
+    \[foo.assigns.\d+\] line \d+ Check that x\[\(.* int\)5\] is assignable: SUCCESS
+    \[foo.assigns.\d+\] line \d+ Check that x\[\(.* int\)9\] is assignable: SUCCESS
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks whether __CPROVER_is_fresh behaves correctly for arrays both in
+    requires and ensures clauses. In the ensures clause, the __CPROVER_is_fresh
+    is unnecessary. By negating the predicate in the ensures clause, the test
+    proves that `x` is not fresh at end of the function.
+Execution [SKIPPED]
+Test 'test_array_memory_replace'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    Checks whether CBMC successfully asserts __CPROVER_is_fresh for arrays.
+Execution [SKIPPED]
+Test 'test_array_memory_too_small_replace'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^\[foo.precondition.\d+\] line \d+ Check requires clause of contract contract::foo for function foo: FAILURE$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    Checks whether CBMC successfully assert __CPROVER_is_fresh for arrays.
+    Test fails because allocated array was smaller then the one required
+    in the contract.
+Execution [SKIPPED]
+Test 'test_is_fresh_enforce_ensures_fail_separation_against_ensures'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^\[foo.assigns.\d+\].*Check that \*out1 is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\].*Check that \*out2 is assignable: SUCCESS$
+    ^\[foo.postcondition.\d+\].*Check ensures clause of contract contract::foo for function foo: FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test checks that using __CPROVER_is_fresh in postconditions when checking
+    a contract will effectively fail if objects can alias with objects seen by
+    __CPROVER_is_fresh in postconditions.
+Execution [SKIPPED]
+Test 'test_is_fresh_enforce_ensures_fail_separation_against_requires'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^\[foo.assertion.\d+\].*in1 is rw_ok: SUCCESS$
+    ^\[foo.assertion.\d+\].*in2 is rw_ok: SUCCESS$
+    ^\[foo.assertion.\d+\].*in1 and in2 do not alias: SUCCESS$
+    ^\[foo.postcondition.\d+\].*Check ensures clause of contract contract::foo for function foo: FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test checks that using __CPROVER_is_fresh in postconditions when checking
+    a contract will effectively fail if objects can alias with objects seen by
+    __CPROVER_is_fresh in preconditions.
+Execution [SKIPPED]
+Test 'test_is_fresh_enforce_ensures_fail_size'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^\[foo.assigns.\d+\].*Check that \*out is assignable: SUCCESS$
+    ^\[foo.postcondition.\d+\].*Check ensures clause of contract contract::foo for function foo: FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test checks that using __CPROVER_is_fresh in postconditions when checking
+    a contract will effectively fail if objects passed to __CPROVER_is_fresh have
+    the wrong size.
+Execution [SKIPPED]
+Test 'test_is_fresh_enforce_ensures_pass'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^\[foo.postcondition.\d+\].*Check ensures clause of contract contract::foo for function foo: SUCCESS$
+    ^\[foo.assertion.\d+\].*in1 is rw_ok: SUCCESS$
+    ^\[foo.assertion.\d+\].*in2 is rw_ok: SUCCESS$
+    ^\[foo.assertion.\d+\].*in1 and in2 do not alias: SUCCESS$
+    ^\[foo.assigns.\d+\].*Check that \*out1 is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\].*Check that \*out2 is assignable: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that using __CPROVER_is_fresh in postconditions when checking
+    a contract will effectively recognize fresh objects as fresh.
+Execution [SKIPPED]
+Test 'test_is_fresh_enforce_requires_pass'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^\[foo.assertion.\d+\].*in1 is rw_ok: SUCCESS$
+    ^\[foo.assertion.\d+\].*in2 is rw_ok: SUCCESS$
+    ^\[foo.assertion.\d+\].*in1 and in2 do not alias: SUCCESS$
+    ^\[foo.assertion.\d+\].*in1 is zero: SUCCESS$
+    ^\[foo.assertion.\d+\].*in2 is zero: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that using __CPROVER_is_fresh in preconditions when checking
+    a contract will effectively allocate fresh and distinct objects.
+    The rw_ok and sepatation checks are done using assertions inside the function.
+Execution [SKIPPED]
+Test 'test_is_fresh_replace_ensures_pass'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test-enforce.desc
+  Output: test-enforce-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^\[foo.assigns.\d+\].*Check that \*out_ptr1 is assignable: SUCCESS$
+    ^\[foo.assigns.\d+\].*Check that \*out_ptr2 is assignable: SUCCESS$
+    ^\[foo.postcondition.\d+\].*Check ensures clause of contract contract::foo for function foo: SUCCESS$
+    ^\[main.assertion.\d+\].*out1 is rw_ok: SUCCESS$
+    ^\[main.assertion.\d+\].*out2 is rw_ok: SUCCESS$
+    ^\[main.assertion.\d+\].*out1 and out2 are not aliased: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that foo satisfies its contract and serves as a baseline for
+    test-replace.desc.
+Execution [SKIPPED]
+Test 'test_is_fresh_replace_ensures_pass'
+  Level: CORE
+  Input: main.c
+  Descriptor: test-replace.desc
+  Output: test-replace-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^\[main.assertion.\d+\].*out1 is rw_ok: SUCCESS$
+    ^\[main.assertion.\d+\].*out2 is rw_ok: SUCCESS$
+    ^\[main.assertion.\d+\].*out1 and out2 are not aliased: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that when __CPROVER_is_fresh in preconditions replacement checks
+    succeed when separation and size are as expected.
+Execution [SKIPPED]
+Test 'test_is_fresh_replace_requires_fail_separation'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^\[foo.precondition.\d+\].*Check requires clause of contract contract::foo for function foo: FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test checks that when __CPROVER_is_fresh in preconditions replacement checks
+    fail when separation is not respected.
+Execution [SKIPPED]
+Test 'test_is_fresh_replace_requires_fail_size'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^\[foo.precondition.\d+\].*Check requires clause of contract contract::foo for function foo: FAILURE$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^VERIFICATION FAILED$
+    --
+    --
+    This test checks that when __CPROVER_is_fresh in preconditions replacement checks
+    fails when size is not as expected.
+Execution [SKIPPED]
+Test 'test_is_fresh_replace_requires_pass'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^\[foo.precondition.\d+\].*Check requires clause of contract contract::foo for function foo: SUCCESS$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    This test checks that when __CPROVER_is_fresh in preconditions replacement checks
+    succeed when separation and size are as expected.
+Execution [SKIPPED]
+Test 'test_possibly_aliased_arguments'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract sub_ptr_values
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[sub_ptr_values.precondition.\d+\] line \d+ Check requires clause of (contract contract::sub_ptr_values for function sub_ptr_values|sub_ptr_values in main): SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks whether __CPROVER_is_fresh can be used conditionally,
+    in order to allow possibly-aliased arguments.
+Execution [SKIPPED]
+Test 'test_scalar_memory_enforce'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    \[foo.postcondition.\d+\].*Check ensures clause( of contract contract::foo for function foo)?: SUCCESS
+    \[foo.assigns.\d+\] line \d+ Check that \*x is assignable: SUCCESS
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    Checks whether __CPROVER_is_fresh works properly for scalars (enforce context).
+    It tests both positive and negative cases for __CPROVER_is_fresh.
+Execution [SKIPPED]
+Test 'test_scalar_memory_replace'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    Checks whether __CPROVER_is_fresh works properly for scalars (replace context).
+Execution [SKIPPED]
+Test 'test_struct_enforce'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    \[foo.postcondition.\d+\] line \d+ Check ensures clause( of contract contract::foo for function foo)?: SUCCESS$
+    \[foo.assigns.\d+\] line \d+ Check that x->baz is assignable: SUCCESS
+    \[foo.assigns.\d+\] line \d+ Check that x->qux is assignable: SUCCESS
+    \[main.assertion.\d+\] line \d+ assertion rval \=\= 10: SUCCESS
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks whether assuming __CPROVER_is_fresh will guarantee a new freshly
+    allocated pointer (no aliasing) for structs.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+\[foo.postcondition.\d+\] line \d+ Check ensures clause( of contract contract::foo for function foo)?: SUCCESS$ [OK]
+\[foo.assigns.\d+\] line \d+ Check that x->baz is assignable: SUCCESS [OK]
+\[foo.assigns.\d+\] line \d+ Check that x->qux is assignable: SUCCESS [OK]
+\[main.assertion.\d+\] line \d+ assertion rval \=\= 10: SUCCESS [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+
+Test 'test_struct_member_enforce'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    \[foo.postcondition.\d+\] line \d+ Check ensures clause( of contract contract::foo for function foo)?: SUCCESS$
+    \[foo.assigns.\d+\] line \d+ Check that x->str\[\(.*\)\(x->len - 1\)\] is assignable: SUCCESS
+    \[main.assertion.\d+\] line \d+ assertion rval \=\= 128: SUCCESS
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks whether assuming __CPROVER_is_fresh will guarantee a new freshly
+    allocated pointer (no aliasing) for struct members.
+Execution [SKIPPED]
+Test 'test_struct_replace'
+  Level: KNOWNBUG
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract foo
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^\[foo.precondition.\d+\] line \d+ Check requires clause of (contract contract::foo for function foo|foo in main): SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion rval \=\= x->baz \+ x->qux: SUCCESS$
+    ^\[main.assertion.\d+\] line \d+ assertion \*x \=\= \*y: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+    Checks whether asserting __CPROVER_is_fresh will guarantee that objects
+    mapped to distinct objects (for structs).
+Execution [SKIPPED]
+Test 'trivial_contract_enforce'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.assertion.\d+\] line \d+ assertion foo\(\&n\) != 15: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Check whether CBMC doesn't crash when enforcing trivial contracts, i.e.,
+    the postcondition is true (default when missing) and therefore there is
+    nothing to check/assert.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 10
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=10$ [OK]
+^SIGNAL=0$ [OK]
+^\[main.assertion.\d+\] line \d+ assertion foo\(\&n\) != 15: FAILURE$ [OK]
+^VERIFICATION FAILED$ [OK]
+
+Test 'trivial_contract_replace'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --enforce-contract foo
+  Results:
+    ^EXIT=10$
+    ^SIGNAL=0$
+    ^\[main.assertion.\d+\] line \d+ assertion foo\(\&n\) != 15: FAILURE$
+    ^VERIFICATION FAILED$
+    --
+    --
+    Check whether CBMC doesn't crash when replacing trivial contracts, i.e.,
+    the precondition is true (default when missing) and therefore there is
+    nothing to check/assert.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 10
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=10$ [OK]
+^SIGNAL=0$ [OK]
+^\[main.assertion.\d+\] line \d+ assertion foo\(\&n\) != 15: FAILURE$ [OK]
+^VERIFICATION FAILED$ [OK]
+
+Test 'typed_target_fail_wrong_nof_operand'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --enforce-contract foo
+  Results:
+    ^main.c.*error: expected 1 argument for __CPROVER_typed_target, found 2$
+    ^CONVERSION ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that incorrect uses of __CPROVER_typed_target are detected and
+    rejected.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^main.c.*error: expected 1 argument for __CPROVER_typed_target, found 2$ [OK]
+^CONVERSION ERROR$ [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'typed_target_pointer'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --enforce-contract foo
+  Results:
+    ^\[foo.assigns.\d+\].* Check that __CPROVER_assignable\(\(void \*\)&x, .*, TRUE\) is valid: SUCCESS$
+    ^\[foo.assigns.\d+\].* Check that __CPROVER_assignable\(\(void \*\)&\(\*y\), .*, FALSE\) is valid: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks __CPROVER_typed_target calls with pointer arguments
+    get translated to __CPROVER_assignable(x, ... , TRUE),
+    and that calls with non pointer arguments get translated to
+    __CPROVER_assignable(x, ... , FALSE).
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --enforce-contract foo 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^\[foo.assigns.\d+\].* Check that __CPROVER_assignable\(\(void \*\)&x, .*, TRUE\) is valid: SUCCESS$ [OK]
+^\[foo.assigns.\d+\].* Check that __CPROVER_assignable\(\(void \*\)&\(\*y\), .*, FALSE\) is valid: SUCCESS$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'used_return_value'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --replace-call-with-contract get_at_idx
+  Results:
+    ^EXIT=0$
+    ^SIGNAL=0$
+    ^VERIFICATION SUCCESSFUL$
+    --
+    --
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --replace-call-with-contract get_at_idx 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 0
+  Signal: 0
+  Core: 0
+Execution [OK]
+^EXIT=0$ [OK]
+^SIGNAL=0$ [OK]
+^VERIFICATION SUCCESSFUL$ [OK]
+
+Test 'variant_function_call_fail'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^Decreases clause is not side-effect free. \(at: file main.c line .* function main\)$
+    ^EXIT=70$
+    ^SIGNAL=0$
+    --
+    --
+    This test fails because the decreases clause contains a function call. Decreases
+    clauses must not contain loops, since we want to ensure that the
+    calculation of decreases clauses will terminate. To enforce this requirement,
+    for now, we simply ban decreases clauses from containing function calls.
+    In the future, we may allow function calls (but definitely not loops) to appear
+    inside decreases clauses.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --apply-loop-contracts 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 70
+  Signal: 0
+  Core: 0
+Execution [OK]
+^Decreases clause is not side-effect free. \(at: file main.c line .* function main\)$ [OK]
+^EXIT=70$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'variant_init_inside_loop'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts _ --unsigned-overflow-check
+  Results:
+    ^\[main.loop_assigns.\d+\] line 6 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 6 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 6 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 6 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_decreases.\d+\] line 6 Check variant decreases after step for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that i is assignable: SUCCESS$
+    ^\[main\.overflow\.\d+\] .* arithmetic overflow on unsigned - in max - i: SUCCESS$
+    ^\[main\.overflow\.\d+\] .* arithmetic overflow on unsigned - in max - i: SUCCESS$
+    ^\[main\.overflow\.\d+\] .* arithmetic overflow on unsigned \+ in i \+ 1u: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that the decreases clause is evaluated only within the loop iteration,
+    not outside of it (before the loop guard).
+    The `main.overflow.1` check would fail if the decreases clause `(max - i)` is evaluated
+    before the loop guard is satisfied. This would occur when `start > max` and therefore
+    `i > max` after assuming the invariant.
+Execution [SKIPPED]
+Test 'variant_missing_invariant_warning'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^No invariant provided for loop main.0 at file main.c line 4 function main.
+    ^\[main.loop_assigns.\d+\] line 4 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 4 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 4 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 4 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_decreases.\d+\] line 4 Check variant decreases after step for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that i is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    This test succeeds, but it gives a warning that the user has not provided a loop
+    invariant. Hence, a default loop invariant (i.e. true) will be used. 
+Execution [SKIPPED]
+Test 'variant_multi_instruction_loop_head'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^\[main.loop_assigns.\d+\] line 6 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 6 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 6 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 6 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_decreases.\d+\] line 6 Check variant decreases after step for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] line \d+ Check that x is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    This test checks that decreases clause is properly initialized
+    when the loop head and loop invariant compilation emit several goto instructions.
+Execution [SKIPPED]
+Test 'variant_multidimensional_ackermann'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts --replace-call-with-contract ackermann
+  Results:
+    ^\[ackermann.precondition\.\d+\] line \d+ Check requires clause of contract contract\:\:ackermann for function ackermann: SUCCESS$
+    ^\[ackermann.assigns.\d+\] line \d+ Check that the assigns clause of contract\:\:ackermann is included in the caller\'s assigns clause: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    It tests whether we can prove (only partially) the termination of the Ackermann
+    function using a multidimensional decreases clause. 
+    
+    Note that this particular implementation of the Ackermann function contains
+    both a while-loop and recursion. Therefore, to fully prove the termination of 
+    the Ackermann function, we must prove both 
+    (i) the termination of the while-loop and
+    (ii) the termination of the recursion. 
+    Because CBMC does not support termination proofs of recursions (yet), we cannot
+    prove the latter, but the former. Hence, the termination proof in the code is
+    only "partial."
+    
+    Furthermore, the Ackermann function has a function contract that the result
+    is always non-negative. This post-condition is necessary for establishing
+    the loop invariant. However, in this test, we do not enforce the function
+    contract. Instead, we assume that the function contract is correct and use it
+    (i.e. replace a recursive call of the Ackermann function with its contract). 
+    
+    We cannot verify/enforce the function contract of the Ackermann function, since
+    CBMC does not support function contracts for recursively defined functions.
+    As of now, CBMC only supports function contracts for non-recursive functions. 
+Execution [SKIPPED]
+Test 'variant_multidimensional_not_decreasing_fail1'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^\[main.loop_assigns.\d+\] line 6 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 6 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 6 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 6 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_decreases.\d+\] line 6 Check variant decreases after step for loop .*: FAILURE$
+    ^\[main.assigns.\d+\] line 14 Check that j is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] line 18 Check that i is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] line 19 Check that j is assignable: SUCCESS$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    This test fails because the given multidimensional decreases clause does not
+    monotonically decrease. A mistake is in the second component of the
+    decreases clause: j. It should instead be N - j.
+Execution [SKIPPED]
+Test 'variant_multidimensional_not_decreasing_fail2'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^\[main.loop_assigns.\d+\] line 6 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 6 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 6 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 6 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_decreases.\d+\] line 6 Check variant decreases after step for loop .*: FAILURE$
+    ^\[main.assigns.\d+\] line 14 Check that j is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] line 18 Check that i is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] line 19 Check that j is assignable: SUCCESS$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    This test fails because the given multidimensional decreases clause does not
+    monotonically decrease. A mistake is in the first component of the
+    decreases clause: i. It should instead be N - i.
+Execution [SKIPPED]
+Test 'variant_multidimensional_two_index_variables'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^\[main.loop_assigns.\d+\] line 6 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 6 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 6 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 6 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_decreases.\d+\] line 6 Check variant decreases after step for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] line 14 Check that j is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] line 18 Check that i is assignable: SUCCESS$
+    ^\[main.assigns.\d+\] line 19 Check that j is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    It tests whether a multidimensional decreases clause works properly. 
+Execution [SKIPPED]
+Test 'variant_not_decreasing_fail'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^\[main.loop_assigns.\d+\] line 6 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 6 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 6 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 6 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_decreases.\d+\] line 6 Check variant decreases after step for loop .*: FAILURE$
+    ^\[main.assigns.\d+] .* Check that i is assignable: SUCCESS$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    This test fails because the decreases clause is not monotinically decreasing.
+Execution [SKIPPED]
+Test 'variant_parsing_multiple_clauses_fail'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^main.c.*error: syntax error before '__CPROVER_decreases'\n.*__CPROVER_decreases\(42\)$
+    ^PARSING ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    This test fails because we have multiple decreases clauses. CBMC only admits
+    one decreases clause for each loop. If one wants to write a multidimensional
+    decreases clause, it should be placed inside a single __CPROVER_decreases(...),
+    where each component of the multidimensional decreases clause is separated by a
+    comma. Hence, in this test, the correct syntax is
+    __CPROVER_decreases(N - i, 42).
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --apply-loop-contracts 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^main.c.*error: syntax error before '__CPROVER_decreases'\n.*__CPROVER_decreases\(42\)$ [OK]
+^PARSING ERROR$ [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'variant_parsing_statement_fail'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^main.c.*error: syntax error before 'int'\n.*__CPROVER_decreases\(int x = 0\)$
+    ^PARSING ERROR$
+    ^EXIT=(1|64)$
+    ^SIGNAL=0$
+    --
+    --
+    This test fails because the decreases clause is a statement (more precisely,
+    an assignment) rather than an expression (more precisely, an ACSL binding
+    expression).
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --apply-loop-contracts 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 1
+  Signal: 0
+  Core: 0
+Execution [OK]
+^main.c.*error: syntax error before 'int'\n.*__CPROVER_decreases\(int x = 0\)$ [OK]
+^PARSING ERROR$ [OK]
+^EXIT=(1|64)$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'variant_side_effects_fail'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^Decreases clause is not side-effect free. \(at: file main.c line .* function main\)$
+    ^EXIT=70$
+    ^SIGNAL=0$
+    --
+    --
+    This test fails because the decreases clause contains a side effect, namely
+    incrementing variable N by zero. In this case, although the value of N
+    remains unchanged after the increment operation, we read from and write to N.
+    So this constitues a side effect. Decreases clauses are banned from containing
+    side effects, since decreases clauses should not modify program states.
+Running ../chain.sh ../../../src/goto-cc/goto-cc ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc false false --dfcc main --apply-loop-contracts 'main.c' >'test-non-dfcc.out' 2>&1
+  Exit: 70
+  Signal: 0
+  Core: 0
+Execution [OK]
+^Decreases clause is not side-effect free. \(at: file main.c line .* function main\)$ [OK]
+^EXIT=70$ [OK]
+^SIGNAL=0$ [OK]
+
+Test 'variant_weak_invariant_fail'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^\[main.loop_assigns.\d+\] line 6 Check assigns clause inclusion for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 6 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 6 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 6 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_decreases.\d+\] line 6 Check variant decreases after step for loop .*: FAILURE$
+    ^\[main.assigns.\d+\] .* Check that i is assignable: SUCCESS$
+    ^VERIFICATION FAILED$
+    ^EXIT=10$
+    ^SIGNAL=0$
+    --
+    --
+    This test fails because the loop invariant is not strong enough for the
+    termination proof. We must add 0 <= i to the loop invariant.
+Execution [SKIPPED]
+Test 'variant_while_true_pass'
+  Level: CORE
+  Input: main.c
+  Descriptor: test.desc
+  Output: test-non-dfcc.out
+  Options: --dfcc main --apply-loop-contracts
+  Results:
+    ^\[main.loop_invariant_base.\d+\] line 6 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_base.\d+\] line 6 Check invariant before entry for loop .*: SUCCESS$
+    ^\[main.loop_invariant_step.\d+\] line 6 Check invariant after step for loop .*: SUCCESS$
+    ^\[main.loop_step_unwinding.\d+\] line 6 Check step was unwound for loop .*: SUCCESS$
+    ^\[main.loop_decreases.\d+\] line 6 Check variant decreases after step for loop .*: SUCCESS$
+    ^\[main.assigns.\d+\] .* Check that i is assignable: SUCCESS$
+    ^VERIFICATION SUCCESSFUL$
+    ^EXIT=0$
+    ^SIGNAL=0$
+    --
+    --
+    The purpose of this test is to check whether a decreases clause can
+    successfully prove the termination of a loop (i) whose exit condition is
+    1 == 1 (i.e. true) and (ii) that will eventually exit via a break statement.
+Execution [SKIPPED]
--- cbmc-5.84.0.orig/regression/contracts/assigns-enforce-malloc-zero/test.desc
+++ cbmc-5.84.0/regression/contracts/assigns-enforce-malloc-zero/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --enforce-contract foo _ --malloc-may-fail --malloc-fail-null
 ^\[foo.assigns.\d+\] line 9 Check that __CPROVER_object_whole\(\(.* \*\)a\) is valid when a != \(\(.* \*\)NULL\): SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts/assigns-replace-malloc-zero/test.desc
+++ cbmc-5.84.0/regression/contracts/assigns-replace-malloc-zero/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --replace-call-with-contract foo _ --malloc-may-fail --malloc-fail-null
 ^\[foo.precondition.\d+\] line \d+ Check requires clause of foo in main: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts/assigns_enforce_arrays_05/test.desc
+++ cbmc-5.84.0/regression/contracts/assigns_enforce_arrays_05/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --enforce-contract uses_assigns
 ^\[uses_assigns.assigns.\d+\] line \d+ Check that \*\(&a\[\(.*int\)i\]\) is valid: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts/assigns_enforce_conditional_pointer_object/test.desc
+++ cbmc-5.84.0/regression/contracts/assigns_enforce_conditional_pointer_object/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --enforce-contract foo
 main.c function foo
--- cbmc-5.84.0.orig/regression/contracts/assigns_enforce_conditional_pointer_object_list/test.desc
+++ cbmc-5.84.0/regression/contracts/assigns_enforce_conditional_pointer_object_list/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --enforce-contract foo
 main.c function foo
--- cbmc-5.84.0.orig/regression/contracts/assigns_enforce_offsets_2/test.desc
+++ cbmc-5.84.0/regression/contracts/assigns_enforce_offsets_2/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --enforce-contract foo _ --pointer-check
 ^\[foo.assigns.*\d+\].* line 5 Check that \*x is valid: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts/assigns_enforce_offsets_4/test.desc
+++ cbmc-5.84.0/regression/contracts/assigns_enforce_offsets_4/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --enforce-contract foo _ --pointer-check
 ^\[foo.assigns.*\d+\].* line 5 Check that x\[\(.*\)10\] is valid: FAILURE$
--- cbmc-5.84.0.orig/regression/contracts/assigns_enforce_structs_06/test.desc
+++ cbmc-5.84.0/regression/contracts/assigns_enforce_structs_06/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --enforce-contract f1 --enforce-contract f2 --enforce-contract f3
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/contracts/assigns_enforce_structs_07/test.desc
+++ cbmc-5.84.0/regression/contracts/assigns_enforce_structs_07/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --enforce-contract f1 --enforce-contract f2 _ --malloc-may-fail --malloc-fail-null --pointer-check
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/contracts/assigns_enforce_structs_08/test.desc
+++ cbmc-5.84.0/regression/contracts/assigns_enforce_structs_08/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --enforce-contract f1 --enforce-contract f2 _ --malloc-may-fail --malloc-fail-null --pointer-check
 ^\[f1.assigns.\d+\] line \d+ Check that p->buf\[\(.*\)0\] is assignable: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts/assigns_type_checking_valid_cases/test.desc
+++ cbmc-5.84.0/regression/contracts/assigns_type_checking_valid_cases/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --enforce-contract foo1 --enforce-contract foo2 --enforce-contract foo3 --enforce-contract foo4 --enforce-contract foo5 --enforce-contract foo6 --enforce-contract foo7 --enforce-contract foo8 --enforce-contract foo9 --enforce-contract foo10 _ --pointer-primitive-check
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts/invar_havoc_dynamic_array/test.desc
+++ cbmc-5.84.0/regression/contracts/invar_havoc_dynamic_array/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --apply-loop-contracts
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/contracts/invar_havoc_dynamic_array_const_idx/test.desc
+++ cbmc-5.84.0/regression/contracts/invar_havoc_dynamic_array_const_idx/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --apply-loop-contracts
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/contracts/invar_havoc_static_array/test.desc
+++ cbmc-5.84.0/regression/contracts/invar_havoc_static_array/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --apply-loop-contracts
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/contracts/invar_havoc_static_array_const_idx/test.desc
+++ cbmc-5.84.0/regression/contracts/invar_havoc_static_array_const_idx/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --apply-loop-contracts
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/contracts/invar_havoc_static_multi-dim_array_all_const_idx/test.desc
+++ cbmc-5.84.0/regression/contracts/invar_havoc_static_multi-dim_array_all_const_idx/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --apply-loop-contracts
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/contracts/invar_havoc_static_multi-dim_array_partial_const_idx/test.desc
+++ cbmc-5.84.0/regression/contracts/invar_havoc_static_multi-dim_array_partial_const_idx/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --apply-loop-contracts
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/contracts/loop_assigns-slice-assignable-scalar/test.desc
+++ cbmc-5.84.0/regression/contracts/loop_assigns-slice-assignable-scalar/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --apply-loop-contracts
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/contracts/loop_assigns-slice-upto-fail/test.desc
+++ cbmc-5.84.0/regression/contracts/loop_assigns-slice-upto-fail/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --apply-loop-contracts
 ^\[main.\d+\] .* Check loop invariant before entry: SUCCESS$
--- cbmc-5.84.0.orig/regression/contracts/loop_contracts_binary_search/test.desc
+++ cbmc-5.84.0/regression/contracts/loop_contracts_binary_search/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --apply-loop-contracts _ --pointer-check --bounds-check --signed-overflow-check
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts/quantifiers-forall-ensures-enforce/test.desc
+++ cbmc-5.84.0/regression/contracts/quantifiers-forall-ensures-enforce/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --enforce-contract f1
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts/quantifiers-loop-01/test.desc
+++ cbmc-5.84.0/regression/contracts/quantifiers-loop-01/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --apply-loop-contracts
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/contracts/quantifiers-loop-03/test.desc
+++ cbmc-5.84.0/regression/contracts/quantifiers-loop-03/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --apply-loop-contracts
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/cpp-linter/Makefile
+++ cbmc-5.84.0/regression/cpp-linter/Makefile
@@ -1,10 +1,10 @@
 default: tests.log
 
 test:
-	@../test.pl -p -c ../../../scripts/cpplint.py
+	@../test.pl -p -c '../../../scripts/cpplint.py --repository=../../../'
 
 tests.log: ../test.pl
-	@../test.pl -p -c ../../../scripts/cpplint.py
+	@../test.pl -p -c '../../../scripts/cpplint.py --repository=../../../'
 
 clean:
 	find . -name '*.out' -execdir $(RM) '{}' \;
--- cbmc-5.84.0.orig/regression/cpp/Method_qualifier1/test.desc
+++ cbmc-5.84.0/regression/cpp/Method_qualifier1/test.desc
@@ -1,4 +1,4 @@
-CORE winbug macos-assert-broken
+KNOWNBUG
 main.cpp
 
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/cpp/auto1/test.desc
+++ cbmc-5.84.0/regression/cpp/auto1/test.desc
@@ -1,4 +1,4 @@
-CORE winbug macos-assert-broken
+KNOWNBUG
 main.cpp
 -std=c++11
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/cpp/switch1/test.desc
+++ cbmc-5.84.0/regression/cpp/switch1/test.desc
@@ -1,4 +1,4 @@
-CORE winbug macos-assert-broken
+KNOWNBUG
 main.cpp
 
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/cprover/Makefile
+++ cbmc-5.84.0/regression/cprover/Makefile
@@ -10,4 +10,5 @@ test-no-p:
 	@../test.pl -e -c '../../../src/cprover/cprover'
 
 clean:
+	find . -name '*.out' -execdir $(RM) '{}' \;
 	$(RM) tests.log
--- cbmc-5.84.0.orig/regression/cprover/arrays/array2.desc
+++ cbmc-5.84.0/regression/cprover/arrays/array2.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 array2.c
 --text --solve --inline --no-safety
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/cprover/loops/given_invariant8.desc
+++ cbmc-5.84.0/regression/cprover/loops/given_invariant8.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 given_invariant8.c
 --safety
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/cprover/loops/given_invariant9.desc
+++ cbmc-5.84.0/regression/cprover/loops/given_invariant9.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 given_invariant9.c
 --safety
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/cprover/pointers/malloc1.desc
+++ cbmc-5.84.0/regression/cprover/pointers/malloc1.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 malloc1.c
 --text --solve --inline
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/goto-analyzer/constant_propagation_08/test-vsd.desc
+++ cbmc-5.84.0/regression/goto-analyzer/constant_propagation_08/test-vsd.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --variable-sensitivity --vsd-arrays every-element --simplify out.gb
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/goto-analyzer/constant_propagation_11/test-vsd.desc
+++ cbmc-5.84.0/regression/goto-analyzer/constant_propagation_11/test-vsd.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --variable-sensitivity --vsd-arrays every-element --simplify out.gb
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/goto-analyzer/constant_propagation_11/test.desc
+++ cbmc-5.84.0/regression/goto-analyzer/constant_propagation_11/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --constants --simplify out.gb
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/goto-analyzer/pointer-difference-simple/test-top-bottom.desc
+++ cbmc-5.84.0/regression/goto-analyzer/pointer-difference-simple/test-top-bottom.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --variable-sensitivity --vsd-pointers top-bottom --verify
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/goto-analyzer/pointer-differences-non-det/test-constants.desc
+++ cbmc-5.84.0/regression/goto-analyzer/pointer-differences-non-det/test-constants.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --variable-sensitivity --vsd-pointers constants --verify
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/goto-analyzer/pointer-differences-non-det/test-top-bottom.desc
+++ cbmc-5.84.0/regression/goto-analyzer/pointer-differences-non-det/test-top-bottom.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --variable-sensitivity --vsd-pointers top-bottom --verify
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/goto-analyzer/pointer-differences/test-top-bottom.desc
+++ cbmc-5.84.0/regression/goto-analyzer/pointer-differences/test-top-bottom.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --variable-sensitivity --vsd-pointers top-bottom --verify
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/goto-analyzer/variable-sensitivity-dependence-graph-toyota/test.desc
+++ cbmc-5.84.0/regression/goto-analyzer/variable-sensitivity-dependence-graph-toyota/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 file1.c file2.c --dependence-graph-vs --vsd-structs every-field --vsd-arrays every-element --show
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/goto-analyzer/variable-sensitivity-dependence-graph/test.desc
+++ cbmc-5.84.0/regression/goto-analyzer/variable-sensitivity-dependence-graph/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 file1.c file2.c --dependence-graph-vs --vsd-structs every-field --vsd-arrays every-element --show
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/goto-analyzer/variable-sensitivity-dependence-graph17/test.desc
+++ cbmc-5.84.0/regression/goto-analyzer/variable-sensitivity-dependence-graph17/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 --dependence-graph-vs --vsd-arrays every-element --show
 activate-multi-line-match
--- cbmc-5.84.0.orig/regression/goto-harness/Makefile
+++ cbmc-5.84.0/regression/goto-harness/Makefile
@@ -23,4 +23,5 @@ tests.log: ../test.pl
 clean:
 	find . -name '*.out' -execdir $(RM) '{}' \;
 	find . -name '*.gb' -execdir $(RM) {} \;
+	find . -name '*-harness.c' -execdir $(RM) {} \;
 	$(RM) tests.log
--- cbmc-5.84.0.orig/regression/goto-harness/load-snapshot-static-global-pointer-01/test.desc
+++ cbmc-5.84.0/regression/goto-harness/load-snapshot-static-global-pointer-01/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 harness.gb --harness-type initialize-with-memory-snapshot --memory-snapshot snapshot.json --initial-goto-location main:0
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/goto-harness/pointer-to-array-function-parameters-max-size/test.desc
+++ cbmc-5.84.0/regression/goto-harness/pointer-to-array-function-parameters-max-size/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 test.c
 --harness-type call-function --function test --max-array-size 10 --associated-array-size arr:sz
 \[test.assertion.1\] line \d+ assertion sz < 10: FAILURE
--- cbmc-5.84.0.orig/regression/goto-harness/pointer-to-array-function-parameters-multi-arg-wrong/test.desc
+++ cbmc-5.84.0/regression/goto-harness/pointer-to-array-function-parameters-multi-arg-wrong/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 test.c
 --harness-type call-function --function is_prefix_of --treat-pointer-as-array string --treat-pointer-as-array prefix --associated-array-size string:string_size --associated-array-size prefix:prefix_size --max-array-size 5
 ^EXIT=10$
--- cbmc-5.84.0.orig/regression/goto-harness/pointer-to-array-function-parameters-with-size/test.desc
+++ cbmc-5.84.0/regression/goto-harness/pointer-to-array-function-parameters-with-size/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 test.c
 --harness-type call-function --function test --treat-pointer-as-array arr --associated-array-size arr:sz
 ^EXIT=0$
--- cbmc-5.84.0.orig/regression/goto-harness/pointer-to-array-function-parameters/test.desc
+++ cbmc-5.84.0/regression/goto-harness/pointer-to-array-function-parameters/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 test.c
 --harness-type call-function --function test --treat-pointer-as-array arr
 \[test.pointer_dereference.\d+\] line \d+ dereference failure: pointer outside object bounds in arr\[\(signed( long)* int\)0\]: SUCCESS
--- cbmc-5.84.0.orig/regression/goto-instrument/enable-pragmas/test.desc
+++ cbmc-5.84.0/regression/goto-instrument/enable-pragmas/test.desc
@@ -1,4 +1,4 @@
-CORE
+KNOWNBUG
 main.c
 
 ^\[main.array_bounds.\d+\] line \d+ array 'a' upper bound in a\[\(signed .* int\)2\]: FAILURE
@@ -8,4 +8,4 @@ main.c
 --
 --
 Checks that enable pragmas do not cause invariant failures when running goto-instrument
-and cbmc in sequence.
\ No newline at end of file
+and cbmc in sequence.
