Skip to content

Commit ee56373

Browse files
committed
[Clang][Sema] Use correct TemplateName when transforming TemplateSpecializationType
1 parent 8364659 commit ee56373

File tree

1 file changed

+42
-1
lines changed

1 file changed

+42
-1
lines changed

clang/lib/Sema/TreeTransform.h

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,10 @@
2929
#include "clang/AST/StmtObjC.h"
3030
#include "clang/AST/StmtOpenACC.h"
3131
#include "clang/AST/StmtOpenMP.h"
32+
#include "clang/AST/TypeLoc.h"
3233
#include "clang/Basic/DiagnosticParse.h"
3334
#include "clang/Basic/OpenMPKinds.h"
35+
#include "clang/Sema/DeclSpec.h"
3436
#include "clang/Sema/Designator.h"
3537
#include "clang/Sema/EnterExpressionEvaluationContext.h"
3638
#include "clang/Sema/Lookup.h"
@@ -7216,7 +7218,46 @@ TreeTransform<Derived>::TransformElaboratedType(TypeLocBuilder &TLB,
72167218
return QualType();
72177219
}
72187220

7219-
QualType NamedT = getDerived().TransformType(TLB, TL.getNamedTypeLoc());
7221+
QualType NamedT;
7222+
if (0 && SemaRef.getLangOpts().CPlusPlus20 && QualifierLoc && isa<TemplateSpecializationType>(TL.getNamedTypeLoc().getType())) {
7223+
const TemplateSpecializationType *TST = TL.getNamedTypeLoc().getType()->getAs<TemplateSpecializationType>();
7224+
TemplateSpecializationTypeLoc SpecTL =
7225+
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+
7237+
CXXScopeSpec SS;
7238+
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 {
7257+
NamedT = getDerived().TransformType(TLB, TL.getNamedTypeLoc());
7258+
7259+
}
7260+
72207261
if (NamedT.isNull())
72217262
return QualType();
72227263

0 commit comments

Comments
 (0)