diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2012-03-05 17:20:04 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2012-03-05 17:20:04 +0000 |
commit | 73ecd70d3870c332e2df6a50b85c32d3b48bdecb (patch) | |
tree | a87087df2166dbd20584e45d2074a69d74c145f5 /clang/lib/Sema/SemaDeclCXX.cpp | |
parent | 15d48ec46ff5d884506c84c430736be1c4193b3f (diff) | |
download | bcm5719-llvm-73ecd70d3870c332e2df6a50b85c32d3b48bdecb.tar.gz bcm5719-llvm-73ecd70d3870c332e2df6a50b85c32d3b48bdecb.zip |
Avoid double lookup.
llvm-svn: 152033
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 34648805f93..b603b64bda9 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -1128,13 +1128,15 @@ bool Sema::AttachBaseSpecifiers(CXXRecordDecl *Class, CXXBaseSpecifier **Bases, QualType NewBaseType = Context.getCanonicalType(Bases[idx]->getType()); NewBaseType = NewBaseType.getLocalUnqualifiedType(); - if (KnownBaseTypes[NewBaseType]) { + + CXXBaseSpecifier *&KnownBase = KnownBaseTypes[NewBaseType]; + if (KnownBase) { // C++ [class.mi]p3: // A class shall not be specified as a direct base class of a // derived class more than once. Diag(Bases[idx]->getSourceRange().getBegin(), diag::err_duplicate_base_class) - << KnownBaseTypes[NewBaseType]->getType() + << KnownBase->getType() << Bases[idx]->getSourceRange(); // Delete the duplicate base class specifier; we're going to @@ -1144,7 +1146,7 @@ bool Sema::AttachBaseSpecifiers(CXXRecordDecl *Class, CXXBaseSpecifier **Bases, Invalid = true; } else { // Okay, add this new base class. - KnownBaseTypes[NewBaseType] = Bases[idx]; + KnownBase = Bases[idx]; Bases[NumGoodBases++] = Bases[idx]; if (const RecordType *Record = NewBaseType->getAs<RecordType>()) if (const CXXRecordDecl *RD = cast<CXXRecordDecl>(Record->getDecl())) |