@@ -614,42 +614,33 @@ void cpp_typecheckt::typecheck_compound_declarator(
614
614
lookup (args[0 ].get (ID_C_identifier)).symbol_expr (),
615
615
to_code_type (component.type ()).parameters ()[0 ].type ());
616
616
617
+ side_effect_expr_function_callt expr_call;
618
+ expr_call.function ()=
619
+ symbol_exprt (component.get_name (), component.type ());
620
+ expr_call.arguments ().reserve (args.size ());
621
+ expr_call.arguments ().push_back (late_cast);
622
+
623
+ for (std::size_t i=1 ; i < args.size (); i++)
624
+ {
625
+ expr_call.arguments ().push_back (
626
+ lookup (args[i].get (ID_C_identifier)).symbol_expr ());
627
+ }
617
628
618
629
if (code_type.return_type ().id ()!=ID_empty &&
619
630
code_type.return_type ().id ()!=ID_destructor)
620
631
{
621
- side_effect_expr_function_callt expr_call;
622
- expr_call.function ()=
623
- symbol_exprt (component.get_name (), component.type ());
624
632
expr_call.type ()=to_code_type (component.type ()).return_type ();
625
- expr_call.arguments ().reserve (args.size ());
626
- expr_call.arguments ().push_back (late_cast);
627
-
628
- for (std::size_t i=1 ; i < args.size (); i++)
629
- {
630
- expr_call.arguments ().push_back (
631
- namespacet (symbol_table).lookup (
632
- args[i].get (ID_C_identifier)).symbol_expr ());
633
- }
633
+ exprt already_typechecked (ID_already_typechecked);
634
+ already_typechecked.move_to_operands (expr_call);
634
635
635
- func_symb.value = code_returnt (expr_call );
636
+ func_symb.value = code_returnt (already_typechecked). make_block ( );
636
637
}
637
638
else
638
639
{
639
- code_function_callt code_func;
640
- code_func.function ()=
641
- symbol_exprt (component.get_name (), component.type ());
642
- code_func.arguments ().reserve (args.size ());
643
- code_func.arguments ().push_back (late_cast);
640
+ exprt already_typechecked (ID_already_typechecked);
641
+ already_typechecked.move_to_operands (expr_call);
644
642
645
- for (std::size_t i=1 ; i < args.size (); i++)
646
- {
647
- code_func.arguments ().push_back (
648
- namespacet (symbol_table).lookup (
649
- args[i].get (ID_C_identifier)).symbol_expr ());
650
- }
651
-
652
- func_symb.value =code_func;
643
+ func_symb.value = code_expressiont (already_typechecked).make_block ();
653
644
}
654
645
655
646
// add this new function to the list of components
@@ -665,6 +656,8 @@ void cpp_typecheckt::typecheck_compound_declarator(
665
656
CHECK_RETURN (!failed);
666
657
}
667
658
659
+ put_compound_into_scope (new_compo);
660
+
668
661
// next base
669
662
virtual_bases.erase (virtual_bases.begin ());
670
663
}
0 commit comments