openj9 icon indicating copy to clipboard operation
openj9 copied to clipboard

Valhalla JTREG test failures

Open tajila opened this issue 4 years ago • 13 comments

The following are the jtreg tests failures. They can be found in https://github.com/openjdk/valhalla/tree/lworld/test/hotspot/jtreg/runtime/valhalla/inlinetypes

JT Harness : Tests that failed

runtime/valhalla/inlinetypes/CircularityTest.java: Test initialization of static inline fields with circularity
runtime/valhalla/inlinetypes/ClassPrintLayoutDcmd.java: Test the VM.class_print_layout command
runtime/valhalla/inlinetypes/CreationErrorTest.java: Test data movement with inline types
runtime/valhalla/inlinetypes/EmptyInlineTest.java: Test support for empty inline types (no instance fields)
runtime/valhalla/inlinetypes/FlattenableSemanticTest.java: Flattenable field semantic test
runtime/valhalla/inlinetypes/HiddenInlineClassTest.java: Test a hidden inline class.
runtime/valhalla/inlinetypes/InlineOops.java#id4: Test embedding oops into Inline types
runtime/valhalla/inlinetypes/InlineOops.java#id5: Test embedding oops into Inline types
runtime/valhalla/inlinetypes/InlineOops.java#id6: Test embedding oops into Inline types
runtime/valhalla/inlinetypes/InlineOops.java#id7: Test embedding oops into Inline types
runtime/valhalla/inlinetypes/InlineTypeArray.java: Plain array test for Inline Types
runtime/valhalla/inlinetypes/InlineTypeCreation.java: Inline Type creation test
runtime/valhalla/inlinetypes/InlineTypeDensity.java: Heap density test for InlineTypes
runtime/valhalla/inlinetypes/InlineTypeGetField.java: Inline Type get field test
runtime/valhalla/inlinetypes/InlineTypesTest.java: Test data movement with inline types
runtime/valhalla/inlinetypes/MultiANewArrayTest/MultiANewArrayTest.java: test that mismatches in bottom class of multi-dimensional arrays are correctly detected
runtime/valhalla/inlinetypes/ObjectMethods.java: Check object method implemented by the VM behave with inline types
runtime/valhalla/inlinetypes/QuickeningTest.java: Test quickening of getfield and putfield applied to inline fields
runtime/valhalla/inlinetypes/StaticFieldsTest.java: Test circularity in static fields
runtime/valhalla/inlinetypes/TestFieldTypeMismatch.java:
runtime/valhalla/inlinetypes/TestInheritedInlineTypeFields.java: Test if inline field klasses are correctly retrieved for inherited fields
runtime/valhalla/inlinetypes/UninitializedInlineFieldsTest.java: Uninitialized inline fields test
runtime/valhalla/inlinetypes/UnsafeTest.java: unsafe get/put/with inline type
runtime/valhalla/inlinetypes/ValueTearing.java: Test tearing of inline fields and array elements
runtime/valhalla/inlinetypes/VarArgsArray.java: Test if JVM API using varargs work with inline type arrays
runtime/valhalla/inlinetypes/VolatileTest.java: check effect of volatile keyword on flattenable fields
runtime/valhalla/inlinetypes/WithFieldAccessorTest.java: test nestmate access to an inline type's public, protected and private final fields.
runtime/valhalla/inlinetypes/WithFieldNoAccessTest.jcod: Check that IllegalAccessError exceptions get thrown if a class that is not a nestmate of an inline type tries to write to the inline type's final fields.
runtime/valhalla/inlinetypes/classfileparser/BadACCValue.java: test that if a class file has ACC_INLINE set then it must be run with option -XX:+EnableValhalla.
runtime/valhalla/inlinetypes/classfileparser/BadInlineTypes.java: test that the right exceptions get thrown for bad inline type class files.
runtime/valhalla/inlinetypes/primitiveObject/TestPrimitiveObject.java: test that PrimitiveObject interface is injected correctly
runtime/valhalla/inlinetypes/testSupers/TestSuperClasses.java: test that the JVM detects illegal super classes for inline types.
runtime/valhalla/inlinetypes/verifier/VerifierInlineTypes.java: test that the right exceptions get thrown for bad inline type class files. 
runtime/valhalla/inlinetypes/InlineOops.java#id0: Test embedding oops into Inline types
runtime/valhalla/inlinetypes/InlineOops.java#id1: Test embedding oops into Inline types
runtime/valhalla/inlinetypes/InlineOops.java#id2: Test embedding oops into Inline types
runtime/valhalla/inlinetypes/InlineOops.java#id3: Test embedding oops into Inline types
runtime/valhalla/inlinetypes/InlineWithJni.java: test JNI functions with inline types
runtime/valhalla/inlinetypes/TestJNIIsSameObject.java: Test JNI IsSameObject semantic with inline types 

tajila avatar Jul 12 '21 22:07 tajila

In order to run the tests I had to:

  • Modify const U_16 max_allowed_version = in cfreader.c to recognize jdk18 .class files. This won't be needed in the near future.

  • Also, I had to remove requires.extraPropDefns = ../../jtreg-ext/requires/VMProps.java from https://github.com/openjdk/valhalla/blob/lworld/test/hotspot/jtreg/TEST.ROOT

  • symlink the valhalla javac into the test jdk/bin dir

tajila avatar Jul 12 '21 22:07 tajila

This issue can be broken up into smaller issues to address the specific failures

tajila avatar Jul 12 '21 22:07 tajila

Looks like some cases should be captured by verifier, but they are not.

hangshao0 avatar Jul 13 '21 14:07 hangshao0

Looks like some cases should be captured by verifier, but they are not.

Yes, I would look at those issues last since the spec isn't fully finalized. The first priority are failures relating to field layouts or initialization since that is the most settled part of the spec.

tajila avatar Jul 13 '21 16:07 tajila

As mentioned in the meeting today, I discovered some layout differences between OpenJ9 and RI on Atomic VT and volatile VT fields. More details can be found here: https://github.com/eclipse-openj9/openj9/issues/13130#issuecomment-880929666. Result of some tests here could be affected by such difference.

hangshao0 avatar Aug 04 '21 19:08 hangshao0

As the verifier change is already merged, we can re-run these tests. @ehrenjulzert

hangshao0 avatar Oct 12 '22 19:10 hangshao0

When running using make test TEST="hotspot_valhalla" , The following tests fail on openj9:

runtime/valhalla/inlinetypes/CircularityTest.java: Test initialization of static inline fields with circularity 
runtime/valhalla/inlinetypes/ClassPrintLayoutDcmd.java: Test the VM.class_print_layout command 
runtime/valhalla/inlinetypes/HiddenInlineClassTest.java: Test a hidden inline class. 
runtime/valhalla/inlinetypes/InlineTypeArray.java: Plain array test for Inline Types 
runtime/valhalla/inlinetypes/InlineTypeDensity.java: Heap density test for InlineTypes 
runtime/valhalla/inlinetypes/InlineTypesTest.java: Test data movement with inline types 
runtime/valhalla/inlinetypes/InlineWithJni.java: test JNI functions with inline types 
runtime/valhalla/inlinetypes/MultiANewArrayTest/MultiANewArrayTest.java: test that mismatches in bottom class of multi-dimensional arrays are correctly detected 
runtime/valhalla/inlinetypes/ObjectMethods.java: Check object method implemented by the VM behave with inline types 
runtime/valhalla/inlinetypes/QuickeningTest.java: Test quickening of getfield and putfield applied to inline fields 
runtime/valhalla/inlinetypes/TestFieldTypeMismatch.java: 
runtime/valhalla/inlinetypes/TestInheritedInlineTypeFields.java: Test if inline field klasses are correctly retrieved for inherited fields 
runtime/valhalla/inlinetypes/TestJNIIsSameObject.java: Test JNI IsSameObject semantic with inline types 
runtime/valhalla/inlinetypes/UnsafeTest.java: unsafe get/put/with inline type 
runtime/valhalla/inlinetypes/ValuePreloadTest.java: 
runtime/valhalla/inlinetypes/VarArgsArray.java: Test if JVM API using varargs work with inline type arrays 
runtime/valhalla/inlinetypes/VolatileTest.java: check effect of volatile keyword on flattenable fields 
runtime/valhalla/inlinetypes/classfileparser/ACC_CFETest.java: test class access rules for abstract classes that have ACC_VALUE set. 
runtime/valhalla/inlinetypes/classfileparser/ACC_ICCETest.java: test that a value class cannot sub-class an identity class 
runtime/valhalla/inlinetypes/classfileparser/BadInlineTypes.java: test that the right exceptions get thrown for bad inline type class files. 
runtime/valhalla/inlinetypes/classfileparser/PrimitiveUsers.java: test that if a class file uses primitive classes, -XX:+EnablePrimitiveClasses must be set. 
runtime/valhalla/inlinetypes/testClassModifiers/TestClassModifiers.java: test that the JVM correctly accepts or rejects classes based on their ACC_VALUE/ACC_IDENTITY modifiers 
runtime/valhalla/inlinetypes/testSupers/TestSuperClasses.java: test that the JVM detects illegal super classes for value object and primitive value types. 
runtime/valhalla/inlinetypes/verifier/VerifierInlineTypes.java: test that the right exceptions get thrown for bad inline type class files. 
runtime/valhalla/inlinetypes/withfieldTests/RunWithfieldTests.java: test scenarios where getfield, putfield, and withfield access the same constant pool field_ref and test other withfield error cases. 
runtime/valhalla/inlinetypes/InlineOops.java#id0: Test embedding oops into Inline types 
runtime/valhalla/inlinetypes/InlineOops.java#id1: Test embedding oops into Inline types 
runtime/valhalla/inlinetypes/InlineOops.java#id2: Test embedding oops into Inline types 
runtime/valhalla/inlinetypes/InlineOops.java#id3: Test embedding oops into Inline types

The following tests are passing on openj9:

runtime/valhalla/inlinetypes/AbstractValueClassTest.java: Test that a super abstract value class is allowed. 
runtime/valhalla/inlinetypes/CheckcastTest.java: checkcast bytecode test 
runtime/valhalla/inlinetypes/ClassInitializationFailuresTest.java: Test several scenarios of class initialization failures 
runtime/valhalla/inlinetypes/CreationErrorTest.java: Test data movement with inline types 
runtime/valhalla/inlinetypes/EmptyInlineTest.java: Test support for empty inline types (no instance fields) 
runtime/valhalla/inlinetypes/FlattenableSemanticTest.java: Flattenable field semantic test 
runtime/valhalla/inlinetypes/Ifacmp.java: if_acmpeq/ne bytecode test 
runtime/valhalla/inlinetypes/InlineTypeCreation.java: Inline Type creation test 
runtime/valhalla/inlinetypes/InlineTypeGetField.java: Inline Type get field test 
runtime/valhalla/inlinetypes/StaticFieldsTest.java: Test circularity in static fields 
runtime/valhalla/inlinetypes/Test8186715.java: test return of buffered inline type passed in argument by caller 
runtime/valhalla/inlinetypes/TestBytecodeLib.java: Check bytecode test library generates the correct code for Valhalla changes to JVMS 
runtime/valhalla/inlinetypes/TestFieldNullability.java: 
runtime/valhalla/inlinetypes/UninitializedInlineFieldsTest.java: Uninitialized inline fields test 
runtime/valhalla/inlinetypes/VDefaultTest.java: vdefault bytecode test 
runtime/valhalla/inlinetypes/WithFieldAccessorTest.java: test nestmate access to an inline type's public, protected and private final fields. 
runtime/valhalla/inlinetypes/WithFieldTest.java: withfield bytecode test 
runtime/valhalla/inlinetypes/verifier/VTAssignability.java: Test basic verifier assignability of inline types. 
runtime/valhalla/inlinetypes/verifier/VTMonitor.java: Test that verifier allows monitor operations on inline types. 
serviceability/jvmti/Valhalla/FieldAccessModify/FieldAccessModify.java: Tests that all FieldAccess and FieldModification notifications are generated for primitive classes. 

All the tests are passing on RI.

ehrenjulzert avatar Nov 18 '22 16:11 ehrenjulzert

Talked to Ehren to also try with flattenning enabled. Some tests might pass with with flattenning enabled.

hangshao0 avatar Nov 18 '22 20:11 hangshao0

When flattening is enabled (with -XX:ValueTypeFlatteningThreshold=999999 and -XX:+EnableArrayFlattening) two additional tests pass:

runtime/valhalla/inlinetypes/QuickeningTest.java: Test quickening of getfield and putfield applied to inline fields 
runtime/valhalla/inlinetypes/TestInheritedInlineTypeFields.java: Test if inline field klasses are correctly retrieved for inherited fields

The following command was used to run the tests with -XX:ValueTypeFlatteningThreshold=999999 and -XX:+EnableArrayFlattening enabled:

/Users/ehren/Documents/openj9-openjdk-jdk.valuetypes/build/macosx-x86_64-server-release/images/jdk/bin/java -jar /Users/ehren/Documents/jtreg/lib/jtreg.jar -agentvm -a -ea -esa -v:fail,error,time,nopass -retain:fail,error,*.dmp,javacore.*,heapdump.*,*.trc -ignore:quiet -timeoutFactor:8 -xml:verify -concurrency:1 -vmoptions:"-XX:ValueTypeFlatteningThreshold=999999 -XX:+EnableArrayFlattening" -nativepath:/Users/ehren/Documents/valhalla/build/macosx-x86_64-server-release/images/test/jdk/jtreg/native -jdk:/Users/ehren/Documents/openj9-openjdk-jdk.valuetypes//build/macosx-x86_64-server-release/images/jdk /Users/ehren/Documents/openj9-openjdk-jdk.valuetypes/test/hotspot/jtreg/runtime/valhalla/inlinetypes

ehrenjulzert avatar Nov 18 '22 20:11 ehrenjulzert

@ehrenjulzert can you update in https://github.com/eclipse-openj9/openj9/issues/13182#issuecomment-1320261445 at the beginning of each test if it has been fixed and is now passing ? sth like:

(passed) runtime/valhalla/inlinetypes/UnsafeTest.java: unsafe get/put/with inline type 
(failed) runtime/valhalla/inlinetypes/ValuePreloadTest.java: 

hangshao0 avatar May 04 '23 19:05 hangshao0

can you update in https://github.com/eclipse-openj9/openj9/issues/13182#issuecomment-1320261445

I updated it, although I decided to format it differently (I listed the passing and failing tests in two separate code blocks). I figured this would make it easier to compare to in the future (since when the tests are run, this is the format that the results are printed in).

ehrenjulzert avatar May 05 '23 20:05 ehrenjulzert

I reran these tests locally (mac) and will start going through them.

The RI passes all except field_layout/NullMarkersTest.java.

OpenJ9 is failing the following runtime tests.

runtime/valhalla/inlinetypes/AnnotationsTests.java: Test of ImplicitlyConstructible, NullRestricted and LooselyConsistentValue annotations
runtime/valhalla/inlinetypes/CircularityTest.java: Test initialization of static inline fields with circularity
runtime/valhalla/inlinetypes/ClassPrintLayoutDcmd.java: Test the VM.class_print_layout command
runtime/valhalla/inlinetypes/Ifacmp.java: if_acmpeq/ne bytecode test
runtime/valhalla/inlinetypes/InlineTypeArray.java: Plain array test for Inline Types
runtime/valhalla/inlinetypes/InlineTypeDensity.java: Heap density test for InlineTypes
runtime/valhalla/inlinetypes/InlineTypesTest.java: Test data movement with inline types
runtime/valhalla/inlinetypes/InlineWithJni.java: test JNI functions with instances of value classes
runtime/valhalla/inlinetypes/MonitorEnterTest.java#id0:
runtime/valhalla/inlinetypes/MonitorEnterTest.java#id1:
runtime/valhalla/inlinetypes/MonitorEnterTest.java#id2:
runtime/valhalla/inlinetypes/NullRestrictedArrayTest.java: Test of VM.newNullRestrictedArray API
runtime/valhalla/inlinetypes/ObjectMethods.java: Check object methods implemented by the VM behave with value types
runtime/valhalla/inlinetypes/PreloadCircularityTest.java:
runtime/valhalla/inlinetypes/QuickeningTest.java: Test quickening of getfield and putfield applied to inline fields
runtime/valhalla/inlinetypes/StaticFieldsTest.java: Test circularity in static fields
runtime/valhalla/inlinetypes/TestInheritedInlineTypeFields.java: Test if inline field klasses are correctly retrieved for inherited fields
runtime/valhalla/inlinetypes/TestJNIIsSameObject.java: Test JNI IsSameObject semantic with inline types
runtime/valhalla/inlinetypes/ValuePreloadTest.java:
runtime/valhalla/inlinetypes/ValueTearing.java: Test tearing of inline fields and array elements
runtime/valhalla/inlinetypes/VolatileTest.java: check effect of volatile keyword on flattenable fields
runtime/valhalla/inlinetypes/classfileparser/IllegalFieldModifiers.java: test that illegal field modifiers are detected correctly
runtime/valhalla/inlinetypes/classfileparser/ValueClassValidation.java: test validation of value classes
runtime/valhalla/inlinetypes/field_layout/FieldAlignmentTest.java#CompressedOops:
runtime/valhalla/inlinetypes/field_layout/FieldAlignmentTest.java#NoCompressedOops:
runtime/valhalla/inlinetypes/field_layout/NullMarkersTest.java#NullMarker64CompressedOops:
runtime/valhalla/inlinetypes/field_layout/NullMarkersTest.java#NullMarker64NoCompressedOops:
runtime/valhalla/inlinetypes/field_layout/NullMarkersTest.java#NullMarker64NoCompressedOopsNoCompressedKlassPointers:
runtime/valhalla/inlinetypes/field_layout/ValueFieldInheritanceTest.java#64bitsCompressedOops:
runtime/valhalla/inlinetypes/field_layout/ValueFieldInheritanceTest.java#64bitsNoCompressedOops:
runtime/valhalla/inlinetypes/field_layout/ValueFieldInheritanceTest.java#64bitsNoCompressedOopsNoCompressKlassPointers:
runtime/valhalla/inlinetypes/verifier/StrictFields.java:

OpenJ9 passing tests:

runtime/valhalla/inlinetypes/ClassInitializationFailuresTest.java: Test several scenarios of class initialization failures
runtime/valhalla/inlinetypes/EmptyInlineTest.java: Test support for empty inline types (no instance fields)
runtime/valhalla/inlinetypes/FlattenableSemanticTest.java: Flattenable field semantic test
runtime/valhalla/inlinetypes/HiddenInlineClassTest.java: Test a hidden inline class.
runtime/valhalla/inlinetypes/InlineTypeCreation.java: Inline Type creation test
runtime/valhalla/inlinetypes/InlineTypeGetField.java: Inline Type get field test
runtime/valhalla/inlinetypes/Test8186715.java: test return of buffered inline type passed in argument by caller
runtime/valhalla/inlinetypes/TestCloneableValue.java:
runtime/valhalla/inlinetypes/TestFieldNullability.java:
runtime/valhalla/inlinetypes/UninitializedInlineFieldsTest.java: Uninitialized inline fields test
runtime/valhalla/inlinetypes/VarArgsArray.java: Test if JVM API using varargs work with inline type arrays
runtime/valhalla/inlinetypes/verifier/VTAssignability.java: Test basic verifier assignability of inline types.
runtime/valhalla/inlinetypes/verifier/VTMonitor.java: Test that verifier allows monitor operations on inline types.

theresa-m avatar Oct 15 '24 19:10 theresa-m

I created a draft pr in the extensions repository that includes a script to run these tests, some minimal changes to get them working, and an exclude list of the failures that I'm working on. https://github.com/ibmruntimes/openj9-openjdk-jdk.valuetypes/pull/14

theresa-m avatar Oct 18 '24 18:10 theresa-m

After a first pass I excluded 4 tests that are not compatible with OpenJ9 and was able to get a few more passing by removing checks for hotspot specific error messages. There are 22 remaining failures, see ProblemList-hotspotjtreg.txt for more details.

theresa-m avatar Oct 24 '24 15:10 theresa-m

The following tests are still failing. Some of them are not tests that I would expect to pass with J9 (for example c1 tests) however they are not failing in a way I would expect (crashing or unexpected exception) so I've left them on the list to investigate.

compiler/valhalla/inlinetypes/TestArrayCopyWithOops.java https://github.com/eclipse-openj9/openj9/issues/20522 runtime/valhalla/inlinetypes/TestJNIIsSameObject.java https://github.com/eclipse-openj9/openj9/issues/20512 runtime/valhalla/inlinetypes/verifier/StrictFields.java https://github.com/eclipse-openj9/openj9/issues/20472 runtime/valhalla/inlinetypes/StaticFieldsTest.java https://github.com/eclipse-openj9/openj9/issues/13797 runtime/valhalla/inlinetypes/ObjectMethods.java https://github.com/eclipse-openj9/openj9/issues/13789 runtime/valhalla/inlinetypes/AnnotationsTests.java https://github.com/eclipse-openj9/openj9/issues/20510 compiler/valhalla/inlinetypes/TestUnloadedInlineTypeArray.java - default value is set when its not expected compiler/valhalla/inlinetypes/TestFlatArrayThreshold.java - default value is set when its not expected runtime/valhalla/inlinetypes/CircularityTest.java - ClassCircularityError not thrown in the right place compiler/valhalla/inlinetypes/TestCallingConventionC1.java - ClassCircularityError - shouldn't pass on openj9 but shouldn't throw this error runtime/valhalla/inlinetypes/InlineWithJni.java - segfault compiler/valhalla/inlinetypes/TestBufferTearing.java - segfault compiler/valhalla/inlinetypes/TestLarvalState.java - segfault runtime/valhalla/inlinetypes/TestInheritedInlineTypeFields.java - vm assertion failure compiler/valhalla/inlinetypes/TestBufferTearingC1.java - this test shouldn't pass on openj9 but it shouldn't crash

Try again once extensions repo is updated for https://github.com/eclipse-openj9/openj9/issues/20372 compiler/valhalla/inlinetypes/TestIntrinsics.java runtime/valhalla/inlinetypes/InlineTypesTest.java

These tests expect behavior that is inconsistent with https://openjdk.org/jeps/8316779. Ignore until this is resolved. runtime/valhalla/inlinetypes/NullRestrictedArrayTest.java runtime/valhalla/inlinetypes/InlineTypeArray.java

theresa-m avatar Nov 06 '24 21:11 theresa-m

These failures are now tracked in https://github.com/adoptium/aqa-tests/blob/master/openjdk/excludes/ProblemList_openjdkvalhalla-openj9.txt

theresa-m avatar Dec 03 '25 20:12 theresa-m