Skip to content

Commit 8ba1734

Browse files
authored
Merge pull request #3284 from diffblue/smt2-bv-fix
smt2 bit vector fix [blocks: any PR adding CBMC tests]
2 parents e44a9ab + 33cfe25 commit 8ba1734

File tree

4 files changed

+11
-137
lines changed

4 files changed

+11
-137
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ install:
354354
script:
355355
- if [ -e bin/gcc ] ; then export PATH=$PWD/bin:$PATH ; fi ;
356356
- env UBSAN_OPTIONS=print_stacktrace=1 make -C regression test-parallel "CXX=${COMPILER} ${EXTRA_CXXFLAGS}" -j2 JOBS=2
357-
- scripts/delete_failing_smt2_solver_tests ; env UBSAN_OPTIONS=print_stacktrace=1 make -C regression/cbmc test-cprover-smt2
357+
- scripts/delete_failing_smt2_solver_tests ; env PATH=$PATH:`pwd`/src/solvers UBSAN_OPTIONS=print_stacktrace=1 make -C regression/cbmc test-cprover-smt2
358358
- make -C unit "CXX=${COMPILER} ${EXTRA_CXXFLAGS}" -j2
359359
- make -C unit test
360360
- env UBSAN_OPTIONS=print_stacktrace=1 make -C jbmc/regression test-parallel "CXX=${COMPILER} ${EXTRA_CXXFLAGS}" -j2 JOBS=2

buildspec.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ phases:
2525
- make -C unit test
2626
- make -C regression test
2727
- scripts/delete_failing_smt2_solver_tests
28-
- make -C regression/cbmc test-cprover-smt2
28+
- env PATH=$PATH:`pwd`/src/solvers make -C regression/cbmc test-cprover-smt2
2929
- make -C jbmc/unit test
3030
- make -C jbmc/regression test
3131
- echo Build completed on `date`
Lines changed: 1 addition & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,25 @@
11
#!/bin/sh
22

33
cd regression/cbmc
4-
rm ACSL/operators.desc
54
rm Address_of2/test.desc
65
rm Anonymous_Struct3/test.desc
76
rm Array_Initialization2/test.desc
87
rm Array_operations1/test.desc
9-
rm Assumption1/test.desc
10-
rm BV_Arithmetic1/test.desc
118
rm BV_Arithmetic6/test.desc
129
rm Bitfields1/test.desc
1310
rm Bitfields3/test.desc
14-
rm Bool1/test.desc
15-
rm Bool2/test.desc
16-
rm Bool3/test.desc
17-
rm Boolean_Guards1/test.desc
18-
rm Computed-Goto1/test.desc
1911
rm Division2/test.desc
2012
rm Double-to-float-no-simp1/test.desc
2113
rm Double-to-float-no-simp1-fix1/test.desc
2214
rm Double-to-float-no-simp1-fix2/test.desc
23-
rm Ellipsis2/test.desc
2415
rm Empty_struct1/test.desc
25-
rm Endianness1/test.desc
26-
rm Endianness2/test.desc
2716
rm Endianness3/test.desc
2817
rm Endianness4/test.desc
2918
rm Endianness6/test.desc
3019
rm Endianness7/test.desc
31-
rm Endianness8/test.desc
32-
rm Error_Label1/test.desc
33-
rm Error_Label2/test.desc
34-
rm Error_Label3/test.desc
35-
rm Eval_Order1/test.desc
36-
rm Failing_Assert1/test.desc
3720
rm Fixedbv3/test.desc
3821
rm Fixedbv5/test.desc
3922
rm Fixedbv6/test.desc
40-
rm Fixedbv8/test.desc
4123
rm Float-Rounding1/test.desc
4224
rm Float-div1/test.desc
4325
rm Float-div2/test.desc
@@ -53,7 +35,6 @@ rm Float-no-simp6/test.desc
5335
rm Float-no-simp7/test.desc
5436
rm Float-no-simp8/test.desc
5537
rm Float-no-simp9/test.desc
56-
rm Float-overflow2/test.desc
5738
rm Float-smt2-1/test.desc
5839
rm Float-to-double1/test.desc
5940
rm Float-to-double2/test.desc
@@ -74,68 +55,31 @@ rm Float4/test.desc
7455
rm Float5/test.desc
7556
rm Float6/test.desc
7657
rm Float8/test.desc
77-
rm Free1/test.desc
7858
rm Free2/test.desc
79-
rm Free3/test.desc
80-
rm Free4/test.desc
8159
rm Function1/test.desc
82-
rm Function2/test.desc
83-
rm Function5/test.desc
84-
rm Function8/test.desc
85-
rm Function9/test.desc
86-
rm Function_Eval_Order2/test.desc
87-
rm Function_Pointer15/test.desc
88-
rm Function_Pointer2/test.desc
8960
rm Function_Pointer3/test.desc
90-
rm Function_Pointer6/test.desc
91-
rm Function_Pointer8/test.desc
92-
rm Function_Pointer9/test.desc
93-
rm Initialization5/test.desc
94-
rm Initialization6/test.desc
9561
rm Linking4/test.desc
9662
rm Linking7/test.desc
97-
rm Linking8/test.desc
98-
rm Local_out_of_scope1/test.desc
99-
rm Local_out_of_scope2/test.desc
100-
rm Local_out_of_scope3/test.desc
101-
rm Malloc15/test.desc
10263
rm Malloc17/test.desc
10364
rm Malloc18/test.desc
10465
rm Malloc19/test.desc
10566
rm Malloc20/test.desc
106-
rm Malloc21/test.desc
10767
rm Malloc23/test.desc
10868
rm Malloc24/test.desc
10969
rm Memmove1/test.desc
11070
rm Memory_leak1/test.desc
11171
rm Memory_leak2/test.desc
112-
rm Mod1/test.desc
113-
rm Mod2/test.desc
114-
rm Multi_Dimensional_Array1/test.desc
11572
rm Multi_Dimensional_Array2/test.desc
116-
rm Multi_Dimensional_Array3/test.desc
11773
rm Multi_Dimensional_Array4/test.desc
11874
rm Multi_Dimensional_Array6/test.desc
11975
rm Multiple_Properties1/test.desc
120-
rm Negation2/test.desc
121-
rm Overflow_Addition1/test.desc
12276
rm Overflow_Leftshift1/test.desc
123-
rm Overflow_Multiplication1/test.desc
12477
rm Overflow_Subtraction1/test.desc
125-
rm Pointer_Arithmetic1/test.desc
12678
rm Pointer_Arithmetic10/test.desc
12779
rm Pointer_Arithmetic11/test.desc
12880
rm Pointer_Arithmetic12/test.desc
129-
rm Pointer_Arithmetic5/test.desc
13081
rm Pointer_Arithmetic6/test.desc
131-
rm Pointer_Arithmetic8/test.desc
132-
rm Pointer_array1/test.desc
133-
rm Pointer_array2/test.desc
134-
rm Pointer_array3/test.desc
135-
rm Pointer_array4/test.desc
13682
rm Pointer_array5/test.desc
137-
rm Pointer_array6/test.desc
138-
rm Pointer_byte_extract1/test.desc
13983
rm Pointer_byte_extract2/test.desc
14084
rm Pointer_byte_extract3/test.desc
14185
rm Pointer_byte_extract4/test.desc
@@ -158,30 +102,19 @@ rm Quantifiers-not-exists/test.desc
158102
rm Quantifiers-two-dimension-array/test.desc
159103
rm Quantifiers-type/test.desc
160104
rm Quantifiers1/test.desc
161-
rm Recursion4/test.desc
162105
rm Recursion5/test.desc
163-
rm Sideeffects5/test.desc
164-
rm Sideeffects6/test.desc
165-
rm String2/test.desc
166106
rm String6/test.desc
167107
rm Struct_Bytewise1/test.desc
168108
rm Struct_Bytewise2/test.desc
169109
rm Struct_Initialization2/test.desc
170-
rm Struct_Initialization5/test.desc
171110
rm Struct_Padding1/test.desc
172-
rm Typecast1/test.desc
173-
rm Typecast2/test.desc
174-
rm Undefined_Function1/test.desc
175-
rm Undefined_Function2/test.desc
176111
rm Undefined_Shift1/test.desc
177112
rm Union_Initialization1/test.desc
178113
rm Unwinding_Locality1/test.desc
179-
rm abs1/test.desc
180114
rm address_space_size_limit1/test.desc
181115
rm address_space_size_limit3/test.desc
182116
rm argv1/test.desc
183117
rm array-tests/test.desc
184-
rm atomic_section_seq1/test.desc
185118
rm big-endian-array1/test.desc
186119
rm bounds_check1/test.desc
187120
rm byte_update1/test.desc
@@ -191,16 +124,8 @@ rm byte_update4/test.desc
191124
rm byte_update5/test.desc
192125
rm byte_update6/test.desc
193126
rm byte_update7/test.desc
194-
rm byte_update8/test.desc
195-
rm byte_update9/test.desc
196-
rm c99_Bool/test.desc
197-
rm cprover_bool1/test.desc
198-
rm divide-by-one-simplify/test.desc
199127
rm dynamic_size1/stack_object.desc
200128
rm dynamic_size1/test.desc
201-
rm dynamic_sizeof1/test.desc
202-
rm enum3/test.desc
203-
rm enum5/test.desc
204129
rm equality_through_array1/test.desc
205130
rm equality_through_array2/test.desc
206131
rm equality_through_array3/test.desc
@@ -211,109 +136,60 @@ rm equality_through_array_of_struct1/test.desc
211136
rm equality_through_array_of_struct2/test.desc
212137
rm equality_through_array_of_struct3/test.desc
213138
rm equality_through_array_of_struct4/test.desc
214-
rm equality_through_struct1/test.desc
215-
rm equality_through_struct2/test.desc
216-
rm equality_through_struct3/test.desc
217-
rm equality_through_struct4/test.desc
218-
rm equality_through_struct5/test.desc
219139
rm equality_through_struct_containing_arrays1/test.desc
220140
rm equality_through_struct_containing_arrays2/test.desc
221141
rm equality_through_struct_containing_arrays3/test.desc
222142
rm equality_through_union1/test.desc
223143
rm equality_through_union2/test.desc
224144
rm equality_through_union3/test.desc
225-
rm exit1/test.desc
226-
rm extern_initialization1/test.desc
227145
rm fgets1/test.desc
228-
rm for2/test.desc
229146
rm full_slice1/test.desc
230147
rm full_slice2/test.desc
231148
rm gcc_bswap1/test.desc
232-
rm gcc_c99-bool-1/test.desc
233-
rm gcc_local_label1/test.desc
234-
rm gcc_popcount1/test.desc
235149
rm gcc_statement_expression4/test.desc
236150
rm gcc_switch_case_range1/test.desc
237151
rm gcc_switch_case_range2/test.desc
238152
rm gcc_vector1/test.desc
239153
rm gcc_vector2/test.desc
240-
rm getenv-overflow1/test.desc
241-
rm goto1/test.desc
242-
rm goto2/test.desc
243-
rm goto4/test.desc
244-
rm goto5/test.desc
245154
rm graphml_witness1/test.desc
246155
rm havoc_object1/test.desc
247156
rm hex_trace/test.desc
248-
rm if1/test.desc
249157
rm if2/test.desc
250-
rm if3/test.desc
251-
rm if4/test.desc
252158
rm inet_endian1/test.desc
253159
rm int-to-float2/test.desc
254160
rm integer-assignments1/test.desc
255-
rm json1/test.desc
256161
rm little-endian-array1/test.desc
257-
rm member1/test.desc
258-
rm memcpy1/test.desc
259-
rm memcpy2/test.desc
260-
rm memcpy3/test.desc
261162
rm memory_allocation1/test.desc
262-
rm memset1/test.desc
263163
rm memset3/test.desc
264164
rm mm_io1/test.desc
265165
rm nested_label1/test.desc
266166
rm no_nondet_static/test.desc
267-
rm null1/test.desc
268-
rm null2/test.desc
269-
rm path-per-path-vccs/test.desc
270167
rm pipe1/test.desc
271-
rm pointer-extra-checks/test.desc
272168
rm pointer-function-parameters/test.desc
273169
rm pointer-function-parameters-2/test.desc
274-
rm posix_memalign/test.desc
275-
rm printf1/test.desc
276170
rm read1/test.desc
277171
rm realloc1/test.desc
278172
rm realloc2/test.desc
279-
rm return2/test.desc
280-
rm return5/test.desc
281173
rm scanf1/test.desc
282-
rm self_loops_to_assumptions1/no-assume.desc
283174
rm simple_assert/test.desc
284175
rm stack-trace/test.desc
285176
rm strcat1/test.desc
286-
rm struct1/test.desc
287177
rm struct10/test.desc
288-
rm struct3/test.desc
289178
rm struct6/test.desc
290179
rm struct7/test.desc
291-
rm struct8/test.desc
292180
rm struct9/test.desc
293-
rm switch1/test.desc
294-
rm switch2/test.desc
295-
rm switch3/test.desc
296-
rm switch4/test.desc
297-
rm switch5/test.desc
298-
rm trace_address_arithmetic1/test.desc
299181
rm trace-values/trace-values.desc
300-
rm trace_options_json_extended/extended.desc
301-
rm trace_options_json_extended/non-extended.desc
302-
rm trace_show_code/test.desc
182+
rm trace_address_arithmetic1/test.desc
303183
rm trace_show_function_calls/test.desc
304184
rm uncaught_exceptions_analysis1/test.desc
305185
rm uniform_array1/test.desc
306186
rm union11/union_list.desc
307-
rm union3/test.desc
308187
rm union5/test.desc
309188
rm union6/test.desc
310189
rm union7/test.desc
311190
rm union8/test.desc
312191
rm union9/test.desc
313192
rm unsigned___int128/test.desc
314-
rm unwind_counters2/test.desc
315-
rm unwind_counters3/test.desc
316-
rm variable-access-to-constant-array/test.desc
317193
rm void_pointer2/test.desc
318194
rm void_pointer3/test.desc
319195
rm while1/test.desc

src/solvers/smt2/smt2_conv.cpp

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -268,11 +268,11 @@ constant_exprt smt2_convt::parse_literal(
268268
if(type.id()==ID_floatbv)
269269
{
270270
const floatbv_typet &floatbv_type=to_floatbv_type(type);
271-
constant_exprt s1=parse_literal(src.get_sub()[1], bv_typet(1));
272-
constant_exprt s2=
273-
parse_literal(src.get_sub()[2], bv_typet(floatbv_type.get_e()));
274-
constant_exprt s3=
275-
parse_literal(src.get_sub()[3], bv_typet(floatbv_type.get_f()));
271+
constant_exprt s1 = parse_literal(src.get_sub()[1], unsignedbv_typet(1));
272+
constant_exprt s2 =
273+
parse_literal(src.get_sub()[2], unsignedbv_typet(floatbv_type.get_e()));
274+
constant_exprt s3 =
275+
parse_literal(src.get_sub()[3], unsignedbv_typet(floatbv_type.get_f()));
276276
// stitch the bits together
277277
std::string bits=id2string(s1.get_value())+
278278
id2string(s2.get_value())+
@@ -309,7 +309,6 @@ constant_exprt smt2_convt::parse_literal(
309309

310310
if(type.id()==ID_signedbv ||
311311
type.id()==ID_unsignedbv ||
312-
type.id()==ID_bv ||
313312
type.id()==ID_c_enum ||
314313
type.id()==ID_c_bool)
315314
{
@@ -376,7 +375,7 @@ exprt smt2_convt::parse_union(
376375
PRECONDITION(!type.components().empty());
377376
const union_typet::componentt &first=type.components().front();
378377
std::size_t width=boolbv_width(type);
379-
exprt value=parse_rec(src, bv_typet(width));
378+
exprt value = parse_rec(src, unsignedbv_typet(width));
380379
if(value.is_nil())
381380
return nil_exprt();
382381
const typecast_exprt converted(value, first.type());
@@ -415,7 +414,7 @@ exprt smt2_convt::parse_struct(
415414
{
416415
// These are just flattened, i.e., we expect to see a monster bit vector.
417416
std::size_t total_width=boolbv_width(type);
418-
exprt l=parse_literal(src, bv_typet(total_width));
417+
exprt l = parse_literal(src, unsignedbv_typet(total_width));
419418
if(!l.is_constant())
420419
return nil_exprt();
421420

@@ -456,7 +455,6 @@ exprt smt2_convt::parse_rec(const irept &src, const typet &_type)
456455
type.id()==ID_integer ||
457456
type.id()==ID_rational ||
458457
type.id()==ID_real ||
459-
type.id()==ID_bv ||
460458
type.id()==ID_fixedbv ||
461459
type.id()==ID_floatbv)
462460
{
@@ -473,7 +471,7 @@ exprt smt2_convt::parse_rec(const irept &src, const typet &_type)
473471
{
474472
// these come in as bit-vector literals
475473
std::size_t width=boolbv_width(type);
476-
constant_exprt bv_expr=parse_literal(src, bv_typet(width));
474+
constant_exprt bv_expr = parse_literal(src, unsignedbv_typet(width));
477475

478476
mp_integer v = numeric_cast_v<mp_integer>(bv_expr);
479477

0 commit comments

Comments
 (0)