diff --git a/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java b/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java index 27e68b9ecf9..3ae4b259232 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java +++ b/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java @@ -1394,7 +1394,7 @@ public final class StackMapGenerator { } Type getComponent() { - if (sym.isArray()) { + if (isArray()) { var comp = sym.componentType(); if (comp.isPrimitive()) { return switch (comp.descriptorString().charAt(0)) { diff --git a/test/jdk/jdk/classfile/StackMapsTest.java b/test/jdk/jdk/classfile/StackMapsTest.java index 50b85db5323..39505405001 100644 --- a/test/jdk/jdk/classfile/StackMapsTest.java +++ b/test/jdk/jdk/classfile/StackMapsTest.java @@ -24,7 +24,7 @@ /* * @test * @summary Testing Classfile stack maps generator. - * @bug 8305990 8320222 + * @bug 8305990 8320222 8320618 * @build testdata.* * @run junit StackMapsTest */ @@ -43,7 +43,6 @@ import static jdk.internal.classfile.Classfile.ACC_STATIC; import java.lang.constant.ClassDesc; import java.lang.constant.ConstantDescs; import java.lang.constant.MethodTypeDesc; -import java.util.List; import java.lang.reflect.AccessFlag; /** @@ -237,6 +236,18 @@ class StackMapsTest { .verify(null)); } + @Test + void testInvalidAALOADStack() { + Classfile.of().build(ClassDesc.of("Test"), clb + -> clb.withMethodBody("test", ConstantDescs.MTD_void, 0, cob + -> cob.bipush(10) + .anewarray(ConstantDescs.CD_Object) + .lconst_1() //long on stack caused NPE, see 8320618 + .aaload() + .astore(2) + .return_())); + } + private static final FileSystem JRT = FileSystems.getFileSystem(URI.create("jrt:/")); private static void testTransformedStackMaps(String classPath, Classfile.Option... options) throws Exception {