[Soot-list] Problem with Shimple Transformation

Julien Klaus julien.klaus at uni-jena.de
Wed May 28 13:40:24 EDT 2014


Hello everybody,

I have problems with the rebuild function in the shimpleBody. After I 
created some locals and assignments with the code below,

                 // create locals
                 JimpleLocal jlt = new JimpleLocal("temp$2", IntType.v());
                 JimpleLocal jlc = new JimpleLocal("c", IntType.v());
                 IntConstant ic = IntConstant.v(3);

                 // add locals
                 Chain<Local> locals = b.getLocals();
                 locals.add(jlt);
                 locals.add(jlc);

                 // create assignments
                 JAssignStmt jast = new JAssignStmt(jlt, ic);
                 JAssignStmt jasc = new JAssignStmt(jlc, jlt);

                 // add assignments
                 spc.insertBefore(jast, jrs);
                 spc.insertBefore(jasc, jrs);

I want to call the function rebuild. After that I got a 
NoSuchElementException (see below) which tells me, that there is an 
invalid unit"temp$2 = 3".

Does I have forgot something in the code? Must I register the nodes 
something else, too?

Thank you for your help.

Regards
Julien

java.lang.reflect.InvocationTargetException
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
     at java.lang.reflect.Method.invoke(Unknown Source)
     at ca.mcgill.sable.soot.launching.SootThread.run(SootThread.java:138)
Caused by: java.util.NoSuchElementException: Invalid unit temp$2 = 3
     at soot.toolkits.graph.UnitGraph.getPredsOf(UnitGraph.java:396)
     at soot.toolkits.graph.UnitGraph.getPredsOf(UnitGraph.java:50)
     at 
soot.toolkits.graph.MHGDominatorsFinder.doAnalysis(MHGDominatorsFinder.java:102)
     at 
soot.toolkits.graph.MHGDominatorsFinder.<init>(MHGDominatorsFinder.java:62)
     at 
soot.toolkits.scalar.GuaranteedDefsAnalysis.<init>(GuaranteedDefs.java:82)
     at soot.toolkits.scalar.GuaranteedDefs.<init>(GuaranteedDefs.java:44)
     at soot.shimple.internal.PhiNodeManager.update(PhiNodeManager.java:55)
     at 
soot.shimple.internal.PhiNodeManager.insertTrivialPhiNodes(PhiNodeManager.java:71)
     at 
soot.shimple.internal.ShimpleBodyBuilder.transform(ShimpleBodyBuilder.java:99)
     at soot.shimple.ShimpleBody.rebuild(ShimpleBody.java:133)
     at 
transform.BranchElimination.internalTransform(BranchElimination.java:83)
     at soot.BodyTransformer.transform(BodyTransformer.java:51)
     at soot.Transform.apply(Transform.java:104)
     at soot.BodyPack.internalApply(BodyPack.java:49)
     at soot.Pack.apply(Pack.java:124)
     at soot.PackManager.runBodyPacks(PackManager.java:766)
     at soot.PackManager.runBodyPacks(PackManager.java:463)
     at soot.PackManager.runBodyPacks(PackManager.java:380)
     at soot.PackManager.runPacks(PackManager.java:357)
     at soot.Main.run(Main.java:198)
     at soot.Main.main(Main.java:141)
     at transform.MySootMain.main(MySootMain.java:11)
     ... 5 more


More information about the Soot-list mailing list