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 | 52c16682068850abee4a53495bdf69588d165acd (patch) | |
tree | 22a9109e4964fbb4b1c9744434ed6e13161fafba /lib/Sema/SemaDeclCXX.cpp | |
parent | 12fc4b0624706b474fa10308631fa8daf92f340f (diff) |
Avoid double lookup.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152033 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaDeclCXX.cpp')
-rw-r--r-- | lib/Sema/SemaDeclCXX.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 34648805f9..b603b64bda 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/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())) |