Skip to content

Commit 7069c17

Browse files
author
Daniel Kroening
authored
Merge pull request #386 from smowton/dont_cast_on_lhs_master
Don't cast field assignments on the LHS
2 parents e34a845 + 6e0d4e3 commit 7069c17

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

src/java_bytecode/java_bytecode_convert_method.cpp

+18-7
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,18 @@ class java_bytecode_convert_methodt:public messaget
119119
}
120120

121121
// JVM local variables
122-
const exprt variable(const exprt &arg, char type_char, size_t address, instruction_sizet inst_size)
122+
enum variable_cast_argumentt
123+
{
124+
CAST_AS_NEEDED,
125+
NO_CAST
126+
};
127+
128+
const exprt variable(
129+
const exprt &arg,
130+
char type_char,
131+
size_t address,
132+
instruction_sizet inst_size,
133+
variable_cast_argumentt do_cast)
123134
{
124135
irep_idt number=to_constant_expr(arg).get_value();
125136

@@ -145,7 +156,7 @@ class java_bytecode_convert_methodt:public messaget
145156
else
146157
{
147158
exprt result=var.symbol_expr;
148-
if(t!=result.type()) result=typecast_exprt(result, t);
159+
if(do_cast==CAST_AS_NEEDED && t!=result.type()) result=typecast_exprt(result, t);
149160
return result;
150161
}
151162
}
@@ -835,7 +846,7 @@ codet java_bytecode_convert_methodt::convert_instructions(
835846
// store value into some local variable
836847
assert(op.size()==1 && results.empty());
837848

838-
exprt var=variable(arg0, statement[0], i_it->address, INST_INDEX);
849+
exprt var=variable(arg0, statement[0], i_it->address, INST_INDEX, NO_CAST);
839850

840851
exprt toassign=op[0];
841852
if('a'==statement[0] && toassign.type()!=var.type())
@@ -866,7 +877,7 @@ codet java_bytecode_convert_methodt::convert_instructions(
866877
else if(statement==patternt("?load"))
867878
{
868879
// load a value from a local variable
869-
results[0]=variable(arg0, statement[0], i_it->address, INST_INDEX);
880+
results[0]=variable(arg0, statement[0], i_it->address, INST_INDEX, CAST_AS_NEEDED);
870881
}
871882
else if(statement=="ldc" || statement=="ldc_w" ||
872883
statement=="ldc2" || statement=="ldc2_w")
@@ -1028,10 +1039,10 @@ codet java_bytecode_convert_methodt::convert_instructions(
10281039
else if(statement=="iinc")
10291040
{
10301041
code_assignt code_assign;
1031-
code_assign.lhs()=variable(arg0, 'i', i_it->address, INST_INDEX_CONST);
1042+
code_assign.lhs()=variable(arg0, 'i', i_it->address, INST_INDEX_CONST, NO_CAST);
10321043
code_assign.rhs()=plus_exprt(
1033-
variable(arg0, 'i', i_it->address, INST_INDEX_CONST),
1034-
typecast_exprt(arg1, java_int_type()));
1044+
variable(arg0, 'i', i_it->address, INST_INDEX_CONST, CAST_AS_NEEDED),
1045+
typecast_exprt(arg1, java_int_type()));
10351046
c=code_assign;
10361047
}
10371048
else if(statement==patternt("?xor"))

0 commit comments

Comments
 (0)