**The problem:
paser_emit_ldarga() takes the address of a given variable. The emitted GENERIC looks like:
temp = &arg;
But the variable arg is not marked as addressable. It causes gimplifier to create a temporary variable in the following way:
arg.1 = arg;
temp = &arg.1;
Thus, the taken address belongs to arg.1 and not to arg. It means that writes through *temp will not affect arg.
**Fixed:
It has been fixed. I just added mark_addressable(var) in parser_emit_ldarga();
**Affected benchmarks: 186.crafty (at least, probably most of the benchmarks).
|