From 30f01f77a44b6b8726c140dbef9cbe51f36a52dd Mon Sep 17 00:00:00 2001 From: dolby-oss Date: Fri, 1 Jun 2007 03:27:41 +0000 Subject: [PATCH] adapt to wala changes for cross-language call graphs git-svn-id: https://wala.svn.sourceforge.net/svnroot/wala/trunk@1213 f5eafffb-2e1d-0410-98e4-8ec43c5233c4 --- .../wala/core/tests/basic/PrimitivesTest.java | 27 +++++++++++++++++++ .../tests/callGraph/PiNodeCallGraphTest.java | 2 +- .../analysis/SimpleThreadEscapeAnalysis.java | 19 +++++++++++-- 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/PrimitivesTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/PrimitivesTest.java index b44081c3f..c9b6e5968 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/PrimitivesTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/PrimitivesTest.java @@ -1035,4 +1035,31 @@ public class PrimitivesTest extends WalaTestCase { assertTrue(v2.isSubset(v1)); } + public void testSpecificBugsInSemiSparseMutableIntSets() { + SemiSparseMutableIntSet v1 = new SemiSparseMutableIntSet(); + v1.add(54); + v1.add(58); + v1.add(59); + v1.add(64); + v1.add(67); + v1.add(73); + v1.add(83); + v1.add(105); + v1.add(110); + v1.add(126); + v1.add(136); + v1.add(143); + v1.add(150); + v1.add(155); + v1.add(156); + v1.add(162); + v1.add(168); + v1.add(183); + v1.add(191); + v1.add(265); + v1.add(294); + v1.add(324); + v1.add(344); + v1.add(397); + } } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/PiNodeCallGraphTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/PiNodeCallGraphTest.java index ff561f2c2..cf6339504 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/PiNodeCallGraphTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/PiNodeCallGraphTest.java @@ -55,7 +55,7 @@ public class PiNodeCallGraphTest extends WalaTestCase { private static final String thatName = TestConstants.PI_TEST_MAIN + "$That"; - private static final ClassLoaderReference loader = new ClassLoaderReference(Atom.findOrCreateUnicodeAtom("Application")); + private static final ClassLoaderReference loader = ClassLoaderReference.Application; private static final TypeReference whateverRef = TypeReference.findOrCreate(loader, TypeName.string2TypeName(whateverName)); diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/analysis/SimpleThreadEscapeAnalysis.java b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/analysis/SimpleThreadEscapeAnalysis.java index 7fe309c1a..4796c8a3f 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/analysis/SimpleThreadEscapeAnalysis.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/analysis/SimpleThreadEscapeAnalysis.java @@ -139,7 +139,7 @@ public class SimpleThreadEscapeAnalysis extends AbstractAnalysisEngine { // // ...and the class hierarchy // - ClassHierarchy cha = buildClassHierarchy(); + IClassHierarchy cha = buildClassHierarchy(); setClassHierarchy(cha); // @@ -281,6 +281,15 @@ public class SimpleThreadEscapeAnalysis extends AbstractAnalysisEngine { return escapingTypes; } + /** + * This main program shows one example use of thread escape + * analysis: producing a set of fields to be monitored for a + * dynamic race detector. The idea is that any field might have a + * race with two excpetions: final fields do not have races since + * there are no writes to them, and volatile fields have atomic read + * and write semantics provided by trhe VM. Hence, this piece of + * code produces a list of all other fields. + */ public static void main(String[] args) throws IOException, ClassHierarchyException { String mainClassName = args[0]; @@ -292,7 +301,13 @@ public class SimpleThreadEscapeAnalysis extends AbstractAnalysisEngine { Set escapingTypes = (new SimpleThreadEscapeAnalysis(jars, mainClassName)).gatherThreadEscapingClasses(); for (Iterator types = escapingTypes.iterator(); types.hasNext();) { - System.out.println(types.next().getName().toString()); + IClass cls = types.next(); + for(Iterator fs = cls.getAllFields().iterator(); fs.hasNext(); ) { + IField f = (IField) fs.next(); + if (!f.isVolatile() && !f.isFinal()) { + System.err.println( f.getReference() ); + } + } } } }