Skip to content

Commit d946965

Browse files
authored
Merge pull request #19774 from theresa-m/fix_19464
Throw IdentityException in monitorenter
2 parents 0fbede2 + ce3a878 commit d946965

File tree

8 files changed

+8
-7
lines changed

8 files changed

+8
-7
lines changed

runtime/codert_vm/cnathelp.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1733,7 +1733,7 @@ slow_jitMonitorEnterImpl(J9VMThread *currentThread, bool forMethod)
17331733
#if defined(J9VM_OPT_VALHALLA_VALUE_TYPES)
17341734
if (J9_IS_J9CLASS_VALUETYPE(badClass)) {
17351735
currentThread->javaVM->internalVMFunctions->setCurrentExceptionNLSWithArgs(currentThread, J9NLS_VM_ERROR_BYTECODE_OBJECTREF_CANNOT_BE_VALUE_TYPE,
1736-
J9VMCONSTANTPOOL_JAVALANGILLEGALMONITORSTATEEXCEPTION, J9UTF8_LENGTH(className), J9UTF8_DATA(className));
1736+
J9VMCONSTANTPOOL_JAVALANGIDENTITYEXCEPTION, J9UTF8_LENGTH(className), J9UTF8_DATA(className));
17371737
} else
17381738
#endif /* defined(J9VM_OPT_VALHALLA_VALUE_TYPES) */
17391739
{

runtime/nls/j9vm/j9vm.nls

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1887,7 +1887,7 @@ J9NLS_VM_ERROR_BYTECODE_OBJECTREF_CANNOT_BE_VALUE_TYPE=bad object type %2$.*1$s:
18871887
J9NLS_VM_ERROR_BYTECODE_OBJECTREF_CANNOT_BE_VALUE_TYPE.sample_input_1=3
18881888
J9NLS_VM_ERROR_BYTECODE_OBJECTREF_CANNOT_BE_VALUE_TYPE.sample_input_2=Foo
18891889
J9NLS_VM_ERROR_BYTECODE_OBJECTREF_CANNOT_BE_VALUE_TYPE.explanation=The class has specified the bytecode monitorenter or monitorexit operation which cannot be performed on a value type but the object on stack is a value type.
1890-
J9NLS_VM_ERROR_BYTECODE_OBJECTREF_CANNOT_BE_VALUE_TYPE.system_action=The JVM will throw an IllegalMonitorStateException.
1890+
J9NLS_VM_ERROR_BYTECODE_OBJECTREF_CANNOT_BE_VALUE_TYPE.system_action=The JVM will throw an IdentityException.
18911891
J9NLS_VM_ERROR_BYTECODE_OBJECTREF_CANNOT_BE_VALUE_TYPE.user_response=Contact the provider of the classfile for a corrected version.
18921892
# END NON-TRANSLATABLE
18931893

runtime/oti/cfr.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -915,7 +915,7 @@ typedef struct J9CfrClassFile {
915915
#define CFR_MINOR_VERSION 3
916916
#define CFR_PUBLIC_PRIVATE_PROTECTED_MASK (CFR_ACC_PUBLIC | CFR_ACC_PRIVATE | CFR_ACC_PROTECTED)
917917

918-
#define J9_IS_CLASSFILE_VALUETYPE(classfile) (((classfile)->majorVersion >= VALUE_TYPES_MAJOR_VERSION) && (PREVIEW_MINOR_VERSION == (classfile)->minorVersion) && J9_ARE_NO_BITS_SET((classfile)->accessFlags, CFR_ACC_IDENTITY))
918+
#define J9_IS_CLASSFILE_VALUETYPE(classfile) (((classfile)->majorVersion >= VALUE_TYPES_MAJOR_VERSION) && (PREVIEW_MINOR_VERSION == (classfile)->minorVersion) && J9_ARE_NO_BITS_SET((classfile)->accessFlags, CFR_ACC_IDENTITY | CFR_ACC_INTERFACE))
919919

920920
#if defined(J9VM_OPT_VALHALLA_VALUE_TYPES)
921921
#define CFR_CLASS_ACCESS_MASK (CFR_ACC_PUBLIC | CFR_ACC_FINAL | CFR_ACC_IDENTITY | CFR_ACC_INTERFACE | CFR_ACC_ABSTRACT | CFR_ACC_SYNTHETIC | CFR_ACC_ANNOTATION | CFR_ACC_ENUM)

runtime/oti/j9modifiers_api.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@
8282
#define J9ROMCLASS_IS_CONTENDED(romClass) _J9ROMCLASS_J9MODIFIER_IS_SET((romClass), J9AccClassIsContended)
8383

8484
#ifdef J9VM_OPT_VALHALLA_VALUE_TYPES
85-
#define J9ROMCLASS_IS_VALUE(romClass) (((romClass)->majorVersion >= VALUE_TYPES_MAJOR_VERSION) && (PREVIEW_MINOR_VERSION == (romClass)->minorVersion) && !_J9ROMCLASS_SUNMODIFIER_IS_SET((romClass), J9AccClassHasIdentity))
85+
#define J9ROMCLASS_IS_VALUE(romClass) (((romClass)->majorVersion >= VALUE_TYPES_MAJOR_VERSION) && (PREVIEW_MINOR_VERSION == (romClass)->minorVersion) && !_J9ROMCLASS_SUNMODIFIER_IS_ANY_SET((romClass), J9AccClassHasIdentity | J9AccInterface))
8686
#else /* J9VM_OPT_VALHALLA_VALUE_TYPES */
8787
#define J9ROMCLASS_IS_VALUE(romClass) FALSE
8888
#endif /* J9VM_OPT_VALHALLA_VALUE_TYPES */

runtime/oti/vmconstantpool.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0-only WITH Classpath-ex
2323
<vmconstantpool>
2424
<classref name="java/lang/ArrayStoreException"/>
2525
<classref name="java/lang/ClassCastException"/>
26+
<classref name="java/lang/IdentityException" flags="opt_valhallaValueTypes"/>
2627
<classref name="java/lang/IllegalMonitorStateException"/>
2728
<classref name="java/lang/IndexOutOfBoundsException"/>
2829
<classref name="java/lang/NegativeArraySizeException"/>

runtime/vm/BytecodeInterpreter.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11055,7 +11055,7 @@ arrayIndex: {
1105511055
#define badClassName J9ROMCLASS_CLASSNAME(J9OBJECT_CLAZZ(_currentThread, (j9object_t)_currentThread->tempSlot)->romClass)
1105611056
#if defined(J9VM_OPT_VALHALLA_VALUE_TYPES)
1105711057
if (J9_IS_J9CLASS_VALUETYPE(J9OBJECT_CLAZZ(_currentThread, (j9object_t)_currentThread->tempSlot))) {
11058-
setCurrentExceptionNLSWithArgs(_currentThread, J9NLS_VM_ERROR_BYTECODE_OBJECTREF_CANNOT_BE_VALUE_TYPE, J9VMCONSTANTPOOL_JAVALANGILLEGALMONITORSTATEEXCEPTION, J9UTF8_LENGTH(badClassName), J9UTF8_DATA(badClassName));
11058+
setCurrentExceptionNLSWithArgs(_currentThread, J9NLS_VM_ERROR_BYTECODE_OBJECTREF_CANNOT_BE_VALUE_TYPE, J9VMCONSTANTPOOL_JAVALANGIDENTITYEXCEPTION, J9UTF8_LENGTH(badClassName), J9UTF8_DATA(badClassName));
1105911059
} else
1106011060
#endif /* defined(J9VM_OPT_VALHALLA_VALUE_TYPES) */
1106111061
{

runtime/vm/jnicsup.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2055,7 +2055,7 @@ monitorEnter(JNIEnv* env, jobject obj)
20552055
J9UTF8 *badClassName = J9ROMCLASS_CLASSNAME(badClass->romClass);
20562056
#if defined(J9VM_OPT_VALHALLA_VALUE_TYPES)
20572057
if (J9_IS_J9CLASS_VALUETYPE(badClass)) {
2058-
setCurrentExceptionNLSWithArgs(vmThread, J9NLS_VM_ERROR_BYTECODE_OBJECTREF_CANNOT_BE_VALUE_TYPE, J9VMCONSTANTPOOL_JAVALANGILLEGALMONITORSTATEEXCEPTION, J9UTF8_LENGTH(badClassName), J9UTF8_DATA(badClassName));
2058+
setCurrentExceptionNLSWithArgs(vmThread, J9NLS_VM_ERROR_BYTECODE_OBJECTREF_CANNOT_BE_VALUE_TYPE, J9VMCONSTANTPOOL_JAVALANGIDENTITYEXCEPTION, J9UTF8_LENGTH(badClassName), J9UTF8_DATA(badClassName));
20592059
} else
20602060
#endif /* defined(J9VM_OPT_VALHALLA_VALUE_TYPES) */
20612061
{

test/functional/Valhalla/src_qtypes/org/openj9/test/lworld/ValueTypeTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -990,7 +990,7 @@ static public void testMonitorEnterAndExitOnValueType() throws Throwable {
990990
try {
991991
monitorEnterAndExitOnValueType.invoke(valueType);
992992
Assert.fail("should throw exception. MonitorExit cannot be used with ValueType");
993-
} catch (IllegalMonitorStateException e) {}
993+
} catch (IdentityException e) {}
994994

995995
try {
996996
monitorEnterAndExitOnValueType.invoke(valueTypeArray);

0 commit comments

Comments
 (0)