[llvm-branch-commits] [cfe-branch] r71707 - in /cfe/branches/Apple/Dib: lib/Analysis/CFRefCount.cpp test/Analysis/pr4209.m
Mike Stump
mrs at apple.com
Wed May 13 13:06:20 PDT 2009
Author: mrs
Date: Wed May 13 15:06:17 2009
New Revision: 71707
URL: http://llvm.org/viewvc/llvm-project?rev=71707&view=rev
Log:
Merge in 71685:
Fix crasher reported in PR 4209 caused by an invalid summary
generation when EvalObjCMessageExpr() did not resolve the
ObjCInterfaceDecl* for a receiver when the receiver's symbolic value
wasn't being explicitly tracked.
Added:
cfe/branches/Apple/Dib/test/Analysis/pr4209.m
- copied unchanged from r71685, cfe/trunk/test/Analysis/pr4209.m
Modified:
cfe/branches/Apple/Dib/lib/Analysis/CFRefCount.cpp
Modified: cfe/branches/Apple/Dib/lib/Analysis/CFRefCount.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/Apple/Dib/lib/Analysis/CFRefCount.cpp?rev=71707&r1=71706&r2=71707&view=diff
==============================================================================
--- cfe/branches/Apple/Dib/lib/Analysis/CFRefCount.cpp (original)
+++ cfe/branches/Apple/Dib/lib/Analysis/CFRefCount.cpp Wed May 13 15:06:17 2009
@@ -439,6 +439,9 @@
ObjCSummaryKey(const ObjCInterfaceDecl* d, Selector s)
: II(d ? d->getIdentifier() : 0), S(s) {}
+
+ ObjCSummaryKey(const ObjCInterfaceDecl* d, IdentifierInfo *ii, Selector s)
+ : II(d ? d->getIdentifier() : ii), S(s) {}
ObjCSummaryKey(Selector s)
: II(0), S(s) {}
@@ -1265,7 +1268,7 @@
updateSummaryFromAnnotations(*Summ, MD);
// Memoize the summary.
- ObjCMethodSummaries[ObjCSummaryKey(ClsName, S)] = Summ;
+ ObjCMethodSummaries[ObjCSummaryKey(ID, ClsName, S)] = Summ;
return Summ;
}
@@ -1288,7 +1291,7 @@
updateSummaryFromAnnotations(*Summ, MD);
// Memoize the summary.
- ObjCClassMethodSummaries[ObjCSummaryKey(ClsName, S)] = Summ;
+ ObjCClassMethodSummaries[ObjCSummaryKey(ID, ClsName, S)] = Summ;
return Summ;
}
@@ -2926,7 +2929,7 @@
if (Expr* Receiver = ME->getReceiver()) {
// We need the type-information of the tracked receiver object
// Retrieve it from the state.
- ObjCInterfaceDecl* ID = 0;
+ const ObjCInterfaceDecl* ID = 0;
// FIXME: Wouldn't it be great if this code could be reduced? It's just
// a chain of lookups.
@@ -2948,7 +2951,16 @@
}
}
}
-
+
+ // FIXME: this is a hack. This may or may not be the actual method
+ // that is called.
+ if (!ID) {
+ if (const PointerType *PT = Receiver->getType()->getAsPointerType())
+ if (const ObjCInterfaceType *p =
+ PT->getPointeeType()->getAsObjCInterfaceType())
+ ID = p->getDecl();
+ }
+
// FIXME: The receiver could be a reference to a class, meaning that
// we should use the class method.
Summ = Summaries.getInstanceMethodSummary(ME, ID);
More information about the llvm-branch-commits
mailing list