Skip to content

Suport for char variables in __CPROVER_w_ok() #6106

Closed
@ArenBabikian

Description

@ArenBabikian

CBMC version: 5.29.0
Operating system: Ubuntu20
Exact command line resulting in the issue: See below
What behaviour did you expect: Test passes
What happened instead: Test fails


The modifications proposed in #6077 have shown the existence of a bug in CBMC. Currently, CBMC does not support calling __CPROVER_w_ok() by passing a char object as a parameter.

This bug causes problems in the regression/contracts/assigns_replace_03 test. Running the test outputs the following invariant violation report:

--- begin invariant violation report ---
Invariant check failed
File: ../../src/solvers/flattening/boolbv_width.cpp:197 function: get_entry
Condition: false
Reason: Unimplemented
Backtrace:
../../../build/bab/bin/cbmc(print_backtrace(std::ostream&)+0x3e) [0x129aedd]
../../../build/bab/bin/cbmc(get_backtrace[abi:cxx11]()+0x36) [0x129b088]
../../../build/bab/bin/cbmc(std::enable_if<std::is_base_of<invariant_failedt, invariant_failedt>::value, void>::type invariant_violated_structured<invariant_failedt, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)+0x3c) [0xba91c7]
../../../build/bab/bin/cbmc() [0xba8a7f]
../../../build/bab/bin/cbmc(boolbv_widtht::get_entry(typet const&) const+0x121b) [0x109bc75]
../../../build/bab/bin/cbmc(boolbv_widtht::operator()(typet const&) const+0x23) [0xc0008b]
../../../build/bab/bin/cbmc(bv_pointerst::bv_pointers_widtht::operator()(typet const&) const+0x53) [0x10a1437]
../../../build/bab/bin/cbmc(bv_pointerst::boolbv_width(typet const&) const+0x2c) [0xc00b7e]
../../../build/bab/bin/cbmc(boolbvt::type_conversion(typet const&, std::vector<literalt, std::allocator<literalt> > const&, typet const&, std::vector<literalt, std::allocator<literalt> >&)+0x1a0) [0x109445c]
../../../build/bab/bin/cbmc(boolbvt::convert_bv_typecast(typecast_exprt const&)+0xb5) [0x109423d]
../../../build/bab/bin/cbmc(boolbvt::convert_bitvector(exprt const&)+0x47f) [0x1060265]
../../../build/bab/bin/cbmc(bv_pointerst::convert_bitvector(exprt const&)+0x18e7) [0x10a773d]
../../../build/bab/bin/cbmc(boolbvt::convert_bv(exprt const&, nonstd::optional_lite::optional<unsigned long>)+0xef) [0x105f82d]
../../../build/bab/bin/cbmc(boolbvt::convert_bv_typecast(typecast_exprt const&)+0x61) [0x10941e9]
../../../build/bab/bin/cbmc(boolbvt::convert_bitvector(exprt const&)+0x47f) [0x1060265]
../../../build/bab/bin/cbmc(bv_pointerst::convert_bitvector(exprt const&)+0x18e7) [0x10a773d]
../../../build/bab/bin/cbmc(boolbvt::convert_bv(exprt const&, nonstd::optional_lite::optional<unsigned long>)+0xef) [0x105f82d]
../../../build/bab/bin/cbmc(boolbvt::convert_bv_rel(binary_relation_exprt const&)+0xf0) [0x106d9d2]
../../../build/bab/bin/cbmc(boolbvt::convert_rest(exprt const&)+0x4cc) [0x10628ba]
../../../build/bab/bin/cbmc(bv_pointerst::convert_rest(exprt const&)+0x8ab) [0x10a2177]
../../../build/bab/bin/cbmc(prop_conv_solvert::convert_bool(exprt const&)+0x1507) [0x10e5b75]
../../../build/bab/bin/cbmc(prop_conv_solvert::convert(exprt const&)+0x181) [0x10e4597]
../../../build/bab/bin/cbmc(prop_conv_solvert::convert_bool(exprt const&)+0xef2) [0x10e5560]
../../../build/bab/bin/cbmc(prop_conv_solvert::convert(exprt const&)+0x181) [0x10e4597]
../../../build/bab/bin/cbmc(prop_conv_solvert::convert_bool(exprt const&)+0xb2e) [0x10e519c]
../../../build/bab/bin/cbmc(prop_conv_solvert::convert(exprt const&)+0x181) [0x10e4597]
../../../build/bab/bin/cbmc(prop_conv_solvert::convert_bool(exprt const&)+0xef2) [0x10e5560]
../../../build/bab/bin/cbmc(prop_conv_solvert::convert(exprt const&)+0x181) [0x10e4597]
../../../build/bab/bin/cbmc(prop_conv_solvert::set_equality_to_true(equal_exprt const&)+0x9c) [0x10e60a8]
../../../build/bab/bin/cbmc(prop_conv_solvert::add_constraints_to_prop(exprt const&, bool)+0x565) [0x10e6695]
../../../build/bab/bin/cbmc(prop_conv_solvert::set_to(exprt const&, bool)+0x43) [0x10e70e7]
../../../build/bab/bin/cbmc(boolbvt::set_to(exprt const&, bool)+0x18e) [0x10645c0]
../../../build/bab/bin/cbmc(decision_proceduret::set_to_true(exprt const&)+0x2c) [0x104fff6]
../../../build/bab/bin/cbmc(symex_target_equationt::convert_assignments(decision_proceduret&)+0x130) [0xdfbcbe]
../../../build/bab/bin/cbmc(symex_target_equationt::convert_without_assertions(decision_proceduret&)+0x69) [0xdfb9cd]
../../../build/bab/bin/cbmc(symex_target_equationt::convert(decision_proceduret&)+0x2f) [0xdfba91]
../../../build/bab/bin/cbmc(convert_symex_target_equation(symex_target_equationt&, decision_proceduret&, message_handlert&)+0x80) [0xbd5f86]
../../../build/bab/bin/cbmc(prepare_property_decider(std::unordered_map<dstringt, property_infot, std::hash<dstringt>, std::equal_to<dstringt>, std::allocator<std::pair<dstringt const, property_infot> > >&, symex_target_equationt&, goto_symex_property_decidert&, ui_message_handlert&)+0xeb) [0xbd71aa]
../../../build/bab/bin/cbmc(multi_path_symex_checkert::prepare_property_decider(std::unordered_map<dstringt, property_infot, std::hash<dstringt>, std::equal_to<dstringt>, std::allocator<std::pair<dstringt const, property_infot> > >&)+0x40) [0xbe8ef6]
../../../build/bab/bin/cbmc(multi_path_symex_checkert::operator()(std::unordered_map<dstringt, property_infot, std::hash<dstringt>, std::equal_to<dstringt>, std::allocator<std::pair<dstringt const, property_infot> > >&)+0x1c2) [0xbe8dd2]
../../../build/bab/bin/cbmc(all_properties_verifier_with_trace_storaget<multi_path_symex_checkert>::operator()()+0x45) [0xbc5f2d]
../../../build/bab/bin/cbmc(cbmc_parse_optionst::doit()+0x192e) [0xbb3384]
../../../build/bab/bin/cbmc(parse_options_baset::main()+0x106) [0x12bf8fc]
../../../build/bab/bin/cbmc(main+0x46) [0xba87fd]
/lib64/libc.so.6(__libc_start_main+0xea) [0x7fd80685d0ba]
../../../build/bab/bin/cbmc(_start+0x2a) [0xba871a]


--- end invariant violation report ---

Note 1: If we change type of the char variable to int and re-run the test, the test passes.
Note 2: if we change the char ** to char *, the pass still fails and outputs the same error.

Metadata

Metadata

Assignees

Labels

More info neededawsBugs or features of importance to AWS CBMC users

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions