@@ -3184,28 +3184,38 @@ void java_bytecode_convert_methodt::save_stack_entries(
3184
3184
{
3185
3185
for (auto &stack_entry : stack)
3186
3186
{
3187
+ // remove typecasts if existing
3188
+ auto entry = std::ref (stack_entry);
3189
+ while (entry.get ().id () == ID_typecast)
3190
+ {
3191
+ entry = std::ref (to_typecast_expr (stack_entry).op ());
3192
+ }
3193
+
3187
3194
// variables or static fields and symbol -> save symbols with same id
3188
- if ((write_type==bytecode_write_typet::VARIABLE ||
3189
- write_type==bytecode_write_typet::STATIC_FIELD) &&
3190
- stack_entry.id ()==ID_symbol)
3195
+ if (
3196
+ (write_type == bytecode_write_typet::VARIABLE ||
3197
+ write_type == bytecode_write_typet::STATIC_FIELD) &&
3198
+ entry.get ().id () == ID_symbol)
3191
3199
{
3192
- const symbol_exprt &var=to_symbol_expr (stack_entry);
3193
- if (var.get_identifier ()==identifier)
3200
+ if (to_symbol_expr (entry.get ()).get_identifier () == identifier)
3194
3201
create_stack_tmp_var (tmp_var_prefix, tmp_var_type, block, stack_entry);
3195
3202
}
3196
3203
3197
3204
// array reference and dereference -> save all references on the stack
3198
- else if (write_type==bytecode_write_typet::ARRAY_REF &&
3199
- stack_entry.id ()==ID_dereference)
3205
+ else if (
3206
+ write_type == bytecode_write_typet::ARRAY_REF &&
3207
+ entry.get ().id () == ID_dereference)
3208
+ {
3200
3209
create_stack_tmp_var (tmp_var_prefix, tmp_var_type, block, stack_entry);
3210
+ }
3201
3211
3202
3212
// field and member access -> compare component name
3203
- else if (write_type==bytecode_write_typet::FIELD &&
3204
- stack_entry.id ()==ID_member)
3213
+ else if (
3214
+ write_type == bytecode_write_typet::FIELD &&
3215
+ entry.get ().id () == ID_member)
3205
3216
{
3206
- const irep_idt &entry_id=
3207
- to_member_expr (stack_entry).get_component_name ();
3208
- if (entry_id==identifier)
3217
+ const irep_idt &entry_id = to_member_expr (entry).get_component_name ();
3218
+ if (entry_id == identifier)
3209
3219
create_stack_tmp_var (tmp_var_prefix, tmp_var_type, block, stack_entry);
3210
3220
}
3211
3221
}
0 commit comments