Skip to content

Commit 142c3f3

Browse files
committed
[clang] NFCI: use TemplateArgumentLoc for type-param DefaultArgument
This is an enabler for a future patch.
1 parent 32c9d5e commit 142c3f3

27 files changed

+144
-127
lines changed

clang-tools-extra/clang-tidy/bugprone/ForwardingReferenceOverloadCheck.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,9 @@ AST_MATCHER(QualType, isEnableIf) {
5454
AST_MATCHER_P(TemplateTypeParmDecl, hasDefaultArgument,
5555
clang::ast_matchers::internal::Matcher<QualType>, TypeMatcher) {
5656
return Node.hasDefaultArgument() &&
57-
TypeMatcher.matches(Node.getDefaultArgument(), Finder, Builder);
57+
TypeMatcher.matches(
58+
Node.getDefaultArgument().getArgument().getAsType(), Finder,
59+
Builder);
5860
}
5961
AST_MATCHER(TemplateDecl, hasAssociatedConstraints) {
6062
return Node.hasAssociatedConstraints();

clang-tools-extra/clang-tidy/bugprone/IncorrectEnableIfCheck.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@ namespace {
1919
AST_MATCHER_P(TemplateTypeParmDecl, hasUnnamedDefaultArgument,
2020
ast_matchers::internal::Matcher<TypeLoc>, InnerMatcher) {
2121
if (Node.getIdentifier() != nullptr || !Node.hasDefaultArgument() ||
22-
Node.getDefaultArgumentInfo() == nullptr)
22+
Node.getDefaultArgument().getArgument().isNull())
2323
return false;
2424

25-
TypeLoc DefaultArgTypeLoc = Node.getDefaultArgumentInfo()->getTypeLoc();
25+
TypeLoc DefaultArgTypeLoc =
26+
Node.getDefaultArgument().getTypeSourceInfo()->getTypeLoc();
2627
return InnerMatcher.matches(DefaultArgTypeLoc, Finder, Builder);
2728
}
2829

clang-tools-extra/clang-tidy/modernize/UseConstraintsCheck.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -177,9 +177,11 @@ matchTrailingTemplateParam(const FunctionTemplateDecl *FunctionTemplate) {
177177
dyn_cast<TemplateTypeParmDecl>(LastParam)) {
178178
if (LastTemplateParam->hasDefaultArgument() &&
179179
LastTemplateParam->getIdentifier() == nullptr) {
180-
return {matchEnableIfSpecialization(
181-
LastTemplateParam->getDefaultArgumentInfo()->getTypeLoc()),
182-
LastTemplateParam};
180+
return {
181+
matchEnableIfSpecialization(LastTemplateParam->getDefaultArgument()
182+
.getTypeSourceInfo()
183+
->getTypeLoc()),
184+
LastTemplateParam};
183185
}
184186
}
185187
return {};

clang-tools-extra/clangd/Hover.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,8 +247,12 @@ fetchTemplateParameters(const TemplateParameterList *Params,
247247
if (!TTP->getName().empty())
248248
P.Name = TTP->getNameAsString();
249249

250-
if (TTP->hasDefaultArgument())
251-
P.Default = TTP->getDefaultArgument().getAsString(PP);
250+
if (TTP->hasDefaultArgument()) {
251+
P.Default.emplace();
252+
llvm::raw_string_ostream Out(*P.Default);
253+
TTP->getDefaultArgument().getArgument().print(PP, Out,
254+
/*IncludeType=*/false);
255+
}
252256
} else if (const auto *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {
253257
P.Type = printType(NTTP, PP);
254258

clang/include/clang/AST/ASTNodeTraverser.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -695,7 +695,7 @@ class ASTNodeTraverser
695695
if (const auto *TC = D->getTypeConstraint())
696696
Visit(TC->getImmediatelyDeclaredConstraint());
697697
if (D->hasDefaultArgument())
698-
Visit(D->getDefaultArgument(), SourceRange(),
698+
Visit(D->getDefaultArgument().getArgument(), SourceRange(),
699699
D->getDefaultArgStorage().getInheritedFrom(),
700700
D->defaultArgumentWasInherited() ? "inherited from" : "previous");
701701
}

clang/include/clang/AST/DeclTemplate.h

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1185,7 +1185,7 @@ class TemplateTypeParmDecl final : public TypeDecl,
11851185

11861186
/// The default template argument, if any.
11871187
using DefArgStorage =
1188-
DefaultArgStorage<TemplateTypeParmDecl, TypeSourceInfo *>;
1188+
DefaultArgStorage<TemplateTypeParmDecl, TemplateArgumentLoc *>;
11891189
DefArgStorage DefaultArgument;
11901190

11911191
TemplateTypeParmDecl(DeclContext *DC, SourceLocation KeyLoc,
@@ -1225,13 +1225,9 @@ class TemplateTypeParmDecl final : public TypeDecl,
12251225
bool hasDefaultArgument() const { return DefaultArgument.isSet(); }
12261226

12271227
/// Retrieve the default argument, if any.
1228-
QualType getDefaultArgument() const {
1229-
return DefaultArgument.get()->getType();
1230-
}
1231-
1232-
/// Retrieves the default argument's source information, if any.
1233-
TypeSourceInfo *getDefaultArgumentInfo() const {
1234-
return DefaultArgument.get();
1228+
const TemplateArgumentLoc &getDefaultArgument() const {
1229+
static const TemplateArgumentLoc NoneLoc;
1230+
return DefaultArgument.isSet() ? *DefaultArgument.get() : NoneLoc;
12351231
}
12361232

12371233
/// Retrieves the location of the default argument declaration.
@@ -1244,9 +1240,8 @@ class TemplateTypeParmDecl final : public TypeDecl,
12441240
}
12451241

12461242
/// Set the default argument for this template parameter.
1247-
void setDefaultArgument(TypeSourceInfo *DefArg) {
1248-
DefaultArgument.set(DefArg);
1249-
}
1243+
void setDefaultArgument(const ASTContext &C,
1244+
const TemplateArgumentLoc &DefArg);
12501245

12511246
/// Set that this default argument was inherited from another
12521247
/// parameter.

clang/include/clang/AST/RecursiveASTVisitor.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1960,7 +1960,7 @@ DEF_TRAVERSE_DECL(TemplateTypeParmDecl, {
19601960
TRY_TO(TraverseType(QualType(D->getTypeForDecl(), 0)));
19611961
TRY_TO(TraverseTemplateTypeParamDeclConstraints(D));
19621962
if (D->hasDefaultArgument() && !D->defaultArgumentWasInherited())
1963-
TRY_TO(TraverseTypeLoc(D->getDefaultArgumentInfo()->getTypeLoc()));
1963+
TRY_TO(TraverseTemplateArgumentLoc(D->getDefaultArgument()));
19641964
})
19651965

19661966
DEF_TRAVERSE_DECL(TypedefDecl, {

clang/include/clang/Sema/Sema.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10067,7 +10067,9 @@ class Sema final : public SemaBase {
1006710067

1006810068
bool SubstTemplateArgument(const TemplateArgumentLoc &Input,
1006910069
const MultiLevelTemplateArgumentList &TemplateArgs,
10070-
TemplateArgumentLoc &Output);
10070+
TemplateArgumentLoc &Output,
10071+
SourceLocation Loc = {},
10072+
const DeclarationName &Entity = {});
1007110073
bool
1007210074
SubstTemplateArguments(ArrayRef<TemplateArgumentLoc> Args,
1007310075
const MultiLevelTemplateArgumentList &TemplateArgs,

clang/lib/AST/ASTContext.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6494,7 +6494,8 @@ bool ASTContext::isSameDefaultTemplateArgument(const NamedDecl *X,
64946494
if (!TTPX->hasDefaultArgument() || !TTPY->hasDefaultArgument())
64956495
return false;
64966496

6497-
return hasSameType(TTPX->getDefaultArgument(), TTPY->getDefaultArgument());
6497+
return hasSameType(TTPX->getDefaultArgument().getArgument().getAsType(),
6498+
TTPY->getDefaultArgument().getArgument().getAsType());
64986499
}
64996500

65006501
if (auto *NTTPX = dyn_cast<NonTypeTemplateParmDecl>(X)) {

clang/lib/AST/ASTImporter.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5917,11 +5917,11 @@ ASTNodeImporter::VisitTemplateTypeParmDecl(TemplateTypeParmDecl *D) {
59175917
}
59185918

59195919
if (D->hasDefaultArgument()) {
5920-
Expected<TypeSourceInfo *> ToDefaultArgOrErr =
5921-
import(D->getDefaultArgumentInfo());
5920+
Expected<TemplateArgumentLoc> ToDefaultArgOrErr =
5921+
import(D->getDefaultArgument());
59225922
if (!ToDefaultArgOrErr)
59235923
return ToDefaultArgOrErr.takeError();
5924-
ToD->setDefaultArgument(*ToDefaultArgOrErr);
5924+
ToD->setDefaultArgument(ToD->getASTContext(), *ToDefaultArgOrErr);
59255925
}
59265926

59275927
return ToD;

0 commit comments

Comments
 (0)