diff options
author | John McCall <rjmccall@apple.com> | 2009-12-01 22:28:41 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2009-12-01 22:28:41 +0000 |
commit | a6d407c29604dc7913af8441c5eb2ffd477c20af (patch) | |
tree | 8179934820698c8970777190befb44d388cddef2 /clang/lib/Sema/SemaExpr.cpp | |
parent | 732351f7326f1092f129bfbd4bd4d6cf94743a40 (diff) | |
download | bcm5719-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.cpp | 10 |
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; } |