From f2a390d485bedddc3fd0631cb0dcf9e9802f27ea Mon Sep 17 00:00:00 2001 From: dolby-oss Date: Wed, 28 Apr 2010 19:35:53 +0000 Subject: [PATCH] adapt to checkcast change git-svn-id: https://wala.svn.sourceforge.net/svnroot/wala/trunk@3820 f5eafffb-2e1d-0410-98e4-8ec43c5233c4 --- .../demandpa/driver/DemandCastChecker.java | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/demandpa/driver/DemandCastChecker.java b/com.ibm.wala.core.tests/src/com/ibm/wala/demandpa/driver/DemandCastChecker.java index 12fdbfdbd..5e5d024dc 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/demandpa/driver/DemandCastChecker.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/demandpa/driver/DemandCastChecker.java @@ -234,9 +234,18 @@ public class DemandCastChecker { SSAInstruction instruction = instrs[i]; if (instruction instanceof SSACheckCastInstruction) { SSACheckCastInstruction castInstr = (SSACheckCastInstruction) instruction; - final TypeReference declaredResultType = castInstr.getDeclaredResultType(); - if (declaredResultType.isPrimitiveType()) + final TypeReference[] declaredResultTypes = castInstr.getDeclaredResultTypes(); + + boolean primOnly = true; + for (TypeReference t : declaredResultTypes) { + if (! t.isPrimitiveType()) { + primOnly = false; + } + } + if (primOnly) { continue; + } + System.err.println("CHECKING " + castInstr + " in " + node.getMethod()); PointerKey castedPk = heapModel.getPointerKeyForLocal(node, castInstr.getUse(0)); Predicate castPred = new Predicate() { @@ -244,10 +253,12 @@ public class DemandCastChecker { @Override public boolean test(InstanceKey ik) { TypeReference ikTypeRef = ik.getConcreteType().getReference(); - if (!cha.isAssignableFrom(cha.lookupClass(declaredResultType), cha.lookupClass(ikTypeRef))) { - return false; + for (TypeReference t : declaredResultTypes) { + if (cha.isAssignableFrom(cha.lookupClass(t), cha.lookupClass(ikTypeRef))) { + return true; + } } - return true; + return false; } };