@@ -93,66 +93,10 @@ void gen_nondet_init(
93
93
irep_idt class_identifier)
94
94
{
95
95
const typet &type=ns.follow (expr.type ());
96
-
97
- if (type.id ()==ID_struct)
98
- {
99
- typedef struct_typet::componentt componentt;
100
- typedef struct_typet::componentst componentst;
101
-
102
- const struct_typet &struct_type=to_struct_type (type);
103
- const irep_idt struct_tag=struct_type.get_tag ();
104
-
105
- componentst components=struct_type.components ();
106
-
107
- if (!is_sub)
108
- class_identifier=struct_tag;
109
-
110
- recursion_set.insert (struct_tag);
111
- assert (!recursion_set.empty ());
112
-
113
- for (componentst::const_iterator it=components.begin ();
114
- it!=components.end (); it++)
115
- {
116
- const componentt &component=*it;
117
- const typet &component_type=component.type ();
118
- irep_idt name=component.get_name ();
119
-
120
- member_exprt me (expr, name, component_type);
121
-
122
- if (name==" @class_identifier" )
123
- {
124
- constant_exprt ci (class_identifier, string_typet ());
125
-
126
- code_assignt code (me, ci);
127
- init_code.copy_to_operands (code);
128
- }
129
- else
130
- {
131
- irep_idt new_class_identifier;
132
- assert (!name.empty ());
133
-
134
- is_sub = name[0 ]==' @' ;
135
-
136
- gen_nondet_init (
137
- me, init_code, ns, recursion_set, is_sub, class_identifier);
138
- }
139
- }
140
-
141
- recursion_set.erase (struct_tag);
142
- }
143
- else if (type.id ()!=ID_pointer)
144
- {
145
- assert (type.id ()!= ID_struct);
146
-
147
- side_effect_expr_nondett se=side_effect_expr_nondett (type);
148
-
149
- code_assignt code (expr, se);
150
- init_code.copy_to_operands (code);
151
- }
152
- else
96
+
97
+ if (type.id ()==ID_pointer)
153
98
{
154
- assert (type.id ()==ID_pointer);
155
-
99
+ #if 0
156
100
// dereferenced type
157
101
const pointer_typet &pointer_type=to_pointer_type(type);
158
102
const typet &subtype=ns.follow(pointer_type.subtype());
@@ -198,6 +142,55 @@ void gen_nondet_init(
198
142
code_assignt code(expr, null_pointer_expr);
199
143
init_code.copy_to_operands(code);
200
144
}
145
+ #endif
146
+ }
147
+ else if (type.id ()==ID_struct)
148
+ {
149
+ typedef struct_typet::componentst componentst;
150
+
151
+ const struct_typet &struct_type=to_struct_type (type);
152
+ const irep_idt struct_tag=struct_type.get_tag ();
153
+
154
+ const componentst &components=struct_type.components ();
155
+
156
+ recursion_set.insert (struct_tag);
157
+ assert (!recursion_set.empty ());
158
+
159
+ for (const auto & component : components)
160
+ {
161
+ const typet &component_type=component.type ();
162
+ irep_idt name=component.get_name ();
163
+
164
+ member_exprt me (expr, name, component_type);
165
+
166
+ if (name==" @class_identifier" )
167
+ {
168
+ constant_exprt ci (class_identifier, string_typet ());
169
+
170
+ code_assignt code (me, ci);
171
+ init_code.copy_to_operands (code);
172
+ }
173
+ else
174
+ {
175
+ assert (!name.empty ());
176
+
177
+ bool _is_sub = name[0 ]==' @' ;
178
+ irep_idt _class_identifier=
179
+ _is_sub?(class_identifier.empty ()?struct_tag:class_identifier):" " ;
180
+
181
+ gen_nondet_init (
182
+ me, init_code, ns, recursion_set, _is_sub, _class_identifier);
183
+ }
184
+ }
185
+
186
+ recursion_set.erase (struct_tag);
187
+ }
188
+ else
189
+ {
190
+ side_effect_expr_nondett se=side_effect_expr_nondett (type);
191
+
192
+ code_assignt code (expr, se);
193
+ init_code.copy_to_operands (code);
201
194
}
202
195
}
203
196
}
@@ -279,15 +272,16 @@ exprt gen_argument(
279
272
if (type.id ()==ID_pointer)
280
273
{
281
274
symbolt &aux_symbol=new_tmp_symbol (symbol_table);
282
- aux_symbol.type =type;
275
+ aux_symbol.type =type. subtype () ;
283
276
aux_symbol.is_static_lifetime =true ;
284
277
285
- exprt object_this_ptr =aux_symbol.symbol_expr ();
278
+ exprt object =aux_symbol.symbol_expr ();
286
279
287
280
const namespacet ns (symbol_table);
288
- gen_nondet_init (object_this_ptr , init_code, ns);
281
+ gen_nondet_init (object , init_code, ns);
289
282
290
- return side_effect_expr_nondett (type);
283
+ // todo: need to pass null, possibly
284
+ return address_of_exprt (object);
291
285
}
292
286
else if (type.id ()==ID_c_bool)
293
287
{
0 commit comments