File tree 7 files changed +40
-35
lines changed 7 files changed +40
-35
lines changed Original file line number Diff line number Diff line change @@ -487,9 +487,10 @@ void dump_ct::convert_compound(
487
487
{
488
488
const typet &comp_type = comp.type ();
489
489
490
- if (comp_type.id ()==ID_code ||
491
- comp.get_bool (ID_from_base) ||
492
- comp.get_is_padding ())
490
+ DATA_INVARIANT (
491
+ comp_type.id () != ID_code, " struct member must not be of code type" );
492
+
493
+ if (comp.get_bool (ID_from_base) || comp.get_is_padding ())
493
494
continue ;
494
495
495
496
const typet *non_array_type = &comp_type;
Original file line number Diff line number Diff line change @@ -147,10 +147,12 @@ std::string graphml_witnesst::convert_assign_rec(
147
147
assign.rhs ().operands ().begin ();
148
148
for (const auto &comp : components)
149
149
{
150
- if (comp.type ().id ()==ID_code ||
151
- comp.get_is_padding () ||
152
- // for some reason #is_padding gets lost in *some* cases
153
- has_prefix (id2string (comp.get_name ()), " $pad" ))
150
+ DATA_INVARIANT (
151
+ comp.type ().id () != ID_code, " struct member must not be of code type" );
152
+ if (
153
+ comp.get_is_padding () ||
154
+ // for some reason #is_padding gets lost in *some* cases
155
+ has_prefix (id2string (comp.get_name ()), " $pad" ))
154
156
continue ;
155
157
156
158
INVARIANT (
Original file line number Diff line number Diff line change @@ -976,10 +976,9 @@ mp_integer interpretert::get_size(const typet &type)
976
976
977
977
for (const auto &comp : components)
978
978
{
979
- const typet &sub_type=comp.type ();
980
-
981
- if (sub_type.id ()!=ID_code)
982
- sum+=get_size (sub_type);
979
+ DATA_INVARIANT (
980
+ comp.type ().id () != ID_code, " struct member must not be of code type" );
981
+ sum += get_size (comp.type ());
983
982
}
984
983
985
984
return sum;
@@ -993,10 +992,9 @@ mp_integer interpretert::get_size(const typet &type)
993
992
994
993
for (const auto &comp : components)
995
994
{
996
- const typet &sub_type=comp.type ();
997
-
998
- if (sub_type.id ()!=ID_code)
999
- max_size=std::max (max_size, get_size (sub_type));
995
+ DATA_INVARIANT (
996
+ comp.type ().id () != ID_code, " union member must not be of code type" );
997
+ max_size = std::max (max_size, get_size (comp.type ()));
1000
998
}
1001
999
1002
1000
return max_size;
Original file line number Diff line number Diff line change @@ -703,7 +703,10 @@ exprt gdb_value_extractort::get_struct_value(
703
703
{
704
704
const struct_typet::componentt &component = struct_type.components ()[i];
705
705
706
- if (component.get_is_padding () || component.type ().id () == ID_code)
706
+ DATA_INVARIANT (
707
+ component.type ().id () != ID_code,
708
+ " struct member must not be of code type" );
709
+ if (component.get_is_padding ())
707
710
{
708
711
continue ;
709
712
}
Original file line number Diff line number Diff line change @@ -1262,8 +1262,10 @@ void value_sett::assign(
1262
1262
const typet &subtype = c.type ();
1263
1263
const irep_idt &name = c.get_name ();
1264
1264
1265
- // ignore methods and padding
1266
- if (subtype.id () == ID_code || c.get_is_padding ())
1265
+ // ignore padding
1266
+ DATA_INVARIANT (
1267
+ subtype.id () != ID_code, " struct member must not be of code type" );
1268
+ if (c.get_is_padding ())
1267
1269
continue ;
1268
1270
1269
1271
member_exprt lhs_member (lhs, name, subtype);
@@ -1768,8 +1770,10 @@ void value_sett::erase_struct_union_symbol(
1768
1770
const typet &subtype = c.type ();
1769
1771
const irep_idt &name = c.get_name ();
1770
1772
1771
- // ignore methods and padding
1772
- if (subtype.id () == ID_code || c.get_is_padding ())
1773
+ // ignore padding
1774
+ DATA_INVARIANT (
1775
+ subtype.id () != ID_code, " struct/union member must not be of code type" );
1776
+ if (c.get_is_padding ())
1773
1777
continue ;
1774
1778
1775
1779
erase_symbol_rec (subtype, erase_prefix + " ." + id2string (name), ns);
Original file line number Diff line number Diff line change @@ -986,8 +986,11 @@ void value_set_fit::assign(
986
986
const typet &subtype=c_it->type ();
987
987
const irep_idt &name = c_it->get_name ();
988
988
989
- // ignore methods
990
- if (subtype.id ()==ID_code)
989
+ // ignore padding
990
+ DATA_INVARIANT (
991
+ subtype.id () != ID_code,
992
+ " struct/union member must not be of code type" );
993
+ if (c_it->get_is_padding ())
991
994
continue ;
992
995
993
996
member_exprt lhs_member (lhs, name, subtype);
Original file line number Diff line number Diff line change @@ -188,20 +188,14 @@ optionalt<exprt> expr_initializert<nondet>::expr_initializer_rec(
188
188
189
189
for (const auto &c : components)
190
190
{
191
- if (c.type ().id () == ID_code)
192
- {
193
- constant_exprt code_value (ID_nil, c.type ());
194
- code_value.add_source_location ()=source_location;
195
- value.add_to_operands (std::move (code_value));
196
- }
197
- else
198
- {
199
- const auto member = expr_initializer_rec (c.type (), source_location);
200
- if (!member.has_value ())
201
- return {};
191
+ DATA_INVARIANT (
192
+ c.type ().id () != ID_code, " struct member must not be of code type" );
202
193
203
- value.add_to_operands (std::move (*member));
204
- }
194
+ const auto member = expr_initializer_rec (c.type (), source_location);
195
+ if (!member.has_value ())
196
+ return {};
197
+
198
+ value.add_to_operands (std::move (*member));
205
199
}
206
200
207
201
value.add_source_location ()=source_location;
You can’t perform that action at this time.
0 commit comments