RFR (S) 8148787: StringConcatFactory exactness check produces bad bytecode when a non-arg concat is requested

Aleksey Shipilev aleksey.shipilev at oracle.com
Mon Feb 1 19:47:23 UTC 2016


Please review the fix for a corner case in StringConcatFactory exactness
check, which produces invalid bytecode:

Note that this happens when all three things align:
  a) BSM is called directly, as Java method -- javac would never produce
such a String concat shape;
  b) BC_SB_SIZED_EXACT strategy is used, so exactness check can be applied;
  c) -Djava.lang.invoke.stringConcat.debug=true is set, forcing
exactness check to run;

The issue is with exactness debug check using a temporary local variable
when the local variable table is small (like it is in non-arg case). The
code can be reformulated without using temporary variables, with a
creative use of "swap" instruction.

Ironically, the bug is within the debugging code, so we don't care about
its performance at all:


More information about the core-libs-dev mailing list