[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: newmultiarrays in Spark



We learned very early on that at least some validation is required.

The main validation that I've been doing is of call graphs
generated using Spark. I used Bruno Dufour's AdaptJ framework
(http://www.sable.mcgill.ca/~bdufou1/AdaptJ/) to construct dynamic call
graphs, and then made sure that the Spark-generated call graphs included
the dynamic ones. This turned up quite a few problems, particularly
with effects of native methods. More recently, Anatole Le wrote a
transformation for Soot that takes the methods deemed unreachable by
Spark, and inserts code into them to abort the program if they are
executed. If there is interest, we could include it in future releases
of Soot.

I'm interested in any contributions or suggestions that anyone may have
for improving the validation.

Ondrej

On Mon, Jul 14, 2003 at 05:06:31PM -0500, Manoj Plakal wrote:
> 
> Thanks for the quick fix, that worked.
> 
> A more general question: is there any
> validation of the basic pointer
> analysis results? How do you test that
> Spark produces safe points-to sets? 
> 
> Apart from having a manual test suite,
> maybe it would be good to have a
> transformation phase (not just tagging) 
> driven by the points-to information.
> Bugs might get flushed out quicker.
> 
> Manoj
> 
> 
> Ondrej Lhotak wrote (Mon, Jul 14, 2003 at 03:36:02PM -0400) :
> > The following one-line fix should fix the bug. It will be included in
> > future releases of Soot.
> > 
> > Ondrej
> > 
> > Index: src/soot/jimple/spark/builder/StandardParms.java
> > ===================================================================
> > --- src/soot/jimple/spark/builder/StandardParms.java    (revision 1120)
> > +++ src/soot/jimple/spark/builder/StandardParms.java    (working copy)
> > @@ -363,6 +363,7 @@
> >          AllocNode prevAn = pag.makeAllocNode(
> >              new Pair( nmae, new Integer( type.numDimensions ) ), type, currentMethod );
> >          VarNode prevVn = pag.makeVarNode( prevAn, prevAn.getType(), currentMethod );
> > +        addEdge( prevAn, prevVn );
> >          setResult( prevAn );
> >          while( true ) {
> >              Type t = type.getElementType();