Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8327839

Crash with unboxing and widening primitive conversion in switch

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • 23
    • 23
    • tools
    • b15

      public static float test(Long test) {
          return switch (test) {
              case float y -> y;
              default -> 2;
          };
      }

      public static void main(String argv[]) {
          System.out.println(test(1l));
      }

      Exception in thread "main" java.lang.BootstrapMethodError: bootstrap method initialization exception
                      at java.base/java.lang.invoke.BootstrapMethodInvoker.invoke(BootstrapMethodInvoker.java:188)
                      at java.base/java.lang.invoke.CallSite.makeSite(CallSite.java:316)
                      at java.base/java.lang.invoke.MethodHandleNatives.linkCallSiteImpl(MethodHandleNatives.java:275)
                      at java.base/java.lang.invoke.MethodHandleNatives.linkCallSite(MethodHandleNatives.java:265)
                      at Test.test(Test.java:10)
                      at Test.main(Test.java:17)

      Caused by: java.lang.IllegalArgumentException: Operand stack underflow at bytecode offset 55 of method typeSwitch(Object,int,BiPredicate,List)
        - max stack: 65535
          max locals: 65535
          attributes: []
          //stack map frame @0: {locals: [java/lang/Object, int, java/util/function/BiPredicate, java/util/List], stack: []}
          0: {opcode: ALOAD_0, slot: 0}
          1: {opcode: IFNONNULL, target: 6}
          4: {opcode: ICONST_M1, constant value: -1}
          5: {opcode: IRETURN}
          6: {opcode: ILOAD_1, slot: 1}
          7: {opcode: TABLESWITCH, targets: [63, 24]}
          24: {opcode: ALOAD_0, slot: 0}
          25: {opcode: INSTANCEOF, type: java/lang/Number}
          28: {opcode: IFEQ, target: 41}
          31: {opcode: ALOAD_0, slot: 0}
          32: {opcode: CHECKCAST, type: java/lang/Number}
          35: {opcode: INVOKEVIRTUAL, owner: java/lang/Number, method name: intValue, method type: ()I}
          38: {opcode: GOTO, target: 55}
          41: {opcode: ALOAD_0, slot: 0}
          42: {opcode: INSTANCEOF, type: java/lang/Character}
          45: {opcode: IFEQ, target: 63}
          48: {opcode: ALOAD_0, slot: 0}
          49: {opcode: CHECKCAST, type: java/lang/Character}
          52: {opcode: INVOKEVIRTUAL, owner: java/lang/Character, method name: charValue, method type: ()C}
          55: {opcode: INVOKESTATIC, owner: java/lang/runtime/ExactConversionsSupport, method name: isLongToFloatExact, method type: (J)Z}
          58: {opcode: IFEQ, target: 63}
          61: {opcode: ICONST_0, constant value: 0}
          62: {opcode: IRETURN}
          63: {opcode: ICONST_1, constant value: 1}
          64: {opcode: IRETURN}
                      at java.base/jdk.internal.classfile.impl.StackMapGenerator.generatorError(StackMapGenerator.java:869)
                      at java.base/jdk.internal.classfile.impl.StackMapGenerator.generatorError(StackMapGenerator.java:825)
                      at java.base/jdk.internal.classfile.impl.StackMapGenerator$Frame.decStack(StackMapGenerator.java:1018)
                      at java.base/jdk.internal.classfile.impl.StackMapGenerator.processInvokeInstructions(StackMapGenerator.java:781)
                      at java.base/jdk.internal.classfile.impl.StackMapGenerator.processBlock(StackMapGenerator.java:644)
                      at java.base/jdk.internal.classfile.impl.StackMapGenerator.processMethod(StackMapGenerator.java:440)
                      at java.base/jdk.internal.classfile.impl.StackMapGenerator.generate(StackMapGenerator.java:317)
                      at java.base/jdk.internal.classfile.impl.StackMapGenerator.<init>(StackMapGenerator.java:243)
                      at java.base/jdk.internal.classfile.impl.StackMapGenerator.of(StackMapGenerator.java:156)
                      at java.base/jdk.internal.classfile.impl.DirectCodeBuilder$4.generateStackMaps(DirectCodeBuilder.java:331)
                      at java.base/jdk.internal.classfile.impl.DirectCodeBuilder$4.tryGenerateStackMaps(DirectCodeBuilder.java:340)
                      at java.base/jdk.internal.classfile.impl.DirectCodeBuilder$4.writeBody(DirectCodeBuilder.java:382)
                      at java.base/jdk.internal.classfile.impl.UnboundAttribute$AdHocAttribute.writeTo(UnboundAttribute.java:914)
                      at java.base/jdk.internal.classfile.impl.AttributeHolder.writeTo(AttributeHolder.java:56)
                      at java.base/jdk.internal.classfile.impl.DirectMethodBuilder.writeTo(DirectMethodBuilder.java:156)
                      at java.base/jdk.internal.classfile.impl.BufWriterImpl.writeList(BufWriterImpl.java:207)
                      at java.base/jdk.internal.classfile.impl.DirectClassBuilder.build(DirectClassBuilder.java:181)
                      at java.base/jdk.internal.classfile.impl.ClassFileImpl.build(ClassFileImpl.java:114)
                      at java.base/java.lang.classfile.ClassFile.build(ClassFile.java:332)
                      at java.base/java.lang.runtime.SwitchBootstraps.generateTypeSwitch(SwitchBootstraps.java:626)
                      at java.base/java.lang.runtime.SwitchBootstraps.typeSwitch(SwitchBootstraps.java:173)
                      at java.base/java.lang.invoke.BootstrapMethodInvoker.invoke(BootstrapMethodInvoker.java:109)
                      ... 5 more

      java 23-ea 2024-09-17
      Java(TM) SE Runtime Environment (build 23-ea+14-988)
      Java HotSpot(TM) 64-Bit Server VM (build 23-ea+14-988, mixed mode, sharing)

            abimpoudis Angelos Bimpoudis
            abimpoudis Angelos Bimpoudis
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: