@@ -130,7 +130,8 @@ linker_script_merget::linker_script_merget(
130
130
replacement_predicates(
131
131
{
132
132
replacement_predicatet (" address of array's first member" ,
133
- [](const exprt expr){ return to_symbol_expr (expr.op0 ().op0 ()); },
133
+ [](const exprt &expr) -> const symbol_exprt&
134
+ { return to_symbol_expr (expr.op0 ().op0 ()); },
134
135
[](const exprt expr)
135
136
{
136
137
return expr.id ()==ID_address_of &&
@@ -146,7 +147,8 @@ linker_script_merget::linker_script_merget(
146
147
expr.op0 ().op1 ().type ().id ()==ID_signedbv;
147
148
}),
148
149
replacement_predicatet (" address of array" ,
149
- [](const exprt expr){ return to_symbol_expr (expr.op0 ()); },
150
+ [](const exprt &expr) -> const symbol_exprt&
151
+ { return to_symbol_expr (expr.op0 ()); },
150
152
[](const exprt expr)
151
153
{
152
154
return expr.id ()==ID_address_of &&
@@ -156,14 +158,16 @@ linker_script_merget::linker_script_merget(
156
158
expr.op0 ().type ().id ()==ID_array;
157
159
}),
158
160
replacement_predicatet (" array variable" ,
159
- [](const exprt expr){ return to_symbol_expr (expr); },
161
+ [](const exprt &expr) -> const symbol_exprt&
162
+ { return to_symbol_expr (expr); },
160
163
[](const exprt expr)
161
164
{
162
165
return expr.id ()==ID_symbol &&
163
166
expr.type ().id ()==ID_array;
164
167
}),
165
168
replacement_predicatet (" pointer (does not need pointerizing)" ,
166
- [](const exprt expr){ return to_symbol_expr (expr); },
169
+ [](const exprt &expr) -> const symbol_exprt&
170
+ { return to_symbol_expr (expr); },
167
171
[](const exprt expr)
168
172
{
169
173
return expr.id ()==ID_symbol &&
@@ -280,7 +284,8 @@ int linker_script_merget::pointerize_subexprs_of(
280
284
{
281
285
if (!pattern.match (expr))
282
286
continue ;
283
- const symbol_exprt &inner_symbol=pattern.inner_symbol (expr);
287
+ // take a copy, expr will be changed below
288
+ const symbol_exprt inner_symbol=pattern.inner_symbol (expr);
284
289
if (pair.first !=inner_symbol.get_identifier ())
285
290
continue ;
286
291
tmp=replace_expr (expr, linker_values, inner_symbol, pair.first ,
0 commit comments