Stack map generation problem

David Lloyd david.lloyd at redhat.com
Thu Dec 12 19:42:19 UTC 2024


Hmm. I will try to come up with a more concise reproducer. Maybe it's a
problem with my class hierarchy resolver, or some other configuration that
I have locally.

BTW the example class is from io.smallrye.reactive:mutiny:2.6.2, sorry I
failed to specify that. Thanks for looking into it, I'll see if I can make
a minimal reproducer.

On Thu, Dec 12, 2024 at 1:32 PM Chen Liang <chen.l.liang at oracle.com> wrote:

> Hmm, couldn't reproduce with a local JDK mainline build (25) and the
> latest smallrye mutiny 2.7.0. (It also appears from bci that your example
> is an older version of mutiny). I changed the class java/util/ServiceLoader
> to Dummy in jshell and cannot reproduce this issue; cannot reproduce with
> stack maps recomputation either. Here's the javap output of the transformed
> results.
>
>   static {};
>     descriptor: ()V
>     flags: (0x0008) ACC_STATIC
>     Code:
>       stack=2, locals=3, args_size=0
>          0: ldc_w         #304                // String
> mutiny.disableCallBackDecorators
>          3: invokestatic  #306                // Method
> java/lang/Boolean.getBoolean:(Ljava/lang/String;)Z
>          6: putstatic     #203                // Field
> DISABLE_CALLBACK_DECORATORS:Z
>          9: ldc_w         #312                // class
> io/smallrye/mutiny/infrastructure/ExecutorConfiguration
>         12: invokestatic  #561                // Method
> Dummy.load:(Ljava/lang/Class;)Ljava/util/ServiceLoader;
>         15: astore_0
>         16: aload_0
>         17: invokevirtual #212                // Method
> java/util/ServiceLoader.iterator:()Ljava/util/Iterator;
>         20: astore_1
>         21: aload_1
>         22: invokeinterface #216,  1          // InterfaceMethod
> java/util/Iterator.hasNext:()Z
>         27: ifeq          61
>         30: aload_1
>         31: invokeinterface #221,  1          // InterfaceMethod
> java/util/Iterator.next:()Ljava/lang/Object;
>         36: checkcast     #312                // class
> io/smallrye/mutiny/infrastructure/ExecutorConfiguration
>         39: astore_2
>         40: aload_2
>         41: invokeinterface #314,  1          // InterfaceMethod
> io/smallrye/mutiny/infrastructure/ExecutorConfiguration.getDefaultWorkerExecutor:()Ljava/util/concurrent/Executor;
>         46: ldc_w         #318                // String executor
>         49: invokestatic  #167                // Method
> io/smallrye/mutiny/helpers/ParameterValidation.nonNull:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
>         52: checkcast     #320                // class
> java/util/concurrent/Executor
>         55: invokestatic  #32                 // Method
> setDefaultExecutor:(Ljava/util/concurrent/Executor;)V
>         58: goto          64
>         61: invokestatic  #322                // Method
> setDefaultExecutor:()V
>         64: invokestatic  #324                // Method reload:()V
>         67: invokestatic  #327                // Method
> resetCanCallerThreadBeBlockedSupplier:()V
>         70: getstatic     #241                // Field
> io/smallrye/mutiny/infrastructure/Infrastructure$PrintAndDumpThrowableConsumer.INSTANCE:Lio/smallrye/mutiny/infrastructure/Infrastructure$PrintAndDumpThrowableConsumer;
>         73: putstatic     #155                // Field
> droppedExceptionHandler:Ljava/util/function/Consumer;
>         76: getstatic     #271                // Field
> io/smallrye/mutiny/infrastructure/Infrastructure$PrintOperatorEventOperatorLogger.INSTANCE:Lio/smallrye/mutiny/infrastructure/Infrastructure$PrintOperatorEventOperatorLogger;
>         79: putstatic     #260                // Field
> operatorLogger:Lio/smallrye/mutiny/infrastructure/Infrastructure$OperatorLogger;
>         82: sipush        128
>         85: putstatic     #16                 // Field
> multiOverflowDefaultBufferSize:I
>         88: bipush        32
>         90: putstatic     #20                 // Field bufferSizeXs:I
>         93: sipush        256
>         96: putstatic     #23                 // Field bufferSizeS:I
>         99: return
>       LocalVariableTable:
>         Start  Length  Slot  Name   Signature
>            40      18     2  next
> Lio/smallrye/mutiny/infrastructure/ExecutorConfiguration;
>            16      54     0 executorLoader   Ljava/util/ServiceLoader;
>            21      49     1 iterator   Ljava/util/Iterator;
>       LocalVariableTypeTable:
>         Start  Length  Slot  Name   Signature
>            16      54     0 executorLoader
> Ljava/util/ServiceLoader<Lio/smallrye/mutiny/infrastructure/ExecutorConfiguration;>;
>            21      49     1 iterator
> Ljava/util/Iterator<Lio/smallrye/mutiny/infrastructure/ExecutorConfiguration;>;
>       LineNumberTable:
>         line 39: 0
>         line 42: 9
>         line 43: 16
>         line 44: 21
>         line 45: 30
>         line 46: 40
>         line 47: 58
>         line 48: 61
>         line 51: 64
>         line 53: 67
>         line 63: 70
>         line 65: 76
>         line 67: 82
>         line 69: 88
>         line 70: 93
>       StackMapTable: number_of_entries = 2
>         frame_type = 253 /* append */
>           offset_delta = 61
>           locals = [ class java/util/ServiceLoader, class
> java/util/Iterator ]
>         frame_type = 2 /* same */
>
> Regards, Chen
>
>

-- 
- DML • he/him
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/classfile-api-dev/attachments/20241212/ec22b291/attachment-0001.htm>


More information about the classfile-api-dev mailing list