Skip to content

Commit 16886bc

Browse files
author
git apple-llvm automerger
committed
Merge commit 'ba9d1c41c41d' from llvm.org/main into next
2 parents 8723471 + ba9d1c4 commit 16886bc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+800
-1333
lines changed

clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,8 @@ class RenamerClangTidyVisitor
350350
const TemplateDecl *Decl =
351351
Loc.getTypePtr()->getTemplateName().getAsTemplateDecl(
352352
/*IgnoreDeduced=*/true);
353+
if (!Decl)
354+
return true;
353355

354356
if (const auto *ClassDecl = dyn_cast<TemplateDecl>(Decl))
355357
if (const NamedDecl *TemplDecl = ClassDecl->getTemplatedDecl())

clang-tools-extra/clangd/FindTarget.cpp

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -406,15 +406,6 @@ struct TargetFinder {
406406
}
407407
}
408408
}
409-
void VisitDependentTemplateSpecializationType(
410-
const DependentTemplateSpecializationType *DTST) {
411-
if (Outer.Resolver) {
412-
for (const NamedDecl *ND :
413-
Outer.Resolver->resolveTemplateSpecializationType(DTST)) {
414-
Outer.add(ND, Flags);
415-
}
416-
}
417-
}
418409
void VisitTypedefType(const TypedefType *TT) {
419410
if (shouldSkipTypedef(TT->getDecl()))
420411
return;
@@ -455,11 +446,13 @@ struct TargetFinder {
455446
// class template specializations have a (specialized) CXXRecordDecl.
456447
else if (const CXXRecordDecl *RD = TST->getAsCXXRecordDecl())
457448
Outer.add(RD, Flags); // add(Decl) will despecialize if needed.
458-
else {
449+
else if (auto *TD = TST->getTemplateName().getAsTemplateDecl())
459450
// fallback: the (un-specialized) declaration from primary template.
460-
if (auto *TD = TST->getTemplateName().getAsTemplateDecl())
461-
Outer.add(TD->getTemplatedDecl(), Flags | Rel::TemplatePattern);
462-
}
451+
Outer.add(TD->getTemplatedDecl(), Flags | Rel::TemplatePattern);
452+
else if (Outer.Resolver)
453+
for (const NamedDecl *ND :
454+
Outer.Resolver->resolveTemplateSpecializationType(TST))
455+
Outer.add(ND, Flags);
463456
}
464457
void
465458
VisitSubstTemplateTypeParmType(const SubstTemplateTypeParmType *STTPT) {
@@ -900,15 +893,6 @@ refInTypeLoc(TypeLoc L, const HeuristicResolver *Resolver) {
900893
DeclRelation::Alias, Resolver)});
901894
}
902895

903-
void VisitDependentTemplateSpecializationTypeLoc(
904-
DependentTemplateSpecializationTypeLoc L) {
905-
Refs.push_back(
906-
ReferenceLoc{L.getQualifierLoc(), L.getTemplateNameLoc(),
907-
/*IsDecl=*/false,
908-
explicitReferenceTargets(
909-
DynTypedNode::create(L.getType()), {}, Resolver)});
910-
}
911-
912896
void VisitDependentNameTypeLoc(DependentNameTypeLoc L) {
913897
Refs.push_back(
914898
ReferenceLoc{L.getQualifierLoc(), L.getNameLoc(),

clang-tools-extra/clangd/SemanticHighlighting.cpp

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -728,11 +728,6 @@ class CollectExtraHighlightings
728728
return true;
729729
}
730730

731-
bool VisitTemplateSpecializationTypeLoc(TemplateSpecializationTypeLoc L) {
732-
H.addAngleBracketTokens(L.getLAngleLoc(), L.getRAngleLoc());
733-
return true;
734-
}
735-
736731
bool VisitFunctionDecl(FunctionDecl *D) {
737732
if (D->isOverloadedOperator()) {
738733
const auto AddOpDeclToken = [&](SourceLocation Loc) {
@@ -1087,11 +1082,12 @@ class CollectExtraHighlightings
10871082
return true;
10881083
}
10891084

1090-
bool VisitDependentTemplateSpecializationTypeLoc(
1091-
DependentTemplateSpecializationTypeLoc L) {
1092-
H.addToken(L.getTemplateNameLoc(), HighlightingKind::Type)
1093-
.addModifier(HighlightingModifier::DependentName)
1094-
.addModifier(HighlightingModifier::ClassScope);
1085+
bool VisitTemplateSpecializationTypeLoc(TemplateSpecializationTypeLoc L) {
1086+
if (!L.getTypePtr()->getTemplateName().getAsTemplateDecl(
1087+
/*IgnoreDeduced=*/true))
1088+
H.addToken(L.getTemplateNameLoc(), HighlightingKind::Type)
1089+
.addModifier(HighlightingModifier::DependentName)
1090+
.addModifier(HighlightingModifier::ClassScope);
10951091
H.addAngleBracketTokens(L.getLAngleLoc(), L.getRAngleLoc());
10961092
return true;
10971093
}

clang-tools-extra/clangd/unittests/FindTargetTests.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1029,8 +1029,7 @@ TEST_F(TargetDeclTest, DependentTypes) {
10291029
template <typename T>
10301030
void foo(typename A<T>::template [[B]]<int>);
10311031
)cpp";
1032-
EXPECT_DECLS("DependentTemplateSpecializationTypeLoc",
1033-
"template <typename> struct B");
1032+
EXPECT_DECLS("TemplateSpecializationTypeLoc", "template <typename> struct B");
10341033

10351034
// Dependent name with recursive definition. We don't expect a
10361035
// result, but we shouldn't get into a stack overflow either.

clang-tools-extra/include-cleaner/lib/WalkAST.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,8 @@ class ASTWalker : public RecursiveASTVisitor<ASTWalker> {
321321

322322
// TypeLoc visitors.
323323
void reportType(SourceLocation RefLoc, NamedDecl *ND) {
324+
if (!ND)
325+
return;
324326
// Reporting explicit references to types nested inside classes can cause
325327
// issues, e.g. a type accessed through a derived class shouldn't require
326328
// inclusion of the base.

clang/docs/ReleaseNotes.rst

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,9 @@ AST Matchers
458458
following the corresponding changes in the clang AST.
459459
- Ensure ``hasBitWidth`` doesn't crash on bit widths that are dependent on template
460460
parameters.
461-
461+
- Remove the ``dependentTemplateSpecializationType`` matcher, as the
462+
corresponding AST node was removed. This matcher was never very useful, since
463+
there was no way to match on its template name.
462464
- Add a boolean member ``IgnoreSystemHeaders`` to ``MatchFinderOptions``. This
463465
allows it to ignore nodes in system headers when traversing the AST.
464466

clang/include/clang/AST/ASTContext.h

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -242,9 +242,6 @@ class ASTContext : public RefCountedBase<ASTContext> {
242242
mutable llvm::FoldingSet<UsingType> UsingTypes;
243243
mutable llvm::FoldingSet<FoldingSetPlaceholder<TypedefType>> TypedefTypes;
244244
mutable llvm::FoldingSet<DependentNameType> DependentNameTypes;
245-
mutable llvm::DenseMap<llvm::FoldingSetNodeID,
246-
DependentTemplateSpecializationType *>
247-
DependentTemplateSpecializationTypes;
248245
mutable llvm::FoldingSet<PackExpansionType> PackExpansionTypes;
249246
mutable llvm::FoldingSet<ObjCObjectTypeImpl> ObjCObjectTypes;
250247
mutable llvm::FoldingSet<ObjCObjectPointerType> ObjCObjectPointerTypes;
@@ -2000,7 +1997,8 @@ class ASTContext : public RefCountedBase<ASTContext> {
20001997
TemplateTypeParmDecl *ParmDecl = nullptr) const;
20011998

20021999
QualType getCanonicalTemplateSpecializationType(
2003-
TemplateName T, ArrayRef<TemplateArgument> CanonicalArgs) const;
2000+
ElaboratedTypeKeyword Keyword, TemplateName T,
2001+
ArrayRef<TemplateArgument> CanonicalArgs) const;
20042002

20052003
QualType
20062004
getTemplateSpecializationType(ElaboratedTypeKeyword Keyword, TemplateName T,
@@ -2031,13 +2029,6 @@ class ASTContext : public RefCountedBase<ASTContext> {
20312029
NestedNameSpecifier NNS,
20322030
const IdentifierInfo *Name) const;
20332031

2034-
QualType getDependentTemplateSpecializationType(
2035-
ElaboratedTypeKeyword Keyword, const DependentTemplateStorage &Name,
2036-
ArrayRef<TemplateArgumentLoc> Args) const;
2037-
QualType getDependentTemplateSpecializationType(
2038-
ElaboratedTypeKeyword Keyword, const DependentTemplateStorage &Name,
2039-
ArrayRef<TemplateArgument> Args, bool IsCanonical = false) const;
2040-
20412032
TemplateArgument getInjectedTemplateArg(NamedDecl *ParamDecl) const;
20422033

20432034
/// Form a pack expansion type with the given pattern.

clang/include/clang/AST/ASTNodeTraverser.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -533,11 +533,6 @@ class ASTNodeTraverser
533533
for (unsigned I=0, N=TL.getNumArgs(); I < N; ++I)
534534
dumpTemplateArgumentLoc(TL.getArgLoc(I));
535535
}
536-
void VisitDependentTemplateSpecializationTypeLoc(
537-
DependentTemplateSpecializationTypeLoc TL) {
538-
for (unsigned I=0, N=TL.getNumArgs(); I < N; ++I)
539-
dumpTemplateArgumentLoc(TL.getArgLoc(I));
540-
}
541536

542537
void VisitTypedefDecl(const TypedefDecl *D) { Visit(D->getUnderlyingType()); }
543538

clang/include/clang/AST/RecursiveASTVisitor.h

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1202,13 +1202,6 @@ DEF_TRAVERSE_TYPE(DependentNameType, {
12021202
TRY_TO(TraverseNestedNameSpecifier(T->getQualifier()));
12031203
})
12041204

1205-
DEF_TRAVERSE_TYPE(DependentTemplateSpecializationType, {
1206-
const DependentTemplateStorage &S = T->getDependentTemplateName();
1207-
if (TraverseQualifier)
1208-
TRY_TO(TraverseNestedNameSpecifier(S.getQualifier()));
1209-
TRY_TO(TraverseTemplateArguments(T->template_arguments()));
1210-
})
1211-
12121205
DEF_TRAVERSE_TYPE(TemplateSpecializationType, {
12131206
if (TraverseQualifier) {
12141207
TRY_TO(TraverseTemplateName(T->getTemplateName()));
@@ -1564,15 +1557,6 @@ DEF_TRAVERSE_TYPELOC(DependentNameType, {
15641557
TRY_TO(TraverseNestedNameSpecifierLoc(TL.getQualifierLoc()));
15651558
})
15661559

1567-
DEF_TRAVERSE_TYPELOC(DependentTemplateSpecializationType, {
1568-
if (TraverseQualifier)
1569-
TRY_TO(TraverseNestedNameSpecifierLoc(TL.getQualifierLoc()));
1570-
1571-
for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {
1572-
TRY_TO(TraverseTemplateArgumentLoc(TL.getArgLoc(I)));
1573-
}
1574-
})
1575-
15761560
DEF_TRAVERSE_TYPELOC(TemplateSpecializationType, {
15771561
if (TraverseQualifier)
15781562
TRY_TO(TraverseNestedNameSpecifierLoc(TL.getQualifierLoc()));

clang/include/clang/AST/TemplateName.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,10 +297,10 @@ class TemplateName {
297297
/// set of function templates, returns NULL.
298298
TemplateDecl *getAsTemplateDecl(bool IgnoreDeduced = false) const;
299299

300-
/// Retrieves the underlying template declaration that
300+
/// Retrieves the underlying template name that
301301
/// this template name refers to, along with the
302302
/// deduced default arguments, if any.
303-
std::pair<TemplateDecl *, DefaultArguments>
303+
std::pair<TemplateName, DefaultArguments>
304304
getTemplateDeclAndDefaultArgs() const;
305305

306306
/// Retrieve the underlying, overloaded function template

0 commit comments

Comments
 (0)