[cfe-commits] r151967 - /cfe/trunk/lib/AST/ASTContext.cpp
Eli Friedman
eli.friedman at gmail.com
Fri Mar 2 20:09:56 PST 2012
Author: efriedma
Date: Fri Mar 2 22:09:56 2012
New Revision: 151967
URL: http://llvm.org/viewvc/llvm-project?rev=151967&view=rev
Log:
Avoid an unnecessary recursive loop between type canonicalization and NNS canonicalization which would (rarely) lead to memory corruption. While I'm here, simplify. Fixes PR12166. Not committing a testcase because it's impossible to reduce it.
Modified:
cfe/trunk/lib/AST/ASTContext.cpp
Modified: cfe/trunk/lib/AST/ASTContext.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=151967&r1=151966&r2=151967&view=diff
==============================================================================
--- cfe/trunk/lib/AST/ASTContext.cpp (original)
+++ cfe/trunk/lib/AST/ASTContext.cpp Fri Mar 2 22:09:56 2012
@@ -3376,26 +3376,13 @@
// types, e.g.,
// typedef typename T::type T1;
// typedef typename T1::type T2;
- if (const DependentNameType *DNT = T->getAs<DependentNameType>()) {
- NestedNameSpecifier *Prefix
- = getCanonicalNestedNameSpecifier(DNT->getQualifier());
- return NestedNameSpecifier::Create(*this, Prefix,
+ if (const DependentNameType *DNT = T->getAs<DependentNameType>())
+ return NestedNameSpecifier::Create(*this, DNT->getQualifier(),
const_cast<IdentifierInfo *>(DNT->getIdentifier()));
- }
- // Do the same thing as above, but with dependent-named specializations.
- if (const DependentTemplateSpecializationType *DTST
- = T->getAs<DependentTemplateSpecializationType>()) {
- NestedNameSpecifier *Prefix
- = getCanonicalNestedNameSpecifier(DTST->getQualifier());
-
- T = getDependentTemplateSpecializationType(DTST->getKeyword(),
- Prefix, DTST->getIdentifier(),
- DTST->getNumArgs(),
- DTST->getArgs());
- T = getCanonicalType(T);
- }
-
+ // Otherwise, just canonicalize the type, and force it to be a TypeSpec.
+ // FIXME: Why are TypeSpec and TypeSpecWithTemplate distinct in the
+ // first place?
return NestedNameSpecifier::Create(*this, 0, false,
const_cast<Type*>(T.getTypePtr()));
}
More information about the cfe-commits
mailing list