[Soot-list] Soot-list Digest, Vol 51, Issue 29

LIU Peng lpxz at ust.hk
Sat Aug 1 10:35:43 EDT 2009


Hello :
     I met with an exception while analyzing programs written using Aspectj.
I find where it bring me an exception, But I do not why such case happens.
Can you help me understand it?

Trace:

java.lang.RuntimeException: Attempt to create VarNode of type bottom_type
	at soot.jimple.spark.pag.VarNode.<init>(VarNode.java:90)
	at soot.jimple.spark.pag.LocalVarNode.<init>(LocalVarNode.java:43)
	at soot.jimple.spark.pag.PAG.makeLocalVarNode(PAG.java:499)
	at
soot.jimple.spark.builder.MethodNodeFactory.caseLocal(MethodNodeFactory.java:217)
	at soot.jimple.internal.JimpleLocal.apply(JimpleLocal.java:135)
	at
soot.jimple.spark.builder.MethodNodeFactory$1.caseAssignStmt(MethodNodeFactory.java:75)
	at soot.jimple.internal.JAssignStmt.apply(JAssignStmt.java:236)
	at
soot.jimple.spark.builder.MethodNodeFactory.handleStmt(MethodNodeFactory.java:67)
	at soot.jimple.spark.pag.MethodPAG.buildNormal(MethodPAG.java:167)
	at soot.jimple.spark.pag.MethodPAG.build(MethodPAG.java:133)
	at
soot.jimple.spark.solver.OnFlyCallGraph.processReachables(OnFlyCallGraph.java:64)
	at soot.jimple.spark.solver.OnFlyCallGraph.build(OnFlyCallGraph.java:56)
	at
soot.jimple.spark.solver.PropWorklist.handleVarNode(PropWorklist.java:125)
	at soot.jimple.spark.solver.PropWorklist.propagate(PropWorklist.java:54)
	at
soot.jimple.spark.SparkTransformer.internalTransform(SparkTransformer.java:152)
	at soot.SceneTransformer.transform(SceneTransformer.java:39)
	at soot.Transform.apply(Transform.java:89)
	at soot.RadioScenePack.internalApply(RadioScenePack.java:58)
	at
soot.jimple.toolkits.callgraph.CallGraphPack.internalApply(CallGraphPack.java:48)
	at soot.Pack.apply(Pack.java:114)
	at soot.PackManager.runWholeProgramPacks(PackManager.java:409)
	at soot.PackManager.runPacks(PackManager.java:330)


I find the source of the exception:
l0
<dstm2.benchmark.aj.List: void init()>


l0 in init() is like this:
  protected void init()
    {

        bottom_type l0;

        l3 = newarray (java.lang.Object)[1];
        l3[0] = l0;
        $r1 = new dstm2.benchmark.aj.List$AjcClosure1;
        specialinvoke $r1.<dstm2.benchmark.aj.List$AjcClosure1: void
<init>(java.lang.Object[])>(l3);
...
     }

ajcClosure.<init>() is used to initialize ajcClosure, and l3 is expected
to initialize the state of ajcClosure.

But why does l0 is bottom_type, I am not familiar with the underlying
matters of AOP, can you give me an example when this happens?

Thanks
Regards
Peng





More information about the Soot-list mailing list