[Soot-list] RE: My Forward Analysis crashes when there is a loop in function

Ahmad Golzar golzara at cs.man.ac.uk
Wed Jul 30 20:44:01 EDT 2008


Hello again,

Sorry about the format of the source code in my previous post. Here is the
code in a better format:

 

public class ReachingDefinitionsAnalysis extends ForwardFlowAnalysis

{

   private FlowSet emptySet;

   

   public ReachingDefinitionsAnalysis(DirectedGraph<Unit> g) {

      super(g);                

      emptySet = new ArraySparseSet();

      doAnalysis();

   }

   

   @Override

   protected void merge(Object in1, Object in2, Object out) {

      FlowSet inSet1 = (FlowSet)in1,

            inSet2 = (FlowSet)in2,

            outSet = (FlowSet)out;

      inSet1.union(inSet2, outSet);

   }

 

   @Override

   protected void copy(Object source, Object dest) {

      FlowSet srcSet = (FlowSet)source,

            destSet = (FlowSet)dest;

      srcSet.copy(destSet);

   }

   

   @Override

   protected Object newInitialFlow() {

      return emptySet.clone();

   }

 

   @Override

   protected Object entryInitialFlow() {

      return emptySet.clone();

   }

   

   @Override

   protected void flowThrough(Object in, Object node, Object out) {

      FlowSet inSet = (FlowSet)in,

            outSet = (FlowSet)out;

      Unit u = (Unit)node;

      kill(inSet, u, outSet);

      gen(outSet, u);

   }

   

   private void kill(FlowSet inSet, Unit u, FlowSet outSet) {

      FlowSet kills = (FlowSet)emptySet.clone();

      Iterator<ValueBox> defIt = u.getDefBoxes().iterator();

      while (defIt.hasNext()) {

         ValueBox defBox = defIt.next();

 

         if (defBox.getValue() instanceof Local) {

            Iterator<DependencyItem> inSetIt = inSet.iterator();

            while (inSetIt.hasNext()) {

               DependencyItem e = inSetIt.next();

               Local local = e.getLocal();

               if (local.equivTo(defBox.getValue()))

                  kills.add(e);

            }

         }

      }

      inSet.difference(kills, outSet);

   }

   

   private void gen(FlowSet outSet, Unit u) {

      Iterator<ValueBox> useIt = u.getDefBoxes().iterator();

      

      while (useIt.hasNext()) {

         ValueBox useBox = useIt.next();

         if(useBox.getValue() instanceof Local)

            outSet.add(new DependencyItem(u, (Local)useBox.getValue()));

      }

   }              

}

 

public class DependencyItem

{

   private Local local;

   private Unit unit;

   DependencyItem(Unit u, Local l)

   {

      this.unit = u;

      this.local = l;

   }

   

   public Local getLocal(){

      return this.local;

   }

   

   public Unit getUnit()

   {

      return this.unit;

   }

}

 

From: Ahmad Golzar [mailto:golzara at cs.man.ac.uk] 
Sent: Thursday, July 31, 2008 1:38 AM
To: 'soot-list at sable.mcgill.ca'
Subject: My Forward Analysis crashes when there is a loop in function

 

Hi,

I have implemented "Reaching Definitions" analysis using the data-flow
analysis framework in Soot. It works fine with functions that do not have
any loops in them, but crashes with any function that contains a loop. Here
is the code of the class. Have I done anything wrong? 

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20080731/6d0ffe73/attachment.htm


More information about the Soot-list mailing list