Menu

#617 Proguard fails to inline method if method stack contains values except return one

v5.2
closed-fixed
None
5
2016-10-23
2016-06-29
No

Proguard fails to inline method if method stack contains values except return one:

Unexpected error while performing partial evaluation:
  Class       = [StackKt]
  Method      = [main([Ljava/lang/String;)V]
  Exception   = [java.lang.IllegalArgumentException] (Stacks have different current sizes [1] and [2])
Error: Stacks have different current sizes [1] and [2]

Bytecode

public final class StackKt {
  // access flags 0x19
  public final static concat(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
  @Lorg/jetbrains/annotations/NotNull;() // invisible
    @Lorg/jetbrains/annotations/NotNull;() // invisible, parameter 0
    @Lorg/jetbrains/annotations/NotNull;() // invisible, parameter 1
   L0
    ALOAD 0
    LDC "s"
    INVOKESTATIC kotlin/jvm/internal/Intrinsics.checkParameterIsNotNull (Ljava/lang/Object;Ljava/lang/String;)V
    ALOAD 1
    LDC "z"
    INVOKESTATIC kotlin/jvm/internal/Intrinsics.checkParameterIsNotNull (Ljava/lang/Object;Ljava/lang/String;)V
   L1
    LINENUMBER 3 L1
    NEW java/lang/StringBuilder
    DUP
    INVOKESPECIAL java/lang/StringBuilder.<init> ()V
    ALOAD 0
    INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
    ALOAD 1
    INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
    INVOKEVIRTUAL java/lang/StringBuilder.toString ()Ljava/lang/String;
    ARETURN
   L2
    LOCALVARIABLE s Ljava/lang/String; L0 L2 0
    LOCALVARIABLE z Ljava/lang/String; L0 L2 1
    MAXSTACK = 2
    MAXLOCALS = 2

  // access flags 0x1A
  private final static doWork(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    @Lorg/jetbrains/annotations/NotNull;() // invisible, parameter 0
   L0
    LINENUMBER 7 L0
    ALOAD 0
    ALOAD 1
    IFNONNULL L1
    LDC ""
    ARETURN //Additional value on stack except return one!!!!!!!!!!!!!
   L2
   L1
    ALOAD 1
   L3
    INVOKESTATIC StackKt.concat (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    ARETURN
   L4
    LOCALVARIABLE $receiver Ljava/lang/String; L0 L4 0
    LOCALVARIABLE other Ljava/lang/String; L0 L4 1
    MAXSTACK = 2
    MAXLOCALS = 2

  // access flags 0x19
  public final static main([Ljava/lang/String;)V
    @Lorg/jetbrains/annotations/NotNull;() // invisible, parameter 0
   L0
    ALOAD 0
    LDC "args"
    INVOKESTATIC kotlin/jvm/internal/Intrinsics.checkParameterIsNotNull (Ljava/lang/Object;Ljava/lang/String;)V
   L1
    LINENUMBER 11 L1
    ALOAD 0
    ICONST_0
    AALOAD
    DUP
    IFNONNULL L2
    INVOKESTATIC kotlin/jvm/internal/Intrinsics.throwNpe ()V
   L2
    ALOAD 0
    ICONST_1
    AALOAD
    INVOKESTATIC StackKt.doWork (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    POP
   L3
    LINENUMBER 12 L3
    RETURN
   L4
    LOCALVARIABLE args [Ljava/lang/String; L0 L4 0
    MAXSTACK = 3
    MAXLOCALS = 1

  // compiled from: stack.kt
}
3 Attachments

Discussion

  • Eric Lafortune

    Eric Lafortune - 2016-07-03

    Thanks. This problem has now been fixed (backported from DexGuard actually) for the upcoming ProGuard 5.3.

     
  • Eric Lafortune

    Eric Lafortune - 2016-07-03
    • status: open --> open-fixed
    • assigned_to: Eric Lafortune
     
  • max-kammerer

    max-kammerer - 2016-07-06

    Where can i find builded proguard 5.3 beta package? (There is no 5.3 in beta files)

     
  • Eric Lafortune

    Eric Lafortune - 2016-10-23
    • Status: open-fixed --> closed-fixed
     

Log in to post a comment.

MongoDB Logo MongoDB