From dfd219756f99ee6c9a5c5aee39768c5a91c8cad9 Mon Sep 17 00:00:00 2001 From: Eric Bruneton Date: Sun, 11 Feb 2018 10:00:40 +0100 Subject: [PATCH 1/3] Revert bug fix. --- asm-util/src/main/java/org/objectweb/asm/util/Textifier.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/asm-util/src/main/java/org/objectweb/asm/util/Textifier.java b/asm-util/src/main/java/org/objectweb/asm/util/Textifier.java index fa806a2b..cb6b390e 100644 --- a/asm-util/src/main/java/org/objectweb/asm/util/Textifier.java +++ b/asm-util/src/main/java/org/objectweb/asm/util/Textifier.java @@ -349,7 +349,7 @@ public class Textifier extends Printer { } stringBuilder.append(tab); - appendAccess(access & ~(Opcodes.ACC_VOLATILE | Opcodes.ACC_TRANSIENT)); + appendAccess(access & ~Opcodes.ACC_TRANSIENT); if ((access & Opcodes.ACC_NATIVE) != 0) { stringBuilder.append("native "); } -- GitLab From c1d7b2f2f5a6cf64658d83d14db19d0d5e235ac3 Mon Sep 17 00:00:00 2001 From: Eric Bruneton Date: Sun, 11 Feb 2018 10:02:09 +0100 Subject: [PATCH 2/3] Add failing test showing the issue. --- .../main/resources/jdk5/AllStructures.class | Bin 4811 -> 5279 bytes .../resources/java/jdk5/AllStructures.java | 21 +++-- .../src/test/resources/jdk5.AllStructures.txt | 76 ++++++++++++++---- 3 files changed, 74 insertions(+), 23 deletions(-) diff --git a/asm-test/src/main/resources/jdk5/AllStructures.class b/asm-test/src/main/resources/jdk5/AllStructures.class index f1aa56b7f79affe3c5cd8b799c6ba793cc641c60..a7de553e834b86dc9dfb2c8b906ef94404d01903 100755 GIT binary patch delta 2024 zcma)6TX$1M6#nMqa*{NW#$t_BOA%UVTI~fyZLzmdB#5FSUML`^Ar?xTVwz&Taqt2P zUQ1NGqo|;QXjhd7AJk`j@x>qD574#v11`QjIi4J9T=+2iGJDVW&FtATzc!v|?z-^z zk3RwEz_$@Z@L?EXd?eyy6DK0@Y4jF{Fkb3M@JObpf-wnELNzWxmZ*Dt!mMdcASgi0J;?7|2kC^ z6WCY$vnrWbsAKck6qX4}OZ0a;%p2e?5uzjse7KfZ10*o~3-f=c5C z7_uAs4U8FB!f_*(y8bfyjc9WH<@8s0{AT(|@mDzjEu3ieB-}**W)EN+I{{!R2-#Vj zjn&#K=|`9a46DQ_mX-qL%Uv%Krj}>Y^furwQoEJ2nIebqeMiGvy1iE{ zom8%Y!@x$$yK#?Gn~U@!9BP)r3;Dc;e5@37E|>g@g^?B$tCyDag5te4>AENk(2}|+ z)}@Kn5o;4IDX+r4v`lT?hx_%NC~U?9>@(?`GMVgF@_Vp_QmkG)2xFHv`|*%V_OMI# zh)cHBB^z?dwz*{6Nw$MHL2ms~>~xA^;UI>QAyH@XRP}1z=(QU05c3Z6WxmAscbJdk zh_1_eA}1K%#V!eQ4~voI_I+fj!wBd6eBBA`rX?k4bm}M89_I0HBGM?MhNp2Pt90)t0R@C&e5Qw?3F^nU}73J3_F#%KZDG3&Bi>su2<1ObAY~?r!(>M*k zfBs86u1OknvK@C>;&>c+ViAFFDu3DLC5wF3{p2e+eA@{ie6eK9FECp<&LcFRYtX~x zJR*1{WQIW`sZvx=klJwG+7Kh`5%A758O{3Kh>uO@HC!DQ9Qeq;y{|h-b`_D z1D?YR>+m8Dt>q=ZJjq)=n&E%;N*4C3cnz=j=|A}m{=^t S)K~Wd8d${mxAo%6?$8i9QG3q{T)^ZigMMOffRD$@LzftdPUBM4fBUGGN$l1qZKn)rF zjz!e`#)-r)p|$j{l@eMC%iLH__hRdJQbt4|q-bEzq>fL9sujdriB(Kc@($DTQo4d; zaJ;2r@-{&u?K)~XbD&2wY0*k~F}hlmVYM#Ng*DWi+OHgIS%LUfpps|*EwhTd=`K#@ zKFv%M)f{J`e zO|%xaT&iJZFM6>L`x&U%dXu_bcV&i#?4x5pGI5O$t{-_A(7e8FU9hYs#KVme2>OyP&!IHFT&Nz2lym^U`aw>6~0 zXYe49Xu~F=6GwSsq77wFz}(T_;uwz8a^S>&{+jnZJ&k`%R~1g;R5hp5&78VJ5zgTz zPG=g>gR^xwhx0YKfQw;V!sRwTaz3G6T*1`}{c-j2vl5Jc%4)K9ol=knC_|JtC, - U3 extends List, - U4 extends List, - U5 extends List, - U6 extends Number & Runnable & Cloneable> { + U0, + U1 extends Number, + U2 extends List, + U3 extends List, + U4 extends List, + U5 extends List, + U6 extends Number & Runnable & Cloneable> + implements Comparator { @Deprecated @InvisibleAnnotation(otherArrayValue = {2}) @@ -144,6 +146,11 @@ class AllStructures< new LocalClass(42); } + // Generates a bridge method. + public int compare(Integer a, Integer b) { + return a < b ? -1 : 1; + } + @Retention(RetentionPolicy.CLASS) @interface InvisibleAnnotation { byte byteValue() default 1; diff --git a/asm-util/src/test/resources/jdk5.AllStructures.txt b/asm-util/src/test/resources/jdk5.AllStructures.txt index b3dc0636..5f5bf9aa 100644 --- a/asm-util/src/test/resources/jdk5.AllStructures.txt +++ b/asm-util/src/test/resources/jdk5.AllStructures.txt @@ -1,9 +1,9 @@ // class version 49.0 (49) // DEPRECATED // access flags 0x20020 -// signature ;U3::Ljava/util/List<*>;U4::Ljava/util/List<+Ljava/lang/Number;>;U5::Ljava/util/List<-Ljava/lang/Number;>;U6:Ljava/lang/Number;:Ljava/lang/Runnable;:Ljava/lang/Cloneable;>Ljava/lang/Object; -// declaration: , U3 extends java.util.List, U4 extends java.util.List, U5 extends java.util.List, U6 extends java.lang.Number extends java.lang.Runnable, java.lang.Cloneable> -class jdk5/AllStructures { +// signature ;U3::Ljava/util/List<*>;U4::Ljava/util/List<+Ljava/lang/Number;>;U5::Ljava/util/List<-Ljava/lang/Number;>;U6:Ljava/lang/Number;:Ljava/lang/Runnable;:Ljava/lang/Cloneable;>Ljava/lang/Object;Ljava/util/Comparator; +// declaration: , U3 extends java.util.List, U4 extends java.util.List, U5 extends java.util.List, U6 extends java.lang.Number extends java.lang.Runnable, java.lang.Cloneable> implements java.util.Comparator +class jdk5/AllStructures implements java/util/Comparator { // compiled from: AllStructures.java @@ -65,11 +65,11 @@ class jdk5/AllStructures { // access flags 0x0 ()V L0 - LINENUMBER 68 L0 + LINENUMBER 69 L0 ALOAD 0 INVOKESPECIAL java/lang/Object. ()V L1 - LINENUMBER 218 L1 + LINENUMBER 225 L1 RETURN L2 LOCALVARIABLE this Ljdk5/AllStructures; L0 L2 0 @@ -84,7 +84,7 @@ class jdk5/AllStructures { @Ljava/lang/Deprecated;() @Ljdk5/AllStructures$InvisibleAnnotation;(otherArrayValue={3}) // invisible L0 - LINENUMBER 92 L0 + LINENUMBER 94 L0 ALOAD 0 GETFIELD jdk5/AllStructures.f : I IRETURN @@ -104,7 +104,7 @@ class jdk5/AllStructures { @Ljdk5/AllStructures$InvisibleAnnotation;(otherArrayValue={4}) // invisible, parameter 1 @Ljdk5/AllStructures$InvisibleAnnotation;(otherArrayValue={5}) // invisible, parameter 4 L0 - LINENUMBER 101 L0 + LINENUMBER 103 L0 ALOAD 0 GETFIELD jdk5/AllStructures.f : I IRETURN @@ -125,7 +125,7 @@ class jdk5/AllStructures { // declaration: U0 () public o()Ljava/lang/Object; L0 - LINENUMBER 105 L0 + LINENUMBER 107 L0 ALOAD 0 GETFIELD jdk5/AllStructures.f0 : Ljava/lang/Object; ARETURN @@ -141,7 +141,7 @@ class jdk5/AllStructures { // declaration: void , U3 extends java.util.List, U4 extends java.util.List, U5 extends java.util.List, U6 extends java.lang.Number extends java.lang.Runnable, java.lang.Cloneable, U7 extends java.lang.Exception, U8 extends java.io.IOException>(java.util.List, java.util.List, java.util.List, java.util.List, java.util.List, java.util.List, java.util.List, jdk5.AllStructures.InnerClass, jdk5.AllStructures.GenericInnerClass) throws U7, U8 genericMethod(Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljdk5/AllStructures$InnerClass;Ljdk5/AllStructures$GenericInnerClass;)V throws java/lang/Exception java/io/IOException L0 - LINENUMBER 128 L0 + LINENUMBER 130 L0 RETURN L1 LOCALVARIABLE this Ljdk5/AllStructures; L0 L1 0 @@ -180,11 +180,11 @@ class jdk5/AllStructures { // access flags 0x80 varargs varArgsAutoBoxingAndForLoop([I)I L0 - LINENUMBER 131 L0 + LINENUMBER 133 L0 ICONST_0 ISTORE 2 L1 - LINENUMBER 132 L1 + LINENUMBER 134 L1 ALOAD 1 ASTORE 3 L2 @@ -203,17 +203,17 @@ class jdk5/AllStructures { IALOAD ISTORE 6 L6 - LINENUMBER 133 L6 + LINENUMBER 135 L6 ILOAD 2 ILOAD 6 IADD ISTORE 2 L7 - LINENUMBER 132 L7 + LINENUMBER 134 L7 IINC 5 1 GOTO L4 L5 - LINENUMBER 135 L5 + LINENUMBER 137 L5 ILOAD 2 IRETURN L8 @@ -232,7 +232,7 @@ class jdk5/AllStructures { // access flags 0x0 localClassConstructor(Ljava/lang/String;)V L0 - LINENUMBER 144 L0 + LINENUMBER 146 L0 NEW jdk5/AllStructures$1LocalClass DUP ALOAD 0 @@ -241,7 +241,7 @@ class jdk5/AllStructures { INVOKESPECIAL jdk5/AllStructures$1LocalClass. (Ljdk5/AllStructures;ILjava/lang/String;)V POP L1 - LINENUMBER 145 L1 + LINENUMBER 147 L1 RETURN L2 LOCALVARIABLE this Ljdk5/AllStructures; L0 L2 0 @@ -250,4 +250,48 @@ class jdk5/AllStructures { LOCALVARIABLE name Ljava/lang/String; L0 L2 1 MAXSTACK = 5 MAXLOCALS = 2 + + // access flags 0x1 + public compare(Ljava/lang/Integer;Ljava/lang/Integer;)I + L0 + LINENUMBER 151 L0 + ALOAD 1 + INVOKEVIRTUAL java/lang/Integer.intValue ()I + ALOAD 2 + INVOKEVIRTUAL java/lang/Integer.intValue ()I + IF_ICMPGE L1 + ICONST_M1 + GOTO L2 + L1 + ICONST_1 + L2 + IRETURN + L3 + LOCALVARIABLE this Ljdk5/AllStructures; L0 L3 0 + // signature Ljdk5/AllStructures; + // declaration: extends jdk5.AllStructures + LOCALVARIABLE a Ljava/lang/Integer; L0 L3 1 + LOCALVARIABLE b Ljava/lang/Integer; L0 L3 2 + MAXSTACK = 2 + MAXLOCALS = 3 + + // access flags 0x1041 + public synthetic bridge compare(Ljava/lang/Object;Ljava/lang/Object;)I + L0 + LINENUMBER 69 L0 + ALOAD 0 + ALOAD 1 + CHECKCAST java/lang/Integer + ALOAD 2 + CHECKCAST java/lang/Integer + INVOKEVIRTUAL jdk5/AllStructures.compare (Ljava/lang/Integer;Ljava/lang/Integer;)I + IRETURN + L1 + LOCALVARIABLE this Ljdk5/AllStructures; L0 L1 0 + // signature Ljdk5/AllStructures; + // declaration: extends jdk5.AllStructures + LOCALVARIABLE x0 Ljava/lang/Object; L0 L1 1 + LOCALVARIABLE x1 Ljava/lang/Object; L0 L1 2 + MAXSTACK = 3 + MAXLOCALS = 3 } -- GitLab From 51b3dfaff47493d2ca8c373b44b03c2267039cea Mon Sep 17 00:00:00 2001 From: Eric Bruneton Date: Sun, 11 Feb 2018 10:21:05 +0100 Subject: [PATCH 3/3] Restore bug fix, make previously added test pass. --- asm-util/src/main/java/org/objectweb/asm/util/Textifier.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/asm-util/src/main/java/org/objectweb/asm/util/Textifier.java b/asm-util/src/main/java/org/objectweb/asm/util/Textifier.java index cb6b390e..fa806a2b 100644 --- a/asm-util/src/main/java/org/objectweb/asm/util/Textifier.java +++ b/asm-util/src/main/java/org/objectweb/asm/util/Textifier.java @@ -349,7 +349,7 @@ public class Textifier extends Printer { } stringBuilder.append(tab); - appendAccess(access & ~Opcodes.ACC_TRANSIENT); + appendAccess(access & ~(Opcodes.ACC_VOLATILE | Opcodes.ACC_TRANSIENT)); if ((access & Opcodes.ACC_NATIVE) != 0) { stringBuilder.append("native "); } -- GitLab