[armedbear-devel] The value :LONG is not of type (MEMBER NIL :BOOLEAN)
Alessio Stalla
alessiostalla at gmail.com
Mon Mar 21 11:21:44 UTC 2011
2011/3/21 Chun Tian (binghe) <binghe.lisp at gmail.com>:
> Hi, Alessio
>
> Thank you for pointing out this. You're right. IF I temporary removed the LOGAND form and just return the inner ATOMIC-INCF form, then everything goes well, compilation can pass.
>
> The next issue happens in a file which has some method definitions, ABCL report "Register 4 contains wrong type" when loading a just compiled .abcl file:
>
> ; Loading #P"/Users/binghe/.cache/common-lisp/abcl-0.26.0-dev-svn-13251-fasl37-macosx-java/Users/binghe/Lisp/cl-net-snmp/snmp/branches/6/snmp-get.abcl" ...
>
> ; Compilation unit finished
> ; Caught 1 STYLE-WARNING condition
>
> java.lang.VerifyError: (class: org/armedbear/lisp/ASDF_TMP_snmp_get_1, method: execute signature: (Lorg/armedbear/lisp/LispObject;Lorg/armedbear/lisp/LispObject;Lorg/armedbear/lisp/LispObject;Lorg/armedbear/lisp/LispObject;)Lorg/armedbear/lisp/LispObject;) Register 4 contains wrong type
> at java.lang.Class.getDeclaredConstructors0(Native Method)
> at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
> at java.lang.Class.getConstructor0(Class.java:2699)
> at java.lang.Class.newInstance0(Class.java:326)
> at java.lang.Class.newInstance(Class.java:308)
> at org.armedbear.lisp.FaslClassLoader.loadFunction(FaslClassLoader.java:111)
> at org.armedbear.lisp.FaslClassLoader$pf_get_fasl_function.execute(FaslClassLoader.java:149)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:653)
> at org.armedbear.lisp.Lisp.evalCall(Lisp.java:547)
> at org.armedbear.lisp.Lisp.eval(Lisp.java:505)
> at org.armedbear.lisp.Lisp.evalCall(Lisp.java:542)
> at org.armedbear.lisp.Lisp.eval(Lisp.java:505)
> at org.armedbear.lisp.Load.faslLoadStream(Load.java:608)
> at org.armedbear.lisp.Load$init_fasl.execute(Load.java:414)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:653)
> at org.armedbear.lisp.Lisp.evalCall(Lisp.java:547)
> at org.armedbear.lisp.Lisp.eval(Lisp.java:505)
> at org.armedbear.lisp.Load.loadStream(Load.java:575)
> at org.armedbear.lisp.Load.loadFileFromStream(Load.java:531)
> at org.armedbear.lisp.Load.load(Load.java:198)
> at org.armedbear.lisp.Load.load(Load.java:683)
> at org.armedbear.lisp.Load$_load.execute(Load.java:633)
> at org.armedbear.lisp.Symbol.execute(Symbol.java:825)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:688)
> at org.armedbear.lisp.load_1.execute(load.lisp:33)
> at org.armedbear.lisp.CompiledClosure.execute(CompiledClosure.java:101)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:636)
> at org.armedbear.lisp.Primitives$pf_apply.execute(Primitives.java:2799)
> at org.armedbear.lisp.Symbol.execute(Symbol.java:801)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:653)
> at org.armedbear.lisp.map_1.execute(map.lisp:33)
> at org.armedbear.lisp.CompiledClosure.execute(CompiledClosure.java:124)
> at org.armedbear.lisp.Symbol.execute(Symbol.java:813)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:670)
> at org.armedbear.lisp.asdf_389.execute(asdf.lisp:1965)
> at org.armedbear.lisp.clos_308.execute(clos.lisp:1950)
> at org.armedbear.lisp.clos_287.execute(clos.lisp:1718)
> at org.armedbear.lisp.StandardGenericFunction.execute(StandardGenericFunction.java:138)
> at org.armedbear.lisp.Symbol.execute(Symbol.java:801)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:653)
> at org.armedbear.lisp.asdf_391.execute(asdf.lisp:1972)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:653)
> at org.armedbear.lisp.clos_312.execute(clos.lisp:2064)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:636)
> at org.armedbear.lisp.asdf_394.execute(asdf.lisp:1975)
> at org.armedbear.lisp.CompiledClosure.execute(CompiledClosure.java:92)
> at org.armedbear.lisp.asdf_396.execute(asdf.lisp:1975)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:653)
> at org.armedbear.lisp.Primitives$pf_apply.execute(Primitives.java:2802)
> at org.armedbear.lisp.Symbol.execute(Symbol.java:801)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:653)
> at org.armedbear.lisp.asdf_393.execute(asdf.lisp:1975)
> at org.armedbear.lisp.clos_310.execute(clos.lisp:2059)
> at org.armedbear.lisp.clos_287.execute(clos.lisp:1718)
> at org.armedbear.lisp.StandardGenericFunction.execute(StandardGenericFunction.java:138)
> at org.armedbear.lisp.Symbol.execute(Symbol.java:801)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:653)
> at org.armedbear.lisp.asdf_448.execute(asdf.lisp:2105)
> at org.armedbear.lisp.compiler_pass2_374.execute(compiler-pass2.lisp:7474)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:620)
> at org.armedbear.lisp.Java$pf_jrun_exception_protected.execute(Java.java:1228)
> at org.armedbear.lisp.Symbol.execute(Symbol.java:790)
> at org.armedbear.lisp.compiler_pass2_370.execute(compiler-pass2.lisp:7474)
> at org.armedbear.lisp.CompiledClosure.execute(CompiledClosure.java:101)
> at org.armedbear.lisp.Symbol.execute(Symbol.java:790)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:636)
> at org.armedbear.lisp.asdf_447.execute(asdf.lisp:2105)
> at org.armedbear.lisp.CompiledClosure.execute(CompiledClosure.java:112)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:653)
> at org.armedbear.lisp.Primitives$pf_apply.execute(Primitives.java:2802)
> at org.armedbear.lisp.Symbol.execute(Symbol.java:801)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:653)
> at org.armedbear.lisp.asdf_446.execute(asdf.lisp:2105)
> at org.armedbear.lisp.clos_308.execute(clos.lisp:1950)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:636)
> at org.armedbear.lisp.clos_297.execute(clos.lisp:1884)
> at org.armedbear.lisp.Symbol.execute(Symbol.java:801)
> at org.armedbear.lisp.clos_290.execute(clos.lisp:1718)
> at org.armedbear.lisp.CompiledClosure.execute(CompiledClosure.java:112)
> at org.armedbear.lisp.StandardGenericFunction.execute(StandardGenericFunction.java:138)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:653)
> at org.armedbear.lisp.Lisp.funcall(Lisp.java:166)
> at org.armedbear.lisp.Primitives$pf_apply.execute(Primitives.java:2850)
> at org.armedbear.lisp.Primitive.execute(Primitive.java:148)
> at org.armedbear.lisp.Symbol.execute(Symbol.java:825)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:688)
> at org.armedbear.lisp.asdf_462.execute(asdf.lisp:2171)
> at org.armedbear.lisp.CompiledClosure.execute(CompiledClosure.java:101)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:636)
> at org.armedbear.lisp.Lisp.evalCall(Lisp.java:540)
> at org.armedbear.lisp.Lisp.eval(Lisp.java:505)
> at org.armedbear.lisp.Primitives$pf__eval.execute(Primitives.java:345)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:636)
> at org.armedbear.lisp.Lisp.evalCall(Lisp.java:540)
> at org.armedbear.lisp.Lisp.eval(Lisp.java:505)
> at org.armedbear.lisp.Lisp.progn(Lisp.java:674)
> at org.armedbear.lisp.Primitives$sf_block.execute(Primitives.java:3741)
> at org.armedbear.lisp.Lisp.eval(Lisp.java:495)
> at org.armedbear.lisp.Lisp.progn(Lisp.java:674)
> at org.armedbear.lisp.Closure.bindParametersAndExecute(Closure.java:451)
> at org.armedbear.lisp.Closure.execute(Closure.java:484)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:636)
> at org.armedbear.lisp.Lisp$1.execute(Lisp.java:276)
> at org.armedbear.lisp.Symbol.execute(Symbol.java:790)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:636)
> at org.armedbear.lisp.top_level_50.execute(top-level.lisp:415)
> at org.armedbear.lisp.CompiledClosure.execute(CompiledClosure.java:92)
> at org.armedbear.lisp.Symbol.execute(Symbol.java:780)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:620)
> at org.armedbear.lisp.top_level_51.execute(top-level.lisp:423)
> at org.armedbear.lisp.LispThread.execute(LispThread.java:620)
> at org.armedbear.lisp.Interpreter.run(Interpreter.java:353)
> at org.armedbear.lisp.Main$1.run(Main.java:48)
> at java.lang.Thread.run(Thread.java:680)
> #<THREAD "interpreter" {2FEE9422}>: Debugger invoked on condition of type ERROR
> Caught java.lang.VerifyError: (class: org/armedbear/lisp/ASDF_TMP_snmp_get_1, method: execute signature: (Lorg/armedbear/lisp/LispObject;Lorg/armedbear/lisp/LispObject;Lorg/armedbear/lisp/LispObject;Lorg/armedbear/lisp/LispObject;)Lorg/armedbear/lisp/LispObject;) Register 4 contains wrong type.
> Restarts:
> 0: TOP-LEVEL Return to top level.
> [1] CL-USER(10): :bt 16
>
> 0: (SYSTEM:BACKTRACE)
> 1: (INVOKE-DEBUGGER #<ERROR {27E33378}>)
> 2: org.armedbear.lisp.Lisp.error(Lisp.java:373)
> 3: org.armedbear.lisp.Lisp$1.execute(Lisp.java:305)
> 4: org.armedbear.lisp.Symbol.execute(Symbol.java:790)
> 5: org.armedbear.lisp.LispThread.execute(LispThread.java:636)
> 6: org.armedbear.lisp.top_level_50.execute(top-level.lisp:415)
> 7: org.armedbear.lisp.CompiledClosure.execute(CompiledClosure.java:92)
> 8: org.armedbear.lisp.Symbol.execute(Symbol.java:780)
> 9: org.armedbear.lisp.LispThread.execute(LispThread.java:620)
> 10: org.armedbear.lisp.top_level_51.execute(top-level.lisp:423)
> 11: org.armedbear.lisp.LispThread.execute(LispThread.java:620)
> 12: org.armedbear.lisp.Interpreter.run(Interpreter.java:353)
> 13: org.armedbear.lisp.Main$1.run(Main.java:48)
> 14: java.lang.Thread.run(Thread.java:680)
> 15: (APPLY
> #<FUNCTION {1785F0D}>
> (#<ASDF:COMPILE-OP NIL {5A84F3C}>
> #<ASDF:CL-SOURCE-FILE "snmp" "snmp-get">))
>
> Do you have any idea about this? i.e. What's "Register 4"?
It's a JVM register, used to hold some intermediate result. The
compiler is producing incorrect code: probably it doesn't derive the
right type for the atomic-incf form. I see that
(THREADS:WITH-MUTEX (PORTABLE-THREADS::*ATOMIC-OPERATION-LOCK*)
(INCF REQUEST-ID-COUNTER 1))
expands to
(LET ((#:G3433 PORTABLE-THREADS::*ATOMIC-OPERATION-LOCK*))
(WHEN (THREADS:GET-MUTEX #:G3433)
(UNWIND-PROTECT
(PROGN (INCF REQUEST-ID-COUNTER 1))
(THREADS:RELEASE-MUTEX #:G3433))))
Maybe there's a problem with the derived type of unwind-protect forms,
but I don't have the source at hand now to check.
Alessio
More information about the armedbear-devel
mailing list