From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 37704 invoked by alias); 29 Aug 2017 20:13:27 -0000 Mailing-List: contact kawa-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: kawa-owner@sourceware.org Received: (qmail 37691 invoked by uid 89); 29 Aug 2017 20:13:26 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.9 required=5.0 tests=AWL,BAYES_00,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=0006 X-HELO: mail-ua0-f179.google.com Received: from mail-ua0-f179.google.com (HELO mail-ua0-f179.google.com) (209.85.217.179) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 29 Aug 2017 20:13:24 +0000 Received: by mail-ua0-f179.google.com with SMTP id g11so13469033uah.2 for ; Tue, 29 Aug 2017 13:13:24 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=BH51vV6EygJKEDxm2x95ENC/jvx0uwUF1Juo/ljOrWw=; b=Ctr2hWgEe4SWn9hZ2I9V95AJ9Z1S5MKfEsCyrxIQOxV06SAAF7WfE7kdvoO98MW6P5 JA+RLL/EtyILwsjX4kJiNb++c/QONEcFv6ofOykIPD1zGuXNNXAsNfqvALkWHWdSCs7m hTbdK8ksgU/GP6CY9ifWtygmM29nEmwbvrQG0HjnNipzEXTZNngfwCc/+5qTI1PhNKQG x+5vZGK/KJY3yLQlvvCC1MlIspXBSHO9PboKqFqQK9IEdpRa245ZmZF40zIVlWeeDP1t gBaPJm90E1eF6VO4LuOby+NSBjqjU0QyFmzXsSGfGmyxE92b2mTnnMwd1ippv8THThKf PMYA== X-Gm-Message-State: AHYfb5h5wwQlW4iScXZY9taiIgbJg7CCg0NHWK43TY9sgBwJlVw2XtpD iJXf9IMUhdmoVJ/YL5vupm/8NimTUA== X-Received: by 10.159.61.111 with SMTP id m47mr1073271uai.194.1504037602709; Tue, 29 Aug 2017 13:13:22 -0700 (PDT) MIME-Version: 1.0 Received: by 10.159.51.65 with HTTP; Tue, 29 Aug 2017 13:13:22 -0700 (PDT) In-Reply-To: References: From: Kay Zheng Date: Tue, 29 Aug 2017 20:13:00 -0000 Message-ID: Subject: Re: "Uncaught translation error" when transforming Kawa-compiled classes with dex To: Per Bothner Cc: Kawa mailing list Content-Type: text/plain; charset="UTF-8" X-IsSubscribed: yes X-SW-Source: 2017-q3/txt/msg00012.txt.bz2 Hi Per, Indeed it had something to do with local variable info. I added the following snippet to the android section in build.gradle based on your assertion, and the error went away: dexOptions { additionalParameters '--no-locals' } I also enabled the debug logs in the dx command, and here goes the full error message (long lines, hopefully the text won't get messed up): Uncaught translation error: com.android.dx.cf.code.SimException: local variable type mismatch: attempt to set or access a value of type int using a local variable of ty$ e gnu.mapping.CallContext. This is symptomatic of .class transformation tools that ignore local variable information. at com.android.dx.cf.code.BaseMachine.throwLocalMismatch(BaseMachine.java:575) at com.android.dx.cf.code.Simulator$SimVisitor.visitLocal(Simulator.java:584) at com.android.dx.cf.code.BytecodeArray.parseInstruction(BytecodeArray.java:458) at com.android.dx.cf.code.Simulator.simulate(Simulator.java:94) at com.android.dx.cf.code.Ropper.processBlock(Ropper.java:787) at com.android.dx.cf.code.Ropper.doit(Ropper.java:742) at com.android.dx.cf.code.Ropper.convert(Ropper.java:349) at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:285) at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:141) at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:95) at com.android.dx.command.dexer.Main.translateClass(Main.java:799) at com.android.dx.command.dexer.Main.access$2800(Main.java:88) at com.android.dx.command.dexer.Main$ClassTranslatorTask.call(Main.java:1863) at com.android.dx.command.dexer.Main$ClassTranslatorTask.call(Main.java:1848) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) ...at bytecode offset 00000152 locals[0000]: Ljava/lang/Object; locals[0001]: Lgnu/lists/LList; locals[0002]: Ljava/lang/Object; locals[0003]: Ljava/lang/Object; locals[0004]: Lgnu/math/IntNum; locals[0005]: Ljava/lang/Boolean; locals[0006]: Ljava/lang/Object; locals[0007]: locals[0008]: Ljava/lang/Object; stack[top0]: I ...while working on block 0152 [26/1937] ...while working on method stringConcatenateReverse$SlShared$V:(Ljava/lang/Object;Lgnu/lists/LList;)Ljava/lang/Object; ...while processing stringConcatenateReverse$SlShared$V (Ljava/lang/Object;Lgnu/lists/LList;)Ljava/lang/Object; ...while processing gnu/kawa/slib/srfi13.class Uncaught translation error: com.android.dx.cf.code.SimException: local variable type mismatch: attempt to set or access a value of type int using a local variable of typ e gnu.mapping.CallContext. This is symptomatic of .class transformation tools that ignore local variable information. at com.android.dx.cf.code.BaseMachine.throwLocalMismatch(BaseMachine.java:575) at com.android.dx.cf.code.Simulator$SimVisitor.visitLocal(Simulator.java:584) at com.android.dx.cf.code.BytecodeArray.parseInstruction(BytecodeArray.java:458) at com.android.dx.cf.code.Simulator.simulate(Simulator.java:94) at com.android.dx.cf.code.Ropper.processBlock(Ropper.java:787) at com.android.dx.cf.code.Ropper.doit(Ropper.java:742) at com.android.dx.cf.code.Ropper.convert(Ropper.java:349) at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:285) at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:141) at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:95) at com.android.dx.command.dexer.Main.translateClass(Main.java:799) at com.android.dx.command.dexer.Main.access$2800(Main.java:88) at com.android.dx.command.dexer.Main$ClassTranslatorTask.call(Main.java:1863) at com.android.dx.command.dexer.Main$ClassTranslatorTask.call(Main.java:1848) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) ...at bytecode offset 00000122 locals[0000]: Lgnu/expr/ApplyExp; [0/1937] locals[0001]: Lgnu/expr/InlineCalls; locals[0002]: Lgnu/bytecode/Type; locals[0003]: Lgnu/mapping/Procedure; locals[0004]: locals[0005]: Ljava/lang/String; locals[0006]: I locals[0007]: Lgnu/kawa/functions/NumberCompare; locals[0008]: I locals[0009]: locals[000a]: locals[000b]: locals[000c]: stack[top0]: int{0x00000000 / 0} ...while working on block 011f ...while working on method charCompareValidateApply:(Lgnu/expr/ApplyExp;Lgnu/expr/InlineCalls;Lgnu/bytecode/Type;Lgnu/mapping/Procedure;)Lgn$ /expr/Expression; ...while processing charCompareValidateApply (Lgnu/expr/ApplyExp;Lgnu/expr/InlineCalls;Lgnu/bytecode/Type;Lgnu/mapping/Procedure;)Lgnu/expr/$ xpression; ...while processing kawa/lib/compile_misc.class 2 errors; aborting ================== the error message ends here ================== Regards, Kay Z. 2017-08-30 2:01 GMT+08:00 Per Bothner : > On 08/29/2017 10:10 AM, Kay Zheng wrote: >> >> I tried building a simple skeleton Android app against the master >> branch, targeting Android API level 21 (Android 5.0). The compilation >> went well, but there's this ambiguous error when classes are being >> transformed to dex files: >> >> Uncaught translation error: com.android.dx.cf.code.SimException: >> local variable type mismatch: attempt to set or access a value of type >> int using a local variable of type gnu.mapping.CallContext. This is >> symptomatic of .class transformation tools that ignore local variable >> information. > > > Hm. It would be helpful if the error message would say what class and > method it were complaining about. > > A work-around for Java code would be to Compile with -g:lines (-g:none) to > suppress of the LocalVariableTable attribute, since that is what dex seems > to be complaining about. Unfortunately, Kawa doesn't have a comparable > option > for Scheme code. It shouldn't be hard to add. > >> And the content of kawa-javacflags.patch: >> >> $ cat kawa-javacflags.patch >> diff --git a/Makefile.am b/Makefile.am >> index da9e490..a0df1a3 100644 >> --- a/Makefile.am >> +++ b/Makefile.am >> @@ -372,10 +372,10 @@ $(srcdir)/patch-source-list: >> $(top_srcdir)/configure >> | sed -e 's|./||' | sort > $@ >> >> kawa/Version.class: kawa/Version.java >> - $(JAVAC) -d . $^ >> + $(JAVAC) -d . $(JAVACFLAGS) $^ >> >> gnu/kawa/util/PreProcess.class: gnu/kawa/util/PreProcess.java >> - $(JAVAC) -d . $^ >> + $(JAVAC) -d . $(JAVACFLAGS) $^ >> >> JAVA_PREPROCESS_OPTIONS = @JAVA_SOURCE_SELECTOR@ >> $(PREPROCESS_HTTPSERVER) $(PREPROCESS_XML) $(PREPROCESS_JLINE3) >> $(PREPROCESS_AWT) > > > Thanks - I fixed this in my sources. I'll check it in after I've tested it. > -- > --Per Bothner > per@bothner.com http://per.bothner.com/