JDK-8042265 : GC flags shouldn't be passed to compiler/regalloc/C1ObjectSpillInLogicOp.java
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: 7,8,9
  • Priority: P4
  • Status: Closed
  • Resolution: Duplicate
  • Submitted: 2013-11-27
  • Updated: 2014-11-05
  • Resolved: 2014-11-05
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 9
9Resolved
Related Reports
Blocks :  
Duplicate :  
Description
compiler/regalloc/C1ObjectSpillInLogicOp.java  specify -XX:+UseG1GC, so other GC flags can't be passed to it.

#section:main
----------messages:(3/916)----------
command: main -XX:+UseG1GC C1ObjectSpillInLogicOp G1 barriers use logical operators (xor) on T_OBJECT mixed with T_LONG or T_INT. The current implementation of logical operations on x86 in C1 doesn't allow for long operands to be on stack. There is a special code in the register allocator that forces long arguments in registers on x86. However T_OBJECT can be spilled just fine, and in that case the xor emission will fail.
reason: User specified action: run main/othervm -XX:+UseG1GC C1ObjectSpillInLogicOp G1 barriers use logical operators (xor) on T_OBJECT mixed with T_LONG or T_INT. The current implementation of logical operations on x86 in C1 doesn't allow for long operands to be on stack. There is a special code in the register allocator that forces long arguments in registers on x86. However T_OBJECT can be spilled just fine, and in that case the xor emission will fail. 
elapsed time (seconds): 0.01
----------System.out:(0/0)----------
----------System.err:(3/222)----------
Conflicting collector combinations in option list; please refer to the release notes for the combinations allowed
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
result: Failed. Unexpected exit from test [exit code: 1]


Comments
You can work around this by running the test without any special GC options, and then have the main program check the options for the test run and decide whether or not to start a child JVM with the desired options. This could conveniently be done in library code, If you run the test suite in agentvm mode by default, there is little overhead to run the code to decide whether or not to start the child JVM.
23-01-2014

vmsqe-compiler-delayed: blocked by CODETOOLS-7900307
22-01-2014

RULE compiler/regalloc/C1ObjectSpillInLogicOp.java ExitCode 1
27-11-2013

Should be resolved by using @required tag in the new version of jtreg.
27-11-2013