Menu

#706 Variable frame is too small compared to other frame

v6.0
open-accepted
None
High
2019-12-05
2018-05-29
AK-boy
No

Hello,

I have a strange error with Proguard 6.0.3. The same JAR works with Proguard 5.3.3. I have not tested other 6.x releases.

Command line:

java -Xmx2G -Doptimize.conservatively -jar proguard.jar -include build.pro -injars freehepvg.jar -outjars freehepvg.out.jar

Console output:

Unexpected error while performing partial evaluation:
  Class       = [org/freehep/do]
  Method      = [a(ILorg/freehep/ee;)V]
  Exception   = [java.lang.IllegalArgumentException] (Variable frame is too small [0] compared to other frame [4])
java.lang.RuntimeException: java.lang.IllegalArgumentException: Variable frame is too small [0] compared to other frame [4]
    at proguard.classfile.visitor.ParallelAllClassVisitor.visitClassPool(ParallelAllClassVisitor.java:126)
    at proguard.classfile.ClassPool.accept(ClassPool.java:110)
    at proguard.optimize.Optimizer$TimedClassPoolVisitor.visitClassPool(Optimizer.java:1684)
    at proguard.classfile.ClassPool.accept(ClassPool.java:110)
    at proguard.optimize.Optimizer.execute(Optimizer.java:1392)
    at proguard.ProGuard.optimize(ProGuard.java:413)
    at proguard.ProGuard.execute(ProGuard.java:154)
    at proguard.ProGuard.main(ProGuard.java:572)
Caused by: java.lang.IllegalArgumentException: Variable frame is too small [0] compared to other frame [4]
    at proguard.evaluation.Variables.initialize(Variables.java:96)
    at proguard.evaluation.TracedVariables.initialize(TracedVariables.java:110)
    at proguard.optimize.evaluation.PartialEvaluator.evaluateSingleInstructionBlock(PartialEvaluator.java:793)
    at proguard.optimize.evaluation.PartialEvaluator.evaluateInstructionBlock(PartialEvaluator.java:723)
    at proguard.optimize.evaluation.PartialEvaluator.evaluateInstructionBlockAndExceptionHandlers(PartialEvaluator.java:681)
    at proguard.optimize.evaluation.PartialEvaluator.visitCodeAttribute0(PartialEvaluator.java:317)
    at proguard.optimize.evaluation.PartialEvaluator.visitCodeAttribute(PartialEvaluator.java:230)
    at proguard.optimize.evaluation.LivenessAnalyzer.visitCodeAttribute(LivenessAnalyzer.java:265)
    at proguard.optimize.evaluation.VariableOptimizer.visitCodeAttribute(VariableOptimizer.java:105)
    at proguard.optimize.info.OptimizationCodeAttributeFilter.visitCodeAttribute(OptimizationCodeAttributeFilter.java:84)
    at proguard.classfile.attribute.visitor.DebugAttributeVisitor.visitCodeAttribute(DebugAttributeVisitor.java:302)
    at proguard.classfile.attribute.CodeAttribute.accept(CodeAttribute.java:141)
    at proguard.classfile.ProgramMethod.attributesAccept(ProgramMethod.java:101)
    at proguard.classfile.attribute.visitor.AllAttributeVisitor.visitProgramMember(AllAttributeVisitor.java:95)
    at proguard.classfile.util.SimplifiedVisitor.visitProgramMethod(SimplifiedVisitor.java:93)
    at proguard.classfile.ProgramMethod.accept(ProgramMethod.java:93)
    at proguard.classfile.ProgramClass.methodsAccept(ProgramClass.java:588)
    at proguard.classfile.visitor.AllMethodVisitor.visitProgramClass(AllMethodVisitor.java:47)
    at proguard.classfile.ProgramClass.accept(ProgramClass.java:430)
    at proguard.classfile.visitor.ParallelAllClassVisitor$MyThreadedClassVisitor$1.run(ParallelAllClassVisitor.java:197)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

The input JAR and build script are in the attached ZIP file.

In addition, I still have preverification issues on other codes when I enable inlining optimizations, this is why I disable these optimization (with Java 7 and 8, not tested with Java 9). No issue with Java 6.

Best regard,

1 Attachments

Discussion

  • T. Neidhart

    T. Neidhart - 2019-12-05
    • status: open --> open-accepted
     
  • T. Neidhart

    T. Neidhart - 2019-12-05

    Reproduced with latest 6.2.0 release.

     
  • T. Neidhart

    T. Neidhart - 2019-12-05
    • Priority: Medium --> High
     
  • T. Neidhart

    T. Neidhart - 2019-12-05

    Problem only happens when using conservative optimization. In this case surprisingly more code is removed resulting in a case where a return instruction is removed after a branch instruction leading to the follow up error.

     

Log in to post a comment.

MongoDB Logo MongoDB