summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaExpr.cpp
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2009-12-01 22:28:41 +0000
committerJohn McCall <rjmccall@apple.com>2009-12-01 22:28:41 +0000
commita6d407c29604dc7913af8441c5eb2ffd477c20af (patch)
tree8179934820698c8970777190befb44d388cddef2 /clang/lib/Sema/SemaExpr.cpp
parent732351f7326f1092f129bfbd4bd4d6cf94743a40 (diff)
downloadbcm5719-llvm-a6d407c29604dc7913af8441c5eb2ffd477c20af.tar.gz
bcm5719-llvm-a6d407c29604dc7913af8441c5eb2ffd477c20af.zip
Fix IsProvablyNotDerivedFrom to always use record definitions when available.
Gets clang-on-clang passing again. llvm-svn: 90270
Diffstat (limited to 'clang/lib/Sema/SemaExpr.cpp')
-rw-r--r--clang/lib/Sema/SemaExpr.cpp10
1 files changed, 5 insertions, 5 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index 8e14fcdd6b2..36ab6ed44bd 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -711,10 +711,13 @@ static bool IsDependentIdExpression(Sema &SemaRef, const CXXScopeSpec &SS) {
static bool IsProvablyNotDerivedFrom(Sema &SemaRef,
CXXRecordDecl *Record,
const llvm::SmallPtrSet<CXXRecordDecl*, 4> &Bases) {
- Record = Record->getCanonicalDecl();
- if (Bases.count(Record))
+ if (Bases.count(Record->getCanonicalDecl()))
return false;
+ RecordDecl *RD = Record->getDefinition(SemaRef.Context);
+ if (!RD) return false;
+ Record = cast<CXXRecordDecl>(RD);
+
for (CXXRecordDecl::base_class_iterator I = Record->bases_begin(),
E = Record->bases_end(); I != E; ++I) {
CanQualType BaseT = SemaRef.Context.getCanonicalType((*I).getType());
@@ -722,9 +725,6 @@ static bool IsProvablyNotDerivedFrom(Sema &SemaRef,
if (!BaseRT) return false;
CXXRecordDecl *BaseRecord = cast<CXXRecordDecl>(BaseRT->getDecl());
- if (!BaseRecord->isDefinition())
- return false;
-
if (!IsProvablyNotDerivedFrom(SemaRef, BaseRecord, Bases))
return false;
}
OpenPOWER on IntegriCloud