diff --git a/jbmc/regression/jdiff/java-clinit-wrapper/new.jar b/jbmc/regression/jdiff/java-clinit-wrapper/new.jar new file mode 100644 index 00000000000..e27225a80af Binary files /dev/null and b/jbmc/regression/jdiff/java-clinit-wrapper/new.jar differ diff --git a/jbmc/regression/jdiff/java-clinit-wrapper/old.jar b/jbmc/regression/jdiff/java-clinit-wrapper/old.jar new file mode 100644 index 00000000000..892477ce008 Binary files /dev/null and b/jbmc/regression/jdiff/java-clinit-wrapper/old.jar differ diff --git a/jbmc/regression/jdiff/java-clinit-wrapper/test.desc b/jbmc/regression/jdiff/java-clinit-wrapper/test.desc new file mode 100644 index 00000000000..a4f9c4d1554 --- /dev/null +++ b/jbmc/regression/jdiff/java-clinit-wrapper/test.desc @@ -0,0 +1,8 @@ +CORE +new.jar +old.jar +EXIT=0 +SIGNAL=0 +-- +java::java\.nio\.charset\.StandardCharsets::clinit_wrapper$ +java::org\.apache\.tika\.mime\.MediaType::clinit_wrapper$ diff --git a/jbmc/src/java_bytecode/java_bytecode_convert_class.cpp b/jbmc/src/java_bytecode/java_bytecode_convert_class.cpp index dbc8054390c..46e220e6436 100644 --- a/jbmc/src/java_bytecode/java_bytecode_convert_class.cpp +++ b/jbmc/src/java_bytecode/java_bytecode_convert_class.cpp @@ -760,15 +760,12 @@ void java_bytecode_convert_classt::add_array_types(symbol_tablet &symbol_table) const irep_idt clone_name= id2string(symbol_type_identifier)+".clone:()Ljava/lang/Object;"; - code_typet clone_type; - clone_type.return_type()= - java_reference_type(symbol_typet("java::java.lang.Object")); code_typet::parametert this_param; this_param.set_identifier(id2string(clone_name)+"::this"); this_param.set_base_name("this"); this_param.set_this(); this_param.type()=java_reference_type(symbol_type); - clone_type.parameters().push_back(this_param); + code_typet clone_type({this_param}, java_lang_object_type()); parameter_symbolt this_symbol; this_symbol.name=this_param.get_identifier(); diff --git a/jbmc/src/java_bytecode/java_entry_point.cpp b/jbmc/src/java_bytecode/java_entry_point.cpp index 9181dc48026..1258ffae4c9 100644 --- a/jbmc/src/java_bytecode/java_entry_point.cpp +++ b/jbmc/src/java_bytecode/java_entry_point.cpp @@ -31,8 +31,7 @@ static void create_initialize(symbol_table_baset &symbol_table) initialize.base_name=INITIALIZE_FUNCTION; initialize.mode=ID_java; - code_typet type; - type.return_type()=empty_typet(); + code_typet type({}, empty_typet()); initialize.type=type; code_blockt init_code; @@ -688,8 +687,7 @@ bool generate_java_start_function( // we just built and register it in the symbol table symbolt new_symbol; - code_typet main_type; - main_type.return_type()=empty_typet(); + code_typet main_type({}, empty_typet()); new_symbol.name=goto_functionst::entry_point(); new_symbol.type.swap(main_type); diff --git a/jbmc/src/java_bytecode/java_static_initializers.cpp b/jbmc/src/java_bytecode/java_static_initializers.cpp index c2410c8d2ff..61c0fcfaeed 100644 --- a/jbmc/src/java_bytecode/java_static_initializers.cpp +++ b/jbmc/src/java_bytecode/java_static_initializers.cpp @@ -293,11 +293,7 @@ static void create_clinit_wrapper_symbols( // Create symbol for the "clinit_wrapper" symbolt wrapper_method_symbol; - code_typet wrapper_method_type; - wrapper_method_type.return_type() = void_typet(); - // Ensure the parameters property is there - // to avoid trouble in irept comparisons - wrapper_method_type.parameters(); + code_typet wrapper_method_type({}, void_typet()); wrapper_method_symbol.name = clinit_wrapper_name(class_name); wrapper_method_symbol.pretty_name = wrapper_method_symbol.name; wrapper_method_symbol.base_name = "clinit_wrapper"; @@ -717,8 +713,7 @@ void stub_global_initializer_factoryt::create_stub_global_initializer_symbols( "a class cannot be both incomplete, and so have stub static fields, and " "also define a static initializer"); - code_typet thunk_type; - thunk_type.return_type() = void_typet(); + code_typet thunk_type({}, void_typet()); symbolt static_init_symbol; static_init_symbol.name = static_init_name; diff --git a/jbmc/src/java_bytecode/java_string_library_preprocess.cpp b/jbmc/src/java_bytecode/java_string_library_preprocess.cpp index 4c8e3088730..a610681b504 100644 --- a/jbmc/src/java_bytecode/java_string_library_preprocess.cpp +++ b/jbmc/src/java_bytecode/java_string_library_preprocess.cpp @@ -1611,9 +1611,7 @@ codet java_string_library_preprocesst::make_object_get_class_code( "java::java.lang.Class.forName:(Ljava/lang/String;)Ljava/lang/Class;"); fun_call.lhs()=class1; fun_call.arguments().push_back(string1); - code_typet fun_type; - fun_type.parameters().push_back(code_typet::parametert(string_ptr_type)); - fun_type.return_type()=class_type; + code_typet fun_type({code_typet::parametert(string_ptr_type)}, class_type); fun_call.function().type()=fun_type; code.add(fun_call, loc); diff --git a/jbmc/src/java_bytecode/java_types.cpp b/jbmc/src/java_bytecode/java_types.cpp index e83254e6962..dc838eadd8d 100644 --- a/jbmc/src/java_bytecode/java_types.cpp +++ b/jbmc/src/java_bytecode/java_types.cpp @@ -493,24 +493,21 @@ typet java_type_from_string( if(e_pos==std::string::npos) return nil_typet(); - code_typet result; - - result.return_type()= - java_type_from_string( - std::string(src, e_pos+1, std::string::npos), - class_name_prefix); + typet return_type = java_type_from_string( + std::string(src, e_pos + 1, std::string::npos), class_name_prefix); std::vector param_types = parse_list_types(src.substr(0, e_pos + 1), class_name_prefix, '(', ')'); // create parameters for each type + code_typet::parameterst parameters; std::transform( param_types.begin(), param_types.end(), - std::back_inserter(result.parameters()), + std::back_inserter(parameters), [](const typet &type) { return code_typet::parametert(type); }); - return result; + return code_typet(std::move(parameters), std::move(return_type)); } case '[': // array type diff --git a/jbmc/unit/java-testing-utils/module_dependencies.txt b/jbmc/unit/java-testing-utils/module_dependencies.txt new file mode 100644 index 00000000000..8a8c7bc5a68 --- /dev/null +++ b/jbmc/unit/java-testing-utils/module_dependencies.txt @@ -0,0 +1,6 @@ +goto-programs +java_bytecode +java-testing-utils +langapi # should go away +testing-utils +util diff --git a/jbmc/unit/java_bytecode/ci_lazy_methods/module_dependencies.txt b/jbmc/unit/java_bytecode/ci_lazy_methods/module_dependencies.txt new file mode 100644 index 00000000000..0bfc016ae2b --- /dev/null +++ b/jbmc/unit/java_bytecode/ci_lazy_methods/module_dependencies.txt @@ -0,0 +1,3 @@ +ci_lazy_methods +java-testing-utils +testing-utils diff --git a/jbmc/unit/java_bytecode/goto-programs/module_dependencies.txt b/jbmc/unit/java_bytecode/goto-programs/module_dependencies.txt new file mode 100644 index 00000000000..5cf97f68743 --- /dev/null +++ b/jbmc/unit/java_bytecode/goto-programs/module_dependencies.txt @@ -0,0 +1,4 @@ +goto-programs +java-testing-utils +testing-utils +util diff --git a/jbmc/unit/java_bytecode/goto_program_generics/module_dependencies.txt b/jbmc/unit/java_bytecode/goto_program_generics/module_dependencies.txt new file mode 100644 index 00000000000..37a3752f982 --- /dev/null +++ b/jbmc/unit/java_bytecode/goto_program_generics/module_dependencies.txt @@ -0,0 +1,4 @@ +goto_program_generics +java-testing-utils +testing-utils +util diff --git a/jbmc/unit/java_bytecode/inherited_static_fields/module_dependencies.txt b/jbmc/unit/java_bytecode/inherited_static_fields/module_dependencies.txt new file mode 100644 index 00000000000..b633e9235a2 --- /dev/null +++ b/jbmc/unit/java_bytecode/inherited_static_fields/module_dependencies.txt @@ -0,0 +1,4 @@ +inherited_static_fields +java-testing-utils +testing-utils +util diff --git a/jbmc/unit/java_bytecode/java_bytecode_convert_class/module_dependencies.txt b/jbmc/unit/java_bytecode/java_bytecode_convert_class/module_dependencies.txt index 87cf9849bbf..4cbf833a097 100644 --- a/jbmc/unit/java_bytecode/java_bytecode_convert_class/module_dependencies.txt +++ b/jbmc/unit/java_bytecode/java_bytecode_convert_class/module_dependencies.txt @@ -1,3 +1,4 @@ java-testing-utils testing-utils java_bytecode +util diff --git a/jbmc/unit/java_bytecode/java_bytecode_convert_method/module_dependencies.txt b/jbmc/unit/java_bytecode/java_bytecode_convert_method/module_dependencies.txt new file mode 100644 index 00000000000..e3a60fcd031 --- /dev/null +++ b/jbmc/unit/java_bytecode/java_bytecode_convert_method/module_dependencies.txt @@ -0,0 +1,6 @@ +goto-programs +java_bytecode +java_bytecode_convert_method +java-testing-utils +testing-utils +util diff --git a/jbmc/unit/java_bytecode/java_bytecode_parse_generics/module_dependencies.txt b/jbmc/unit/java_bytecode/java_bytecode_parse_generics/module_dependencies.txt new file mode 100644 index 00000000000..5efcb3b2958 --- /dev/null +++ b/jbmc/unit/java_bytecode/java_bytecode_parse_generics/module_dependencies.txt @@ -0,0 +1,3 @@ +java_bytecode_parse_generics +java-testing-utils +testing-utils diff --git a/jbmc/unit/java_bytecode/java_bytecode_parse_lambdas/module_dependencies.txt b/jbmc/unit/java_bytecode/java_bytecode_parse_lambdas/module_dependencies.txt new file mode 100644 index 00000000000..b51f2e5f97a --- /dev/null +++ b/jbmc/unit/java_bytecode/java_bytecode_parse_lambdas/module_dependencies.txt @@ -0,0 +1,6 @@ +java_bytecode +java_bytecode_parse_lambdas +java-testing-utils +langapi # should go away +testing-utils +util diff --git a/jbmc/unit/java_bytecode/java_object_factory/module_dependencies.txt b/jbmc/unit/java_bytecode/java_object_factory/module_dependencies.txt new file mode 100644 index 00000000000..c4380fa26bd --- /dev/null +++ b/jbmc/unit/java_bytecode/java_object_factory/module_dependencies.txt @@ -0,0 +1,5 @@ +java_bytecode +java_object_factory +langapi # should go away +testing-utils +util diff --git a/jbmc/unit/java_bytecode/java_replace_nondet/module_dependencies.txt b/jbmc/unit/java_bytecode/java_replace_nondet/module_dependencies.txt new file mode 100644 index 00000000000..b41e1a35ecb --- /dev/null +++ b/jbmc/unit/java_bytecode/java_replace_nondet/module_dependencies.txt @@ -0,0 +1,7 @@ +goto-instrument +goto-programs +java_bytecode +java_replace_nondet +java-testing-utils +testing-utils +util diff --git a/jbmc/unit/java_bytecode/java_string_library_preprocess/module_dependencies.txt b/jbmc/unit/java_bytecode/java_string_library_preprocess/module_dependencies.txt new file mode 100644 index 00000000000..69779082f81 --- /dev/null +++ b/jbmc/unit/java_bytecode/java_string_library_preprocess/module_dependencies.txt @@ -0,0 +1,5 @@ +java_bytecode +java_string_library_preprocess +langapi # should go away +testing-utils +util diff --git a/jbmc/unit/java_bytecode/java_types/module_dependencies.txt b/jbmc/unit/java_bytecode/java_types/module_dependencies.txt new file mode 100644 index 00000000000..cb9d02b1529 --- /dev/null +++ b/jbmc/unit/java_bytecode/java_types/module_dependencies.txt @@ -0,0 +1,3 @@ +java_bytecode +java_types +testing-utils diff --git a/jbmc/unit/java_bytecode/java_virtual_functions/module_dependencies.txt b/jbmc/unit/java_bytecode/java_virtual_functions/module_dependencies.txt new file mode 100644 index 00000000000..b139ad5e0b6 --- /dev/null +++ b/jbmc/unit/java_bytecode/java_virtual_functions/module_dependencies.txt @@ -0,0 +1,7 @@ +goto-instrument +goto-programs +java_bytecode +java_virtual_functions +java-testing-utils +testing-utils +util diff --git a/jbmc/unit/java_bytecode/module_dependencies.txt b/jbmc/unit/java_bytecode/module_dependencies.txt new file mode 100644 index 00000000000..7c65cd85bde --- /dev/null +++ b/jbmc/unit/java_bytecode/module_dependencies.txt @@ -0,0 +1,2 @@ +java_bytecode +testing-utils diff --git a/jbmc/unit/pointer-analysis/module_dependencies.txt b/jbmc/unit/pointer-analysis/module_dependencies.txt new file mode 100644 index 00000000000..fb8b993d5dd --- /dev/null +++ b/jbmc/unit/pointer-analysis/module_dependencies.txt @@ -0,0 +1,6 @@ +goto-programs +java_bytecode +langapi # should go away +pointer-analysis +testing-utils +util diff --git a/jbmc/unit/solvers/refinement/string_constraint_instantiation/module_dependencies.txt b/jbmc/unit/solvers/refinement/string_constraint_instantiation/module_dependencies.txt new file mode 100644 index 00000000000..0741e46c2df --- /dev/null +++ b/jbmc/unit/solvers/refinement/string_constraint_instantiation/module_dependencies.txt @@ -0,0 +1,7 @@ +java_bytecode +langapi # should go away +solvers/refinement +solvers/sat +string_constraint_instantiation +testing-utils +util diff --git a/jbmc/unit/solvers/refinement/string_refinement/dependency_graph.cpp b/jbmc/unit/solvers/refinement/string_refinement/dependency_graph.cpp index de6bd2d69e6..10abe9a6184 100644 --- a/jbmc/unit/solvers/refinement/string_refinement/dependency_graph.cpp +++ b/jbmc/unit/solvers/refinement/string_refinement/dependency_graph.cpp @@ -58,7 +58,12 @@ SCENARIO("dependency_graph", "[core][solvers][refinement][string_refinement]") const symbol_exprt lhs("lhs", unsignedbv_typet(32)); const symbol_exprt lhs2("lhs2", unsignedbv_typet(32)); const symbol_exprt lhs3("lhs3", unsignedbv_typet(32)); - code_typet fun_type; + code_typet fun_type( + {code_typet::parametert(length_type()), + code_typet::parametert(pointer_type(java_char_type())), + code_typet::parametert(string_type), + code_typet::parametert(string_type)}, + unsignedbv_typet(32)); // fun1 is s3 = s1.concat(s2) function_application_exprt fun1(fun_type); diff --git a/jbmc/unit/solvers/refinement/string_refinement/module_dependencies.txt b/jbmc/unit/solvers/refinement/string_refinement/module_dependencies.txt new file mode 100644 index 00000000000..0c66e23bb4a --- /dev/null +++ b/jbmc/unit/solvers/refinement/string_refinement/module_dependencies.txt @@ -0,0 +1,6 @@ +java_bytecode +langapi # should go away +string_refinement +solvers/refinement +testing-utils +util diff --git a/jbmc/unit/util/module_dependencies.txt b/jbmc/unit/util/module_dependencies.txt new file mode 100644 index 00000000000..f2b17a21bf1 --- /dev/null +++ b/jbmc/unit/util/module_dependencies.txt @@ -0,0 +1,4 @@ +java_bytecode +java-testing-utils +testing-utils +util diff --git a/src/ansi-c/ansi_c_entry_point.cpp b/src/ansi-c/ansi_c_entry_point.cpp index f15a3124f55..0942b4ca658 100644 --- a/src/ansi-c/ansi_c_entry_point.cpp +++ b/src/ansi-c/ansi_c_entry_point.cpp @@ -445,8 +445,7 @@ bool generate_ansi_c_start_function( // add the entry point symbol symbolt new_symbol; - code_typet main_type; - main_type.return_type()=empty_typet(); + code_typet main_type({}, empty_typet()); new_symbol.name=goto_functionst::entry_point(); new_symbol.type.swap(main_type); diff --git a/src/ansi-c/c_typecheck_expr.cpp b/src/ansi-c/c_typecheck_expr.cpp index 81d6f7a1e7e..bfd7ec0f94a 100644 --- a/src/ansi-c/c_typecheck_expr.cpp +++ b/src/ansi-c/c_typecheck_expr.cpp @@ -450,10 +450,8 @@ void c_typecheck_baset::typecheck_expr_builtin_va_arg(exprt &expr) typet arg_type=expr.type(); typecheck_type(arg_type); - code_typet new_type; - new_type.return_type().swap(arg_type); - new_type.parameters().resize(1); - new_type.parameters()[0].type()=pointer_type(void_type()); + code_typet new_type( + {code_typet::parametert(pointer_type(void_type()))}, std::move(arg_type)); assert(expr.operands().size()==1); exprt arg=expr.op0(); diff --git a/src/cbmc/symex_coverage.cpp b/src/cbmc/symex_coverage.cpp index 0ecd58b1083..ddef86378d9 100644 --- a/src/cbmc/symex_coverage.cpp +++ b/src/cbmc/symex_coverage.cpp @@ -173,8 +173,6 @@ goto_program_coverage_recordt::goto_program_coverage_recordt( code_typet sig_type= original_return_type(ns.get_symbol_table(), gf_it->first); - if(sig_type.is_nil()) - sig_type=gf_it->second.type; xml.set_attribute("signature", from_type(ns, gf_it->first, sig_type)); diff --git a/src/cpp/cpp_typecheck_expr.cpp b/src/cpp/cpp_typecheck_expr.cpp index 3a5ac9cd9c0..cb1d28fbeb0 100644 --- a/src/cpp/cpp_typecheck_expr.cpp +++ b/src/cpp/cpp_typecheck_expr.cpp @@ -1446,10 +1446,9 @@ void cpp_typecheckt::typecheck_expr_cpp_name( symbol_exprt result; result.add_source_location()=source_location; result.set_identifier(identifier); - code_typet t; - t.parameters().push_back(code_typet::parametert(ptr_arg.type())); + code_typet t( + {code_typet::parametert(ptr_arg.type())}, ptr_arg.type().subtype()); t.make_ellipsis(); - t.return_type()=ptr_arg.type().subtype(); result.type()=t; expr.swap(result); return; @@ -1480,10 +1479,10 @@ void cpp_typecheckt::typecheck_expr_cpp_name( symbol_exprt result; result.add_source_location()=source_location; result.set_identifier(identifier); - code_typet t; - t.parameters().push_back(code_typet::parametert(ptr_arg.type())); - t.parameters().push_back(code_typet::parametert(signed_int_type())); - t.return_type()=ptr_arg.type().subtype(); + code_typet t( + {code_typet::parametert(ptr_arg.type()), + code_typet::parametert(signed_int_type())}, + ptr_arg.type().subtype()); result.type()=t; expr.swap(result); return; @@ -1514,12 +1513,11 @@ void cpp_typecheckt::typecheck_expr_cpp_name( symbol_exprt result; result.add_source_location()=source_location; result.set_identifier(identifier); - code_typet t; - t.parameters().push_back(code_typet::parametert(ptr_arg.type())); - t.parameters().push_back( - code_typet::parametert(ptr_arg.type().subtype())); - t.parameters().push_back(code_typet::parametert(signed_int_type())); - t.return_type()=empty_typet(); + code_typet t( + {code_typet::parametert(ptr_arg.type()), + code_typet::parametert(ptr_arg.type().subtype()), + code_typet::parametert(signed_int_type())}, + empty_typet()); result.type()=t; expr.swap(result); return; @@ -1550,12 +1548,11 @@ void cpp_typecheckt::typecheck_expr_cpp_name( symbol_exprt result; result.add_source_location()=source_location; result.set_identifier(identifier); - code_typet t; - t.parameters().push_back(code_typet::parametert(ptr_arg.type())); - t.parameters().push_back( - code_typet::parametert(ptr_arg.type().subtype())); - t.parameters().push_back(code_typet::parametert(signed_int_type())); - t.return_type()=ptr_arg.type().subtype(); + code_typet t( + {code_typet::parametert(ptr_arg.type()), + code_typet::parametert(ptr_arg.type().subtype()), + code_typet::parametert(signed_int_type())}, + ptr_arg.type().subtype()); result.type()=t; expr.swap(result); return; @@ -1594,11 +1591,11 @@ void cpp_typecheckt::typecheck_expr_cpp_name( symbol_exprt result; result.add_source_location()=source_location; result.set_identifier(identifier); - code_typet t; - t.parameters().push_back(code_typet::parametert(ptr_arg.type())); - t.parameters().push_back(code_typet::parametert(ptr_arg.type())); - t.parameters().push_back(code_typet::parametert(signed_int_type())); - t.return_type()=empty_typet(); + code_typet t( + {code_typet::parametert(ptr_arg.type()), + code_typet::parametert(ptr_arg.type()), + code_typet::parametert(signed_int_type())}, + empty_typet()); result.type()=t; expr.swap(result); return; @@ -1643,12 +1640,12 @@ void cpp_typecheckt::typecheck_expr_cpp_name( symbol_exprt result; result.add_source_location()=source_location; result.set_identifier(identifier); - code_typet t; - t.parameters().push_back(code_typet::parametert(ptr_arg.type())); - t.parameters().push_back(code_typet::parametert(ptr_arg.type())); - t.parameters().push_back(code_typet::parametert(ptr_arg.type())); - t.parameters().push_back(code_typet::parametert(signed_int_type())); - t.return_type()=empty_typet(); + code_typet t( + {code_typet::parametert(ptr_arg.type()), + code_typet::parametert(ptr_arg.type()), + code_typet::parametert(ptr_arg.type()), + code_typet::parametert(signed_int_type())}, + empty_typet()); result.type()=t; expr.swap(result); return; @@ -1698,20 +1695,19 @@ void cpp_typecheckt::typecheck_expr_cpp_name( symbol_exprt result; result.add_source_location()=source_location; result.set_identifier(identifier); - code_typet t; - t.parameters().push_back(code_typet::parametert(ptr_arg.type())); - t.parameters().push_back(code_typet::parametert(ptr_arg.type())); + code_typet::parameterst parameters; + parameters.push_back(code_typet::parametert(ptr_arg.type())); + parameters.push_back(code_typet::parametert(ptr_arg.type())); if(identifier=="__atomic_compare_exchange") - t.parameters().push_back(code_typet::parametert(ptr_arg.type())); + parameters.push_back(code_typet::parametert(ptr_arg.type())); else - t.parameters().push_back( - code_typet::parametert(ptr_arg.type().subtype())); + parameters.push_back(code_typet::parametert(ptr_arg.type().subtype())); - t.parameters().push_back(code_typet::parametert(c_bool_type())); - t.parameters().push_back(code_typet::parametert(signed_int_type())); - t.parameters().push_back(code_typet::parametert(signed_int_type())); - t.return_type()=c_bool_type(); + parameters.push_back(code_typet::parametert(c_bool_type())); + parameters.push_back(code_typet::parametert(signed_int_type())); + parameters.push_back(code_typet::parametert(signed_int_type())); + code_typet t(std::move(parameters), c_bool_type()); result.type()=t; expr.swap(result); return; @@ -1744,10 +1740,9 @@ void cpp_typecheckt::typecheck_expr_cpp_name( symbol_exprt result; result.add_source_location()=source_location; result.set_identifier(identifier); - code_typet t; - t.parameters().push_back(code_typet::parametert(ptr_arg.type())); + code_typet t( + {code_typet::parametert(ptr_arg.type())}, ptr_arg.type().subtype()); t.make_ellipsis(); - t.return_type()=ptr_arg.type().subtype(); result.type()=t; expr.swap(result); return; @@ -1780,10 +1775,9 @@ void cpp_typecheckt::typecheck_expr_cpp_name( symbol_exprt result; result.add_source_location()=source_location; result.set_identifier(identifier); - code_typet t; - t.parameters().push_back(code_typet::parametert(ptr_arg.type())); + code_typet t( + {code_typet::parametert(ptr_arg.type())}, ptr_arg.type().subtype()); t.make_ellipsis(); - t.return_type()=ptr_arg.type().subtype(); result.type()=t; expr.swap(result); return; diff --git a/src/cpp/cpp_typecheck_resolve.cpp b/src/cpp/cpp_typecheck_resolve.cpp index 3a74207a96e..c9b830be888 100644 --- a/src/cpp/cpp_typecheck_resolve.cpp +++ b/src/cpp/cpp_typecheck_resolve.cpp @@ -611,18 +611,14 @@ void cpp_typecheck_resolvet::make_constructors( // 1. no arguments, default initialization { - code_typet t1; - t1.return_type()=it->type(); + code_typet t1({}, it->type()); exprt pod_constructor1("pod_constructor", t1); new_identifiers.push_back(pod_constructor1); } // 2. one argument, copy/conversion { - code_typet t2; - t2.return_type()=it->type(); - t2.parameters().resize(1); - t2.parameters()[0].type()=it->type(); + code_typet t2({code_typet::parametert(it->type())}, it->type()); exprt pod_constructor2("pod_constructor", t2); new_identifiers.push_back(pod_constructor2); } @@ -630,10 +626,7 @@ void cpp_typecheck_resolvet::make_constructors( // enums, in addition, can also be constructed from int if(symbol_type.id()==ID_c_enum_tag) { - code_typet t3; - t3.return_type()=it->type(); - t3.parameters().resize(1); - t3.parameters()[0].type()=signed_int_type(); + code_typet t3({code_typet::parametert(signed_int_type())}, it->type()); exprt pod_constructor3("pod_constructor", t3); new_identifiers.push_back(pod_constructor3); } diff --git a/src/goto-cc/linker_script_merge.cpp b/src/goto-cc/linker_script_merge.cpp index 459dbdc7bf2..fd0da16dbe3 100644 --- a/src/goto-cc/linker_script_merge.cpp +++ b/src/goto-cc/linker_script_merge.cpp @@ -593,8 +593,7 @@ int linker_script_merget::ls_data2instructions( for(const auto &d : data["regions"].array) { code_function_callt f; - code_typet void_t; - void_t.return_type()=empty_typet(); + code_typet void_t({}, empty_typet()); f.function()=symbol_exprt(CPROVER_PREFIX "allocated_memory", void_t); unsigned start=safe_string2unsigned(d["start"].value); unsigned size=safe_string2unsigned(d["size"].value); @@ -620,8 +619,7 @@ int linker_script_merget::ls_data2instructions( sym.name=CPROVER_PREFIX "allocated_memory"; sym.pretty_name=CPROVER_PREFIX "allocated_memory"; sym.is_lvalue=sym.is_static_lifetime=true; - code_typet void_t; - void_t.return_type()=empty_typet(); + code_typet void_t({}, empty_typet()); sym.type=void_t; symbol_table.add(sym); } diff --git a/src/goto-instrument/goto_program2code.cpp b/src/goto-instrument/goto_program2code.cpp index d0339ec3ae8..2a485e1ca00 100644 --- a/src/goto-instrument/goto_program2code.cpp +++ b/src/goto-instrument/goto_program2code.cpp @@ -228,8 +228,7 @@ goto_programt::const_targett goto_program2codet::convert_instruction( case ATOMIC_END: { code_function_callt f; - code_typet void_t; - void_t.return_type()=empty_typet(); + code_typet void_t({}, empty_typet()); f.function()=symbol_exprt( target->is_atomic_begin() ? "__CPROVER_atomic_begin" : @@ -328,7 +327,7 @@ goto_programt::const_targett goto_program2codet::convert_assign_varargs( if(r.id()==ID_constant && (r.is_zero() || to_constant_expr(r).get_value()==ID_NULL)) { - f.function()=symbol_exprt("va_end", code_typet()); + f.function() = symbol_exprt("va_end", code_typet({}, empty_typet())); f.arguments().push_back(this_va_list_expr); f.arguments().back().type().id(ID_gcc_builtin_va_list); @@ -336,7 +335,7 @@ goto_programt::const_targett goto_program2codet::convert_assign_varargs( } else if(r.id()==ID_address_of) { - f.function()=symbol_exprt("va_start", code_typet()); + f.function() = symbol_exprt("va_start", code_typet({}, empty_typet())); f.arguments().push_back(this_va_list_expr); f.arguments().back().type().id(ID_gcc_builtin_va_list); f.arguments().push_back(to_address_of_expr(r).object()); @@ -346,12 +345,13 @@ goto_programt::const_targett goto_program2codet::convert_assign_varargs( else if(r.id()==ID_side_effect && to_side_effect_expr(r).get_statement()==ID_gcc_builtin_va_arg_next) { - f.function()=symbol_exprt("va_arg", code_typet()); + f.function() = symbol_exprt("va_arg", code_typet({}, empty_typet())); f.arguments().push_back(this_va_list_expr); f.arguments().back().type().id(ID_gcc_builtin_va_list); side_effect_expr_function_callt type_of; - type_of.function()=symbol_exprt("__typeof__", code_typet()); + type_of.function() = + symbol_exprt("__typeof__", code_typet({}, empty_typet())); // if the return value is used, the next instruction will be assign goto_programt::const_targett next=target; @@ -393,7 +393,7 @@ goto_programt::const_targett goto_program2codet::convert_assign_varargs( } else { - f.function()=symbol_exprt("va_copy", code_typet()); + f.function() = symbol_exprt("va_copy", code_typet({}, empty_typet())); f.arguments().push_back(this_va_list_expr); f.arguments().back().type().id(ID_gcc_builtin_va_list); f.arguments().push_back(r); @@ -1374,7 +1374,8 @@ goto_programt::const_targett goto_program2codet::convert_start_thread( code_function_callt f; // we don't bother setting the type f.lhs()=cf.lhs(); - f.function()=symbol_exprt("pthread_create", code_typet()); + f.function() = + symbol_exprt("pthread_create", code_typet({}, empty_typet())); const null_pointer_exprt n(pointer_type(empty_typet())); f.arguments().push_back(n); f.arguments().push_back(n); @@ -1947,8 +1948,7 @@ void goto_program2codet::cleanup_expr(exprt &expr, bool no_typecast) base_name="nondet_"+std::to_string(count); } - code_typet code_type; - code_type.return_type()=expr.type(); + code_typet code_type({}, expr.type()); symbolt symbol; symbol.base_name=base_name; diff --git a/src/goto-programs/builtin_functions.cpp b/src/goto-programs/builtin_functions.cpp index 52c3cf2650c..934b610e728 100644 --- a/src/goto-programs/builtin_functions.cpp +++ b/src/goto-programs/builtin_functions.cpp @@ -1588,7 +1588,6 @@ void goto_convertt::do_function_call_symbol( if(!symbol_table.has_symbol(name)) { - code_typet(); symbolt new_symbol; new_symbol.base_name=name; new_symbol.name=name; diff --git a/src/goto-programs/remove_asm.cpp b/src/goto-programs/remove_asm.cpp index c863adde77f..e67602fff2a 100644 --- a/src/goto-programs/remove_asm.cpp +++ b/src/goto-programs/remove_asm.cpp @@ -78,8 +78,7 @@ void remove_asmt::gcc_asm_function_call( } } - code_typet fkt_type; - fkt_type.return_type()=void_typet(); + code_typet fkt_type({}, void_typet()); fkt_type.make_ellipsis(); symbol_exprt fkt(function_identifier, fkt_type); diff --git a/src/goto-programs/remove_returns.cpp b/src/goto-programs/remove_returns.cpp index 1544114d37f..76f4e77354d 100644 --- a/src/goto-programs/remove_returns.cpp +++ b/src/goto-programs/remove_returns.cpp @@ -290,13 +290,14 @@ void remove_returns(goto_modelt &goto_model) /// \param symbol_table: global symbol table /// \param function_id: function to get the type of /// \return the function's type with its `return_type()` restored to its -/// original value if a \#return_value variable exists, or nil otherwise +/// original value code_typet original_return_type( const symbol_table_baset &symbol_table, const irep_idt &function_id) { - code_typet type; - type.make_nil(); + // look up the function symbol + const symbolt &function_symbol = symbol_table.lookup_ref(function_id); + code_typet type = to_code_type(function_symbol.type); // do we have X#return_value? std::string rv_name=id2string(function_id)+RETURN_VALUE_SUFFIX; @@ -304,14 +305,8 @@ code_typet original_return_type( symbol_tablet::symbolst::const_iterator rv_it= symbol_table.symbols.find(rv_name); - if(rv_it!=symbol_table.symbols.end()) - { - // look up the function symbol - const symbolt &function_symbol=symbol_table.lookup_ref(function_id); - - type=to_code_type(function_symbol.type); - type.return_type()=rv_it->second.type; - } + if(rv_it != symbol_table.symbols.end()) + type.return_type() = rv_it->second.type; return type; } diff --git a/src/jsil/jsil_entry_point.cpp b/src/jsil/jsil_entry_point.cpp index 43f60bd1950..80f787ca9c2 100644 --- a/src/jsil/jsil_entry_point.cpp +++ b/src/jsil/jsil_entry_point.cpp @@ -26,8 +26,7 @@ static void create_initialize(symbol_tablet &symbol_table) initialize.base_name = INITIALIZE_FUNCTION; initialize.mode="jsil"; - code_typet type; - type.return_type()=empty_typet(); + code_typet type({}, empty_typet()); initialize.type=type; code_blockt init_code; @@ -152,8 +151,7 @@ bool jsil_entry_point( // add "main" symbolt new_symbol; - code_typet main_type; - main_type.return_type()=empty_typet(); + code_typet main_type({}, empty_typet()); new_symbol.name=goto_functionst::entry_point(); new_symbol.type.swap(main_type); diff --git a/src/util/std_types.h b/src/util/std_types.h index ca2c0934685..591a91d4de4 100644 --- a/src/util/std_types.h +++ b/src/util/std_types.h @@ -758,8 +758,36 @@ inline c_enum_tag_typet &to_c_enum_tag_type(typet &type) class code_typet:public typet { public: + class parametert; + typedef std::vector parameterst; + + /// Constructs a new code type, i.e. function type + /// \param _parameters: the vector of function parameters + /// \param _return_type: the return type + code_typet(parameterst &&_parameters, typet &&_return_type) : typet(ID_code) + { + parameters().swap(_parameters); + return_type().swap(_return_type); + } + + /// Constructs a new code type, i.e. function type + /// \param _parameters: the vector of function parameters + /// \param _return_type: the return type + code_typet(parameterst &&_parameters, const typet &_return_type) + : typet(ID_code) + { + parameters().swap(_parameters); + return_type() = _return_type; + } + + /// \deprecated + DEPRECATED("Use the two argument constructor instead") code_typet():typet(ID_code) { + // make sure these properties are always there to avoid problems + // with irept comparisons + add(ID_parameters); + add_type(ID_return_type); } // used to be argumentt -- now uses standard terminology @@ -858,8 +886,6 @@ class code_typet:public typet add(ID_parameters).remove(ID_ellipsis); } - typedef std::vector parameterst; - const typet &return_type() const { return find_type(ID_return_type); diff --git a/unit/analyses/ai/module_dependencies.txt b/unit/analyses/ai/module_dependencies.txt new file mode 100644 index 00000000000..093b56978cb --- /dev/null +++ b/unit/analyses/ai/module_dependencies.txt @@ -0,0 +1,5 @@ +ai +analyses +ansi-c +testing-utils +util diff --git a/unit/analyses/call_graph.cpp b/unit/analyses/call_graph.cpp index ffefc5d93f6..67f6fa68a82 100644 --- a/unit/analyses/call_graph.cpp +++ b/unit/analyses/call_graph.cpp @@ -22,7 +22,7 @@ static symbolt create_void_function_symbol( const irep_idt &name, const codet &code) { - code_typet void_function_type; + code_typet void_function_type({}, empty_typet()); symbolt function; function.name=name; function.type=void_function_type; @@ -67,7 +67,7 @@ SCENARIO("call_graph", // void E() { } goto_modelt goto_model; - code_typet void_function_type; + code_typet void_function_type({}, empty_typet()); { code_blockt calls; diff --git a/unit/analyses/dependence_graph.cpp b/unit/analyses/dependence_graph.cpp index 6ef65220485..84f9535bbf7 100644 --- a/unit/analyses/dependence_graph.cpp +++ b/unit/analyses/dependence_graph.cpp @@ -22,7 +22,7 @@ static symbolt create_void_function_symbol( const irep_idt &name, const codet &code) { - code_typet void_function_type; + code_typet void_function_type({}, empty_typet()); symbolt function; function.name = name; function.type = void_function_type; @@ -74,7 +74,7 @@ SCENARIO("dependence_graph", "[core][analyses][dependence_graph]") x_symbol.is_file_local = true; goto_model.symbol_table.add(x_symbol); - code_typet void_function_type; + code_typet void_function_type({}, empty_typet()); code_blockt a_body; code_declt declare_x(x_symbol.symbol_expr()); diff --git a/unit/analyses/does_remove_const/module_dependencies.txt b/unit/analyses/does_remove_const/module_dependencies.txt new file mode 100644 index 00000000000..cdcf3a17881 --- /dev/null +++ b/unit/analyses/does_remove_const/module_dependencies.txt @@ -0,0 +1,6 @@ +analyses +ansi-c +does_remove_const +goto-programs +testing-utils +util diff --git a/unit/analyses/module_dependencies.txt b/unit/analyses/module_dependencies.txt new file mode 100644 index 00000000000..1edf1ff9596 --- /dev/null +++ b/unit/analyses/module_dependencies.txt @@ -0,0 +1,6 @@ +analyses +ansi-c +goto-programs +langapi # should go away +testing-utils +util diff --git a/unit/module_dependencies.txt b/unit/module_dependencies.txt new file mode 100644 index 00000000000..1640922e72d --- /dev/null +++ b/unit/module_dependencies.txt @@ -0,0 +1,15 @@ +ansi-c +cbmc +cpp +goto-programs +goto-symex +json +langapi # should go away +solvers/flattening +solvers/floatbv +solvers/miniBDD +solvers/prop +solvers/sat +solvers/smt2 +testing-utils +util diff --git a/unit/solvers/refinement/string_constraint_generator_valueof/module_dependencies.txt b/unit/solvers/refinement/string_constraint_generator_valueof/module_dependencies.txt new file mode 100644 index 00000000000..ee346fe1dd4 --- /dev/null +++ b/unit/solvers/refinement/string_constraint_generator_valueof/module_dependencies.txt @@ -0,0 +1,4 @@ +solvers/refinement +string_constraint_generator_valueof +testing-utils +util diff --git a/unit/solvers/refinement/string_refinement/module_dependencies.txt b/unit/solvers/refinement/string_refinement/module_dependencies.txt new file mode 100644 index 00000000000..863836fb0c3 --- /dev/null +++ b/unit/solvers/refinement/string_refinement/module_dependencies.txt @@ -0,0 +1,4 @@ +solvers/refinement +string_refinement +testing-utils +util diff --git a/unit/testing-utils/module_dependencies.txt b/unit/testing-utils/module_dependencies.txt new file mode 100644 index 00000000000..b5ccfdd0368 --- /dev/null +++ b/unit/testing-utils/module_dependencies.txt @@ -0,0 +1,3 @@ +ansi-c +testing-utils +util diff --git a/unit/util/expr_cast/module_dependencies.txt b/unit/util/expr_cast/module_dependencies.txt new file mode 100644 index 00000000000..ec9599d1d19 --- /dev/null +++ b/unit/util/expr_cast/module_dependencies.txt @@ -0,0 +1,3 @@ +expr_casts +testing-utils +util diff --git a/unit/util/module_dependencies.txt b/unit/util/module_dependencies.txt new file mode 100644 index 00000000000..abf92b3762e --- /dev/null +++ b/unit/util/module_dependencies.txt @@ -0,0 +1,2 @@ +testing-utils +util diff --git a/unit/util/string_utils/module_dependencies.txt b/unit/util/string_utils/module_dependencies.txt new file mode 100644 index 00000000000..7fd7f16f4f0 --- /dev/null +++ b/unit/util/string_utils/module_dependencies.txt @@ -0,0 +1,3 @@ +string_utils +testing-utils +util