diff options
Diffstat (limited to 'contrib/llvm/tools/clang/lib/AST/CXXInheritance.cpp')
| -rw-r--r-- | contrib/llvm/tools/clang/lib/AST/CXXInheritance.cpp | 32 | 
1 files changed, 16 insertions, 16 deletions
diff --git a/contrib/llvm/tools/clang/lib/AST/CXXInheritance.cpp b/contrib/llvm/tools/clang/lib/AST/CXXInheritance.cpp index cf3913bac008..213b214a4e4c 100644 --- a/contrib/llvm/tools/clang/lib/AST/CXXInheritance.cpp +++ b/contrib/llvm/tools/clang/lib/AST/CXXInheritance.cpp @@ -14,6 +14,7 @@  #include "clang/AST/ASTContext.h"  #include "clang/AST/RecordLayout.h"  #include "clang/AST/DeclCXX.h" +#include "llvm/ADT/SetVector.h"  #include <algorithm>  #include <set> @@ -25,13 +26,9 @@ void CXXBasePaths::ComputeDeclsFound() {    assert(NumDeclsFound == 0 && !DeclsFound &&           "Already computed the set of declarations"); -  SmallVector<NamedDecl *, 8> Decls; +  llvm::SetVector<NamedDecl *, SmallVector<NamedDecl *, 8> > Decls;    for (paths_iterator Path = begin(), PathEnd = end(); Path != PathEnd; ++Path) -    Decls.push_back(*Path->Decls.first); - -  // Eliminate duplicated decls. -  llvm::array_pod_sort(Decls.begin(), Decls.end()); -  Decls.erase(std::unique(Decls.begin(), Decls.end()), Decls.end()); +    Decls.insert(*Path->Decls.first);    NumDeclsFound = Decls.size();    DeclsFound = new NamedDecl * [NumDeclsFound]; @@ -258,7 +255,7 @@ bool CXXBasePaths::lookupInBases(ASTContext &Context,        }      } else if (VisitBase) {        CXXRecordDecl *BaseRecord -        = cast<CXXRecordDecl>(BaseSpec->getType()->getAs<RecordType>() +        = cast<CXXRecordDecl>(BaseSpec->getType()->castAs<RecordType>()                                  ->getDecl());        if (lookupInBases(Context, BaseRecord, BaseMatches, UserData)) {          // C++ [class.member.lookup]p2: @@ -365,8 +362,8 @@ bool CXXRecordDecl::FindBaseClass(const CXXBaseSpecifier *Specifier,                                    void *BaseRecord) {    assert(((Decl *)BaseRecord)->getCanonicalDecl() == BaseRecord &&           "User data for FindBaseClass is not canonical!"); -  return Specifier->getType()->getAs<RecordType>()->getDecl() -           ->getCanonicalDecl() == BaseRecord; +  return Specifier->getType()->castAs<RecordType>()->getDecl() +            ->getCanonicalDecl() == BaseRecord;  }  bool CXXRecordDecl::FindVirtualBaseClass(const CXXBaseSpecifier *Specifier,  @@ -375,14 +372,15 @@ bool CXXRecordDecl::FindVirtualBaseClass(const CXXBaseSpecifier *Specifier,    assert(((Decl *)BaseRecord)->getCanonicalDecl() == BaseRecord &&           "User data for FindBaseClass is not canonical!");    return Specifier->isVirtual() && -         Specifier->getType()->getAs<RecordType>()->getDecl() -           ->getCanonicalDecl() == BaseRecord; +         Specifier->getType()->castAs<RecordType>()->getDecl() +            ->getCanonicalDecl() == BaseRecord;  }  bool CXXRecordDecl::FindTagMember(const CXXBaseSpecifier *Specifier,                                     CXXBasePath &Path,                                    void *Name) { -  RecordDecl *BaseRecord = Specifier->getType()->getAs<RecordType>()->getDecl(); +  RecordDecl *BaseRecord = +    Specifier->getType()->castAs<RecordType>()->getDecl();    DeclarationName N = DeclarationName::getFromOpaquePtr(Name);    for (Path.Decls = BaseRecord->lookup(N); @@ -398,7 +396,8 @@ bool CXXRecordDecl::FindTagMember(const CXXBaseSpecifier *Specifier,  bool CXXRecordDecl::FindOrdinaryMember(const CXXBaseSpecifier *Specifier,                                          CXXBasePath &Path,                                         void *Name) { -  RecordDecl *BaseRecord = Specifier->getType()->getAs<RecordType>()->getDecl(); +  RecordDecl *BaseRecord = +    Specifier->getType()->castAs<RecordType>()->getDecl();    const unsigned IDNS = IDNS_Ordinary | IDNS_Tag | IDNS_Member;    DeclarationName N = DeclarationName::getFromOpaquePtr(Name); @@ -416,7 +415,8 @@ bool CXXRecordDecl::  FindNestedNameSpecifierMember(const CXXBaseSpecifier *Specifier,                                 CXXBasePath &Path,                                void *Name) { -  RecordDecl *BaseRecord = Specifier->getType()->getAs<RecordType>()->getDecl(); +  RecordDecl *BaseRecord = +    Specifier->getType()->castAs<RecordType>()->getDecl();    DeclarationName N = DeclarationName::getFromOpaquePtr(Name);    for (Path.Decls = BaseRecord->lookup(N); @@ -694,7 +694,7 @@ AddIndirectPrimaryBases(const CXXRecordDecl *RD, ASTContext &Context,             "Cannot get indirect primary bases for class with dependent bases.");      const CXXRecordDecl *BaseDecl = -      cast<CXXRecordDecl>(I->getType()->getAs<RecordType>()->getDecl()); +      cast<CXXRecordDecl>(I->getType()->castAs<RecordType>()->getDecl());      // Only bases with virtual bases participate in computing the      // indirect primary virtual base classes. @@ -717,7 +717,7 @@ CXXRecordDecl::getIndirectPrimaryBases(CXXIndirectPrimaryBaseSet& Bases) const {             "Cannot get indirect primary bases for class with dependent bases.");      const CXXRecordDecl *BaseDecl = -      cast<CXXRecordDecl>(I->getType()->getAs<RecordType>()->getDecl()); +      cast<CXXRecordDecl>(I->getType()->castAs<RecordType>()->getDecl());      // Only bases with virtual bases participate in computing the      // indirect primary virtual base classes.  | 
