@@ -130,7 +130,8 @@ linker_script_merget::linker_script_merget(
130130 replacement_predicates(
131131 {
132132 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 ()); },
134135 [](const exprt expr)
135136 {
136137 return expr.id ()==ID_address_of &&
@@ -146,7 +147,8 @@ linker_script_merget::linker_script_merget(
146147 expr.op0 ().op1 ().type ().id ()==ID_signedbv;
147148 }),
148149 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 ()); },
150152 [](const exprt expr)
151153 {
152154 return expr.id ()==ID_address_of &&
@@ -156,14 +158,16 @@ linker_script_merget::linker_script_merget(
156158 expr.op0 ().type ().id ()==ID_array;
157159 }),
158160 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); },
160163 [](const exprt expr)
161164 {
162165 return expr.id ()==ID_symbol &&
163166 expr.type ().id ()==ID_array;
164167 }),
165168 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); },
167171 [](const exprt expr)
168172 {
169173 return expr.id ()==ID_symbol &&
@@ -280,7 +284,8 @@ int linker_script_merget::pointerize_subexprs_of(
280284 {
281285 if (!pattern.match (expr))
282286 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);
284289 if (pair.first !=inner_symbol.get_identifier ())
285290 continue ;
286291 tmp=replace_expr (expr, linker_values, inner_symbol, pair.first ,
0 commit comments