-
Type:
Bug
-
Resolution: Unresolved
-
Priority:
P4
-
Affects Version/s: 26
-
Component/s: hotspot
There is a number of compiler tests that cannot run if an agent is present.
The Compiler Framework is able to detect this and throw jtreg.SkippedException, however jtreg doesn't recognize this and does not mark the test as skipped, because the SkippedExeption get wrapped into compiler.lib.compile_framework.CompileFrameworkException.
===
compiler.lib.compile_framework.CompileFrameworkException: Exception in Compile Framework:
Invocation target:
at compiler.lib.compile_framework.CompileFramework.invoke(CompileFramework.java:135)
at compiler.igvn.TestMinMaxIdentity.main(TestMinMaxIdentity.java:62)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:565)
at com.sun.javatest.regtest.agent.MainWrapper$MainTask.run(MainWrapper.java:138)
at java.base/java.lang.Thread.run(Thread.java:1527)
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:119)
at java.base/java.lang.reflect.Method.invoke(Method.java:565)
at compiler.lib.compile_framework.CompileFramework.invoke(CompileFramework.java:131)
... 5 more
Caused by: jtreg.SkippedException: Can't run test with agent.
at compiler.lib.ir_framework.TestFramework.checkCompatibleFlags(TestFramework.java:855)
at compiler.lib.ir_framework.TestFramework.start(TestFramework.java:425)
at compiler.igvn.templated.MinMaxIdentity.main(MinMaxIdentity.java:13)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
... 7 more
===
Can be reproduced with async profiler:
$ make test JTREG="VERBOSE=summary,fail,error;JAVA_OPTIONS=-agentpath:../async-profiler-binaries/lib/libasyncProfiler.dylib=start,event=cpu,cstack=vm,loglevel=none,flat,file=/dev/null" TEST="test/hotspot/jtreg/compiler/loopopts/superword/TestDependencyOffsets.java"
The solution is to recognize SkippedException in the causes for InvocationTargetException and throw it explicitly in compiler.lib.compile_framework.CompileFramework.invoke():
public Object invoke(String className, String methodName, Object[] args) {
} catch (IllegalAccessException e) {
throw new CompileFrameworkException("Illegal access:", e);
} catch (InvocationTargetException e) {
+ findJtregSkippedExceptionInCauses(e).ifPresent(ex -> { throw ex; });
throw new CompileFrameworkException("Invocation target:", e);
}
}
...
I verified the fix and it worked:
Running test 'jtreg:test/hotspot/jtreg/compiler/loopopts/superword/TestDependencyOffsets.java'
Passed: compiler/loopopts/superword/TestDependencyOffsets.java#vec-v008-A
Passed: compiler/loopopts/superword/TestDependencyOffsets.java#vanilla-U
Passed: compiler/loopopts/superword/TestDependencyOffsets.java#vec-v016-A
Passed: compiler/loopopts/superword/TestDependencyOffsets.java#vec-v004-U
Passed: compiler/loopopts/superword/TestDependencyOffsets.java#vec-v004-A
Passed: compiler/loopopts/superword/TestDependencyOffsets.java#vanilla-A
Passed: compiler/loopopts/superword/TestDependencyOffsets.java#vec-v008-U
Passed: compiler/loopopts/superword/TestDependencyOffsets.java#vec-v016-U
Passed: compiler/loopopts/superword/TestDependencyOffsets.java#vec-v032-A
Passed: compiler/loopopts/superword/TestDependencyOffsets.java#vec-v032-U
Passed: compiler/loopopts/superword/TestDependencyOffsets.java#vec-v064-A
Passed: compiler/loopopts/superword/TestDependencyOffsets.java#vec-v064-U
Test results: passed: 12; skipped: 12; did not meet platform requirements: 22
Report written to /Users/kirshiro/ws/openjdk/jdk-tip1/build/macosx-aarch64-server-release/test-results/jtreg_test_hotspot_jtreg_compiler_loopopts_superword_TestDependencyOffsets_java/html/report.html
Results written to /Users/kirshiro/ws/openjdk/jdk-tip1/build/macosx-aarch64-server-release/test-support/jtreg_test_hotspot_jtreg_compiler_loopopts_superword_TestDependencyOffsets_java
Finished running test 'jtreg:test/hotspot/jtreg/compiler/loopopts/superword/TestDependencyOffsets.java'
Test report is stored in build/macosx-aarch64-server-release/test-results/jtreg_test_hotspot_jtreg_compiler_loopopts_superword_TestDependencyOffsets_java
==============================
Test summary
==============================
TEST TOTAL PASS FAIL ERROR SKIP
jtreg:test/hotspot/jtreg/compiler/loopopts/superword/TestDependencyOffsets.java
34 0 0 0 34
==============================
TEST SUCCESS
The Compiler Framework is able to detect this and throw jtreg.SkippedException, however jtreg doesn't recognize this and does not mark the test as skipped, because the SkippedExeption get wrapped into compiler.lib.compile_framework.CompileFrameworkException.
===
compiler.lib.compile_framework.CompileFrameworkException: Exception in Compile Framework:
Invocation target:
at compiler.lib.compile_framework.CompileFramework.invoke(CompileFramework.java:135)
at compiler.igvn.TestMinMaxIdentity.main(TestMinMaxIdentity.java:62)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:565)
at com.sun.javatest.regtest.agent.MainWrapper$MainTask.run(MainWrapper.java:138)
at java.base/java.lang.Thread.run(Thread.java:1527)
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:119)
at java.base/java.lang.reflect.Method.invoke(Method.java:565)
at compiler.lib.compile_framework.CompileFramework.invoke(CompileFramework.java:131)
... 5 more
Caused by: jtreg.SkippedException: Can't run test with agent.
at compiler.lib.ir_framework.TestFramework.checkCompatibleFlags(TestFramework.java:855)
at compiler.lib.ir_framework.TestFramework.start(TestFramework.java:425)
at compiler.igvn.templated.MinMaxIdentity.main(MinMaxIdentity.java:13)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
... 7 more
===
Can be reproduced with async profiler:
$ make test JTREG="VERBOSE=summary,fail,error;JAVA_OPTIONS=-agentpath:../async-profiler-binaries/lib/libasyncProfiler.dylib=start,event=cpu,cstack=vm,loglevel=none,flat,file=/dev/null" TEST="test/hotspot/jtreg/compiler/loopopts/superword/TestDependencyOffsets.java"
The solution is to recognize SkippedException in the causes for InvocationTargetException and throw it explicitly in compiler.lib.compile_framework.CompileFramework.invoke():
public Object invoke(String className, String methodName, Object[] args) {
} catch (IllegalAccessException e) {
throw new CompileFrameworkException("Illegal access:", e);
} catch (InvocationTargetException e) {
+ findJtregSkippedExceptionInCauses(e).ifPresent(ex -> { throw ex; });
throw new CompileFrameworkException("Invocation target:", e);
}
}
...
I verified the fix and it worked:
Running test 'jtreg:test/hotspot/jtreg/compiler/loopopts/superword/TestDependencyOffsets.java'
Passed: compiler/loopopts/superword/TestDependencyOffsets.java#vec-v008-A
Passed: compiler/loopopts/superword/TestDependencyOffsets.java#vanilla-U
Passed: compiler/loopopts/superword/TestDependencyOffsets.java#vec-v016-A
Passed: compiler/loopopts/superword/TestDependencyOffsets.java#vec-v004-U
Passed: compiler/loopopts/superword/TestDependencyOffsets.java#vec-v004-A
Passed: compiler/loopopts/superword/TestDependencyOffsets.java#vanilla-A
Passed: compiler/loopopts/superword/TestDependencyOffsets.java#vec-v008-U
Passed: compiler/loopopts/superword/TestDependencyOffsets.java#vec-v016-U
Passed: compiler/loopopts/superword/TestDependencyOffsets.java#vec-v032-A
Passed: compiler/loopopts/superword/TestDependencyOffsets.java#vec-v032-U
Passed: compiler/loopopts/superword/TestDependencyOffsets.java#vec-v064-A
Passed: compiler/loopopts/superword/TestDependencyOffsets.java#vec-v064-U
Test results: passed: 12; skipped: 12; did not meet platform requirements: 22
Report written to /Users/kirshiro/ws/openjdk/jdk-tip1/build/macosx-aarch64-server-release/test-results/jtreg_test_hotspot_jtreg_compiler_loopopts_superword_TestDependencyOffsets_java/html/report.html
Results written to /Users/kirshiro/ws/openjdk/jdk-tip1/build/macosx-aarch64-server-release/test-support/jtreg_test_hotspot_jtreg_compiler_loopopts_superword_TestDependencyOffsets_java
Finished running test 'jtreg:test/hotspot/jtreg/compiler/loopopts/superword/TestDependencyOffsets.java'
Test report is stored in build/macosx-aarch64-server-release/test-results/jtreg_test_hotspot_jtreg_compiler_loopopts_superword_TestDependencyOffsets_java
==============================
Test summary
==============================
TEST TOTAL PASS FAIL ERROR SKIP
jtreg:test/hotspot/jtreg/compiler/loopopts/superword/TestDependencyOffsets.java
34 0 0 0 34
==============================
TEST SUCCESS
- relates to
-
JDK-8364973 Add JVMTI stress testing mode
-
- Resolved
-
- links to
-
Review(master)
openjdk/jdk/29707