|
29 | 29 | #include "clang/AST/StmtObjC.h"
|
30 | 30 | #include "clang/AST/StmtOpenACC.h"
|
31 | 31 | #include "clang/AST/StmtOpenMP.h"
|
32 |
| -#include "clang/AST/TypeLoc.h" |
33 | 32 | #include "clang/Basic/DiagnosticParse.h"
|
34 | 33 | #include "clang/Basic/OpenMPKinds.h"
|
35 |
| -#include "clang/Sema/DeclSpec.h" |
36 | 34 | #include "clang/Sema/Designator.h"
|
37 | 35 | #include "clang/Sema/EnterExpressionEvaluationContext.h"
|
38 | 36 | #include "clang/Sema/Lookup.h"
|
@@ -7219,48 +7217,30 @@ TreeTransform<Derived>::TransformElaboratedType(TypeLocBuilder &TLB,
|
7219 | 7217 | }
|
7220 | 7218 |
|
7221 | 7219 | QualType NamedT;
|
7222 |
| - if (0 && SemaRef.getLangOpts().CPlusPlus20 && QualifierLoc && isa<TemplateSpecializationType>(TL.getNamedTypeLoc().getType())) { |
7223 |
| - const TemplateSpecializationType *TST = TL.getNamedTypeLoc().getType()->getAs<TemplateSpecializationType>(); |
| 7220 | + if (SemaRef.getLangOpts().CPlusPlus20 && QualifierLoc && |
| 7221 | + isa<TemplateSpecializationType>(TL.getNamedTypeLoc().getType())) { |
7224 | 7222 | TemplateSpecializationTypeLoc SpecTL =
|
7225 | 7223 | TL.getNamedTypeLoc().castAs<TemplateSpecializationTypeLoc>();
|
7226 |
| - // TemplateArgumentListInfo NewTemplateArgs; |
7227 |
| - // NewTemplateArgs.setLAngleLoc(SpecTL.getLAngleLoc()); |
7228 |
| - // NewTemplateArgs.setRAngleLoc(SpecTL.getRAngleLoc()); |
7229 |
| - |
7230 |
| - // typedef TemplateArgumentLocContainerIterator< |
7231 |
| - // TemplateSpecializationTypeLoc> ArgIterator; |
7232 |
| - // if (getDerived().TransformTemplateArguments(ArgIterator(SpecTL, 0), |
7233 |
| - // ArgIterator(SpecTL, SpecTL.getNumArgs()), |
7234 |
| - // NewTemplateArgs)) |
7235 |
| - // return QualType(); |
7236 |
| - |
| 7224 | + const TemplateSpecializationType *TST = |
| 7225 | + SpecTL.getType()->castAs<TemplateSpecializationType>(); |
7237 | 7226 | CXXScopeSpec SS;
|
7238 | 7227 | SS.Adopt(QualifierLoc);
|
7239 |
| - TemplateName InstName = getDerived().RebuildTemplateName( |
7240 |
| - SS, TL.getTemplateKeywordLoc(), *TST->getTemplateName().getAsTemplateDecl()->getIdentifier(), TL.getNamedTypeLoc().getBeginLoc(), QualType(), nullptr, |
7241 |
| - false); |
7242 |
| - |
7243 |
| - if (InstName.isNull()) |
7244 |
| - return QualType(); |
7245 |
| - |
7246 |
| - // If it's still dependent, make a dependent specialization. |
7247 |
| - // if (InstName.getAsDependentTemplateName()) |
7248 |
| - // return SemaRef.Context.getDependentTemplateSpecializationType( |
7249 |
| - // Keyword, QualifierLoc.getNestedNameSpecifier(), Name, |
7250 |
| - // Args.arguments()); |
7251 |
| - |
7252 |
| - // Otherwise, make an elaborated type wrapping a non-dependent |
7253 |
| - // specialization. |
7254 |
| - // NamedT = getDerived().RebuildTemplateSpecializationType(InstName, TL.getNamedTypeLoc().getBeginLoc(), NewTemplateArgs); |
7255 |
| - NamedT = TransformTemplateSpecializationType(TLB, SpecTL, InstName); |
7256 |
| - } else { |
| 7228 | + if (TemplateDecl *TD = TST->getTemplateName().getAsTemplateDecl()) { |
| 7229 | + TemplateName InstName = getDerived().RebuildTemplateName( |
| 7230 | + SS, TL.getTemplateKeywordLoc(), *TD->getIdentifier(), |
| 7231 | + TL.getNamedTypeLoc().getBeginLoc(), /*ObjectType=*/QualType(), |
| 7232 | + /*FirstQualifierInScope=*/nullptr, /*AllowInjectedClassName=*/false); |
| 7233 | + if (InstName.isNull()) |
| 7234 | + return QualType(); |
| 7235 | + NamedT = TransformTemplateSpecializationType(TLB, SpecTL, InstName); |
| 7236 | + } |
| 7237 | + } |
| 7238 | + if (NamedT.isNull()) { |
7257 | 7239 | NamedT = getDerived().TransformType(TLB, TL.getNamedTypeLoc());
|
7258 |
| - |
| 7240 | + if (NamedT.isNull()) |
| 7241 | + return QualType(); |
7259 | 7242 | }
|
7260 | 7243 |
|
7261 |
| - if (NamedT.isNull()) |
7262 |
| - return QualType(); |
7263 |
| - |
7264 | 7244 | // C++0x [dcl.type.elab]p2:
|
7265 | 7245 | // If the identifier resolves to a typedef-name or the simple-template-id
|
7266 | 7246 | // resolves to an alias template specialization, the
|
|
0 commit comments