Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [jdt-dev] How does this code work ?
  • From: "Sankaran, Srikanth" <srikanth.sankaran@xxxxxxxxxxxxx>
  • Date: Wed, 22 May 2024 06:41:38 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=advantest.com; dmarc=pass action=none header.from=advantest.com; dkim=pass header.d=advantest.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=pPih097vwU4wLWSTLKY/OZoXMT4nVp1yKFNZ2JEZNfM=; b=KNmuaUv7kZ84TSPH6P/i2l6GZLI1/bQ0t/9alyonM06n8C0bvlwVYzliEXS0iLFQPHb4qyDNICBpnQnrCjxWgLaF+rAjBsAu2XkfTUomc9vIRvTm0vjTTAOPERhMOkOAkA7ooPnC3s/JssJhSRC2AwfUgGilizNWiO2EXlSBRgG0swEN/ucRbjHdlQVoJIwNxV2ki39SqA7VfhSoxRP+aDepJtcnT+AaEnRZhaXsb51Q2y+wN2am4VWiKdGeDb9gSso6ckdbwAZhoP+eeZoLlqSwtqdDxouXN1CaSJhzqIFSUZhoIzldH1JSaZBAkrCiBzR9OlsfdfRl2OUcGq3pgg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=W4asH9C0Yzu0M2ttTlC0+hPDR8j1NsLNjHZ5bE2h79N6UxUV8A316gScwvoKs+YFeivNEFnbRwsLN6Wx3DbJ95yTmRF63CLPODVjn92XUHgF0cdffdpHeKCRCnqNptmZqPcZg81OiTyaLaDcbpi3cdlfDxF+0N/SktcK5p82kbxT1uZ2AJNuX3TBexLdZOjSz3txPiJz+ts2Il33N2AX8SkgT7IOfcyub145xtcd8PF8bRnn1PIgSgsxuSV9ZzEG7gzL7Xp2Rzps/Ll2ChiXPgr6q7qgfJqZ1/RAAtInNg18sLY5xz5ZzBXubvMp94xMhihrEFXLawYt7+QmT6u+VA==
  • Delivered-to: jdt-dev@xxxxxxxxxxx
  • List-archive: <https://www.eclipse.org/mailman/private/jdt-dev/>
  • List-help: <mailto:jdt-dev-request@eclipse.org?subject=help>
  • List-subscribe: <https://www.eclipse.org/mailman/listinfo/jdt-dev>, <mailto:jdt-dev-request@eclipse.org?subject=subscribe>
  • List-unsubscribe: <https://www.eclipse.org/mailman/options/jdt-dev>, <mailto:jdt-dev-request@eclipse.org?subject=unsubscribe>
  • Thread-index: AdqsDSnBdjzOBB2kRnK1ENZTitA2qgABb/6A
  • Thread-topic: [jdt-dev] How does this code work ?

It seems you need a branch and so a different stackmap frame for verification to catch such problems.

 

I have raised https://github.com/eclipse-jdt/eclipse.jdt.core/issues/2476 with a test case where we do get a verify error.

 

Thanks

Srikanth

 

From: jdt-dev <jdt-dev-bounces@xxxxxxxxxxx> On Behalf Of Sankaran, Srikanth via jdt-dev
Sent: Wednesday, May 22, 2024 11:33 AM
To: jdt-dev@xxxxxxxxxxx
Cc: Sankaran, Srikanth <srikanth.sankaran@xxxxxxxxxxxxx>
Subject: [jdt-dev] How does this code work ?

 

CAUTION: This email was sent from outside of Advantest.

 

I have been staring at this code for a while now wondering how the bad code generated still works:

 

public class X {

       public static void main(String[] args) {

             

              foo(String.class, switch (42) {

              default -> {

                     try {

                           yield 42;

                     } finally {

 

                     }

              }

              });

       }

      

       static void foo(Class<?> c, int v) {

              System.out.println(c);

              System.out.println(v);

       }

}

 

 

On master, we generate the following code:

 

  public static void main(java.lang.String[]);

    descriptor: ([Ljava/lang/String;)V

    flags: (0x0009) ACC_PUBLIC, ACC_STATIC

    Code:

      stack=2, locals=3, args_size=1

         0: ldc           #16                 // class java/lang/String

         2: astore_1                        <<ß-------------------- Class Object being stored into String See LVT slot 1 below.

         3: bipush        42

         5: istore_2

         6: aload_1                             <<ß-------------------- aload loads an object statically typed String, but at bci 8 we invoke a method that expects a Class object

         7: iload_2

         8: invokestatic  #18                 // Method foo:(Ljava/lang/Class;I)V

        11: return

      LineNumberTable:

        line 4: 0

        line 7: 3

        line 4: 8

        line 13: 11

      LocalVariableTable:

        Start  Length  Slot  Name   Signature

            0      12     0  args   [Ljava/lang/String;

            3       5     1  yieldValue0   Ljava/lang/String;  <<ß---------------------- String typed local

            6       2     2  secretYieldValue   I

 

What am I overlooking ??

 

Srikanth


Back to the top