From b16b02213f20efeed42e8982d5f94ffd5cbd78ee Mon Sep 17 00:00:00 2001 From: Matheus Izvekov Date: Sat, 12 Apr 2025 23:01:12 -0300 Subject: [PATCH] [PATCH 2/4] [clang] Improve nested name specifier AST representation Other changes --- clang/include/clang/ASTMatchers/ASTMatchers.h | 157 ++--- .../clang/ASTMatchers/ASTMatchersInternal.h | 20 +- .../clang/Analysis/FlowSensitive/ASTOps.h | 10 +- clang/include/clang/Basic/DeclNodes.td | 149 +++-- clang/include/clang/Basic/TypeNodes.td | 3 +- .../clang/ExtractAPI/DeclarationFragments.h | 5 +- .../include/clang/Sema/CodeCompleteConsumer.h | 7 +- clang/include/clang/Sema/DeclSpec.h | 48 +- clang/include/clang/Sema/HeuristicResolver.h | 3 +- clang/include/clang/Sema/ParsedTemplate.h | 26 +- clang/include/clang/Sema/Sema.h | 38 +- clang/include/clang/Sema/SemaInternal.h | 8 +- clang/include/clang/Sema/TypoCorrection.h | 29 +- .../clang/Serialization/ASTRecordReader.h | 2 +- .../clang/Serialization/ASTRecordWriter.h | 5 +- .../clang/Serialization/TypeBitCodes.def | 1 - .../clang/Tooling/Refactoring/Lookup.h | 3 +- .../Refactoring/RecursiveSymbolVisitor.h | 15 +- clang/lib/ASTMatchers/ASTMatchFinder.cpp | 115 ++-- clang/lib/ASTMatchers/ASTMatchersInternal.cpp | 5 +- clang/lib/ASTMatchers/Dynamic/Registry.cpp | 5 +- .../FlowSensitive/DataflowEnvironment.cpp | 6 +- clang/lib/Analysis/ThreadSafety.cpp | 4 +- clang/lib/Analysis/ThreadSafetyCommon.cpp | 4 +- clang/lib/Analysis/UnsafeBufferUsage.cpp | 12 +- clang/lib/CodeGen/ABIInfo.cpp | 2 +- clang/lib/CodeGen/ABIInfoImpl.cpp | 36 +- clang/lib/CodeGen/CGBlocks.cpp | 3 +- clang/lib/CodeGen/CGCUDANV.cpp | 3 +- clang/lib/CodeGen/CGCXX.cpp | 19 +- clang/lib/CodeGen/CGCXXABI.cpp | 4 +- clang/lib/CodeGen/CGCall.cpp | 27 +- clang/lib/CodeGen/CGClass.cpp | 95 +-- clang/lib/CodeGen/CGDebugInfo.cpp | 127 ++-- clang/lib/CodeGen/CGDecl.cpp | 13 +- clang/lib/CodeGen/CGExpr.cpp | 45 +- clang/lib/CodeGen/CGExprAgg.cpp | 25 +- clang/lib/CodeGen/CGExprCXX.cpp | 37 +- clang/lib/CodeGen/CGExprConstant.cpp | 29 +- clang/lib/CodeGen/CGExprScalar.cpp | 11 +- clang/lib/CodeGen/CGHLSLRuntime.cpp | 3 +- clang/lib/CodeGen/CGNonTrivialStruct.cpp | 9 +- clang/lib/CodeGen/CGObjC.cpp | 4 +- clang/lib/CodeGen/CGObjCMac.cpp | 11 +- clang/lib/CodeGen/CGObjCRuntime.cpp | 4 +- clang/lib/CodeGen/CGOpenMPRuntime.cpp | 35 +- clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp | 4 +- clang/lib/CodeGen/CGPointerAuth.cpp | 2 +- clang/lib/CodeGen/CGStmt.cpp | 4 +- clang/lib/CodeGen/CGStmtOpenMP.cpp | 9 +- clang/lib/CodeGen/CGVTables.cpp | 8 +- clang/lib/CodeGen/CodeGenFunction.cpp | 8 +- clang/lib/CodeGen/CodeGenFunction.h | 6 +- clang/lib/CodeGen/CodeGenModule.cpp | 28 +- clang/lib/CodeGen/CodeGenTBAA.cpp | 13 +- clang/lib/CodeGen/CodeGenTypes.cpp | 33 +- clang/lib/CodeGen/HLSLBufferLayoutBuilder.cpp | 3 +- clang/lib/CodeGen/ItaniumCXXABI.cpp | 68 +- clang/lib/CodeGen/MicrosoftCXXABI.cpp | 25 +- clang/lib/CodeGen/SwiftCallingConv.cpp | 9 +- clang/lib/CodeGen/Targets/AArch64.cpp | 9 +- clang/lib/CodeGen/Targets/AMDGPU.cpp | 6 +- clang/lib/CodeGen/Targets/ARC.cpp | 5 +- clang/lib/CodeGen/Targets/ARM.cpp | 9 +- clang/lib/CodeGen/Targets/BPF.cpp | 5 +- clang/lib/CodeGen/Targets/CSKY.cpp | 2 +- clang/lib/CodeGen/Targets/Hexagon.cpp | 5 +- clang/lib/CodeGen/Targets/Lanai.cpp | 5 +- clang/lib/CodeGen/Targets/LoongArch.cpp | 10 +- clang/lib/CodeGen/Targets/Mips.cpp | 8 +- clang/lib/CodeGen/Targets/NVPTX.cpp | 6 +- clang/lib/CodeGen/Targets/PNaCl.cpp | 4 +- clang/lib/CodeGen/Targets/PPC.cpp | 8 +- clang/lib/CodeGen/Targets/RISCV.cpp | 10 +- clang/lib/CodeGen/Targets/SPIR.cpp | 6 +- clang/lib/CodeGen/Targets/Sparc.cpp | 2 +- clang/lib/CodeGen/Targets/SystemZ.cpp | 8 +- clang/lib/CodeGen/Targets/WebAssembly.cpp | 3 +- clang/lib/CodeGen/Targets/X86.cpp | 59 +- clang/lib/CodeGen/Targets/XCore.cpp | 4 +- clang/lib/ExtractAPI/DeclarationFragments.cpp | 117 ++-- .../TypedefUnderlyingTypeResolver.cpp | 2 +- clang/lib/Frontend/ASTConsumers.cpp | 7 +- clang/lib/Frontend/ASTUnit.cpp | 2 +- clang/lib/Index/IndexTypeSourceInfo.cpp | 52 +- clang/lib/Index/USRGeneration.cpp | 18 +- clang/lib/InstallAPI/Visitor.cpp | 8 +- .../Interpreter/InterpreterValuePrinter.cpp | 2 +- clang/lib/Interpreter/Value.cpp | 6 +- clang/lib/Parse/ParseDeclCXX.cpp | 3 +- clang/lib/Parse/ParseExprCXX.cpp | 13 +- clang/lib/Parse/ParseTemplate.cpp | 29 +- clang/lib/Parse/ParseTentative.cpp | 2 +- clang/lib/Parse/Parser.cpp | 9 +- clang/lib/Sema/AnalysisBasedWarnings.cpp | 11 +- clang/lib/Sema/DeclSpec.cpp | 36 +- clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp | 23 +- clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.h | 2 +- clang/lib/Sema/HeuristicResolver.cpp | 50 +- clang/lib/Sema/Sema.cpp | 21 +- clang/lib/Sema/SemaAccess.cpp | 43 +- clang/lib/Sema/SemaAvailability.cpp | 4 +- clang/lib/Sema/SemaBPF.cpp | 6 +- clang/lib/Sema/SemaCUDA.cpp | 7 +- clang/lib/Sema/SemaCXXScopeSpec.cpp | 331 +++++----- clang/lib/Sema/SemaCast.cpp | 51 +- clang/lib/Sema/SemaChecking.cpp | 97 +-- clang/lib/Sema/SemaCodeComplete.cpp | 181 +++--- clang/lib/Sema/SemaCoroutine.cpp | 35 +- clang/lib/Sema/SemaDecl.cpp | 591 ++++++++++-------- clang/lib/Sema/SemaDeclAttr.cpp | 23 +- clang/lib/Sema/SemaDeclCXX.cpp | 484 +++++++------- clang/lib/Sema/SemaDeclObjC.cpp | 32 +- clang/lib/Sema/SemaExceptionSpec.cpp | 5 +- clang/lib/Sema/SemaExpr.cpp | 125 ++-- clang/lib/Sema/SemaExprCXX.cpp | 162 ++--- clang/lib/Sema/SemaExprMember.cpp | 7 +- clang/lib/Sema/SemaExprObjC.cpp | 15 +- clang/lib/Sema/SemaFunctionEffects.cpp | 8 +- clang/lib/Sema/SemaHLSL.cpp | 20 +- clang/lib/Sema/SemaInit.cpp | 145 +++-- clang/lib/Sema/SemaLambda.cpp | 8 +- clang/lib/Sema/SemaLookup.cpp | 240 ++++--- clang/lib/Sema/SemaObjC.cpp | 5 +- clang/lib/Sema/SemaObjCProperty.cpp | 4 +- clang/lib/Sema/SemaOpenMP.cpp | 13 +- clang/lib/Sema/SemaOverload.cpp | 181 +++--- clang/lib/Sema/SemaPPC.cpp | 6 +- clang/lib/Sema/SemaSYCL.cpp | 2 +- clang/lib/Sema/SemaStmt.cpp | 40 +- clang/lib/Sema/SemaStmtAsm.cpp | 10 +- clang/lib/Sema/SemaSwift.cpp | 5 +- clang/lib/Sema/SemaTemplate.cpp | 544 ++++++++-------- clang/lib/Sema/SemaTemplateDeduction.cpp | 162 +++-- clang/lib/Sema/SemaTemplateDeductionGuide.cpp | 58 +- clang/lib/Sema/SemaTemplateInstantiate.cpp | 184 +++--- .../lib/Sema/SemaTemplateInstantiateDecl.cpp | 84 ++- clang/lib/Sema/SemaTemplateVariadic.cpp | 39 +- clang/lib/Sema/SemaType.cpp | 184 +++--- clang/lib/Sema/SemaTypeTraits.cpp | 35 +- clang/lib/Sema/UsedDeclVisitor.h | 7 +- clang/lib/Serialization/ASTReader.cpp | 126 ++-- clang/lib/Serialization/ASTReaderDecl.cpp | 28 +- clang/lib/Serialization/ASTWriter.cpp | 113 ++-- clang/lib/Serialization/ASTWriterDecl.cpp | 7 +- .../Serialization/TemplateArgumentHasher.cpp | 8 +- .../Checkers/CallAndMessageChecker.cpp | 2 +- .../Checkers/CastSizeChecker.cpp | 2 +- .../Checkers/DynamicTypePropagation.cpp | 2 +- .../Checkers/EnumCastOutOfRangeChecker.cpp | 3 +- .../Checkers/LLVMConventionsChecker.cpp | 7 +- .../Checkers/NonNullParamChecker.cpp | 4 +- .../NonnullGlobalConstantsChecker.cpp | 5 +- .../NumberObjectConversionChecker.cpp | 11 +- .../Checkers/PaddingChecker.cpp | 16 +- .../Checkers/StdLibraryFunctionsChecker.cpp | 4 +- .../Checkers/WebKit/PtrTypesSemantics.cpp | 33 +- .../WebKit/RefCntblBaseVirtualDtorChecker.cpp | 8 +- clang/lib/StaticAnalyzer/Core/CallEvent.cpp | 11 +- clang/lib/StaticAnalyzer/Core/MemRegion.cpp | 4 +- clang/lib/StaticAnalyzer/Core/RegionStore.cpp | 5 +- clang/lib/StaticAnalyzer/Core/SValBuilder.cpp | 4 +- clang/lib/Tooling/ASTDiff/ASTDiff.cpp | 13 +- clang/lib/Tooling/Refactoring/Lookup.cpp | 14 +- .../Refactoring/Rename/USRLocFinder.cpp | 167 ++--- clang/lib/Tooling/Syntax/BuildTree.cpp | 172 +++-- .../lib/Tooling/Transformer/RangeSelector.cpp | 8 +- clang/tools/libclang/CIndex.cpp | 179 ++---- clang/tools/libclang/CIndexCodeCompletion.cpp | 4 +- clang/tools/libclang/CXCursor.cpp | 8 +- clang/tools/libclang/CXIndexDataConsumer.cpp | 25 +- clang/tools/libclang/CXType.cpp | 36 +- clang/tools/libclang/CursorVisitor.h | 4 +- 173 files changed, 3741 insertions(+), 3504 deletions(-) diff --git a/clang/include/clang/ASTMatchers/ASTMatchers.h b/clang/include/clang/ASTMatchers/ASTMatchers.h index ce5d529e813fd..2fed66622850d 100644 --- a/clang/include/clang/ASTMatchers/ASTMatchers.h +++ b/clang/include/clang/ASTMatchers/ASTMatchers.h @@ -222,6 +222,19 @@ extern const internal::VariadicDynCastAllOfMatcher extern const internal::VariadicDynCastAllOfMatcher typeAliasDecl; +/// \brief Matches shadow declarations introduced into a scope by a +/// (resolved) using declaration. +/// +/// Given +/// \code +/// namespace n { int f; } +/// namespace declToImport { using n::f; } +/// \endcode +/// usingShadowDecl() +/// matches \code f \endcode +extern const internal::VariadicDynCastAllOfMatcher + usingShadowDecl; + /// Matches type alias template declarations. /// /// typeAliasTemplateDecl() matches @@ -3739,7 +3752,7 @@ extern const internal::VariadicOperatorMatcherFunc<1, 1> unless; /// Matcher, Matcher, Matcher, /// Matcher, Matcher, /// Matcher, Matcher, -/// Matcher +/// Matcher, Matcher inline internal::PolymorphicMatcher< internal::HasDeclarationMatcher, void(internal::HasDeclarationSupportedTypes), internal::Matcher> @@ -4374,7 +4387,13 @@ AST_POLYMORPHIC_MATCHER_P(throughUsingDecl, AST_POLYMORPHIC_SUPPORTED_TYPES(DeclRefExpr, UsingType), internal::Matcher, Inner) { - const NamedDecl *FoundDecl = Node.getFoundDecl(); + const NamedDecl *FoundDecl; + if constexpr (std::is_same_v) { + FoundDecl = Node.getDecl(); + } else { + static_assert(std::is_same_v); + FoundDecl = Node.getFoundDecl(); + } if (const UsingShadowDecl *UsingDecl = dyn_cast(FoundDecl)) return Inner.matches(*UsingDecl, Finder, Builder); return false; @@ -7003,37 +7022,6 @@ AST_POLYMORPHIC_MATCHER_P2( InnerMatcher.matches(Args[Index], Finder, Builder); } -/// Matches C or C++ elaborated `TypeLoc`s. -/// -/// Given -/// \code -/// struct s {}; -/// struct s ss; -/// \endcode -/// elaboratedTypeLoc() -/// matches the `TypeLoc` of the variable declaration of `ss`. -extern const internal::VariadicDynCastAllOfMatcher - elaboratedTypeLoc; - -/// Matches elaborated `TypeLoc`s that have a named `TypeLoc` matching -/// `InnerMatcher`. -/// -/// Given -/// \code -/// template -/// class C {}; -/// class C c; -/// -/// class D {}; -/// class D d; -/// \endcode -/// elaboratedTypeLoc(hasNamedTypeLoc(templateSpecializationTypeLoc())); -/// matches the `TypeLoc` of the variable declaration of `c`, but not `d`. -AST_MATCHER_P(ElaboratedTypeLoc, hasNamedTypeLoc, internal::Matcher, - InnerMatcher) { - return InnerMatcher.matches(Node.getNamedTypeLoc(), Finder, Builder); -} - /// Matches type \c bool. /// /// Given @@ -7300,7 +7288,7 @@ extern const AstTypeMatcher decltypeType; AST_TYPE_TRAVERSE_MATCHER(hasDeducedType, getDeducedType, AST_POLYMORPHIC_SUPPORTED_TYPES(AutoType)); -/// Matches \c DecltypeType or \c UsingType nodes to find the underlying type. +/// Matches \c QualType nodes to find the underlying type. /// /// Given /// \code @@ -7310,10 +7298,13 @@ AST_TYPE_TRAVERSE_MATCHER(hasDeducedType, getDeducedType, /// decltypeType(hasUnderlyingType(isInteger())) /// matches the type of "a" /// -/// Usable as: Matcher, Matcher -AST_TYPE_TRAVERSE_MATCHER(hasUnderlyingType, getUnderlyingType, - AST_POLYMORPHIC_SUPPORTED_TYPES(DecltypeType, - UsingType)); +/// Usable as: Matcher +AST_MATCHER_P(Type, hasUnderlyingType, internal::Matcher, Inner) { + QualType QT = Node.getLocallyUnqualifiedSingleStepDesugaredType(); + if (QT == QualType(&Node, 0)) + return false; + return Inner.matches(QT, Finder, Builder); +} /// Matches \c FunctionType nodes. /// @@ -7592,27 +7583,7 @@ extern const AstTypeMatcher recordType; /// and \c c. extern const AstTypeMatcher tagType; -/// Matches types specified with an elaborated type keyword or with a -/// qualified name. -/// -/// Given -/// \code -/// namespace N { -/// namespace M { -/// class D {}; -/// } -/// } -/// class C {}; -/// -/// class C c; -/// N::M::D d; -/// \endcode -/// -/// \c elaboratedType() matches the type of the variable declarations of both -/// \c c and \c d. -extern const AstTypeMatcher elaboratedType; - -/// Matches ElaboratedTypes whose qualifier, a NestedNameSpecifier, +/// Matches Types whose qualifier, a NestedNameSpecifier, /// matches \c InnerMatcher if the qualifier exists. /// /// Given @@ -7627,34 +7598,14 @@ extern const AstTypeMatcher elaboratedType; /// /// \c elaboratedType(hasQualifier(hasPrefix(specifiesNamespace(hasName("N")))) /// matches the type of the variable declaration of \c d. -AST_MATCHER_P(ElaboratedType, hasQualifier, - internal::Matcher, InnerMatcher) { - if (const NestedNameSpecifier *Qualifier = Node.getQualifier()) - return InnerMatcher.matches(*Qualifier, Finder, Builder); +AST_MATCHER_P(Type, hasQualifier, internal::Matcher, + InnerMatcher) { + if (NestedNameSpecifier Qualifier = Node.getPrefix()) + return InnerMatcher.matches(Qualifier, Finder, Builder); return false; } -/// Matches ElaboratedTypes whose named type matches \c InnerMatcher. -/// -/// Given -/// \code -/// namespace N { -/// namespace M { -/// class D {}; -/// } -/// } -/// N::M::D d; -/// \endcode -/// -/// \c elaboratedType(namesType(recordType( -/// hasDeclaration(namedDecl(hasName("D")))))) matches the type of the variable -/// declaration of \c d. -AST_MATCHER_P(ElaboratedType, namesType, internal::Matcher, - InnerMatcher) { - return InnerMatcher.matches(Node.getNamedType(), Finder, Builder); -} - /// Matches types specified through a using declaration. /// /// Given @@ -7823,7 +7774,7 @@ AST_MATCHER_FUNCTION_P_OVERLOAD( /// matches "A::" AST_MATCHER_P(NestedNameSpecifier, specifiesType, internal::Matcher, InnerMatcher) { - if (!Node.getAsType()) + if (Node.getKind() != NestedNameSpecifier::Kind::Type) return false; return InnerMatcher.matches(QualType(Node.getAsType(), 0), Finder, Builder); } @@ -7841,8 +7792,12 @@ AST_MATCHER_P(NestedNameSpecifier, specifiesType, /// matches "A::" AST_MATCHER_P(NestedNameSpecifierLoc, specifiesTypeLoc, internal::Matcher, InnerMatcher) { - return Node && Node.getNestedNameSpecifier()->getAsType() && - InnerMatcher.matches(Node.getTypeLoc(), Finder, Builder); + if (!Node) + return false; + TypeLoc TL = Node.getAsTypeLoc(); + if (!TL) + return false; + return InnerMatcher.matches(TL, Finder, Builder); } /// Matches on the prefix of a \c NestedNameSpecifier. @@ -7857,10 +7812,21 @@ AST_MATCHER_P(NestedNameSpecifierLoc, specifiesTypeLoc, AST_MATCHER_P_OVERLOAD(NestedNameSpecifier, hasPrefix, internal::Matcher, InnerMatcher, 0) { - const NestedNameSpecifier *NextNode = Node.getPrefix(); + NestedNameSpecifier NextNode = std::nullopt; + switch (Node.getKind()) { + case NestedNameSpecifier::Kind::Namespace: + NextNode = Node.getAsNamespaceAndPrefix().Prefix; + break; + case NestedNameSpecifier::Kind::Type: + NextNode = Node.getAsType()->getPrefix(); + break; + default: + break; + } + if (!NextNode) return false; - return InnerMatcher.matches(*NextNode, Finder, Builder); + return InnerMatcher.matches(NextNode, Finder, Builder); } /// Matches on the prefix of a \c NestedNameSpecifierLoc. @@ -7875,7 +7841,12 @@ AST_MATCHER_P_OVERLOAD(NestedNameSpecifier, hasPrefix, AST_MATCHER_P_OVERLOAD(NestedNameSpecifierLoc, hasPrefix, internal::Matcher, InnerMatcher, 1) { - NestedNameSpecifierLoc NextNode = Node.getPrefix(); + NestedNameSpecifierLoc NextNode; + if (TypeLoc TL = Node.getAsTypeLoc()) + NextNode = TL.getPrefix(); + else + NextNode = Node.getAsNamespaceAndPrefix().Prefix; + if (!NextNode) return false; return InnerMatcher.matches(NextNode, Finder, Builder); @@ -7893,9 +7864,13 @@ AST_MATCHER_P_OVERLOAD(NestedNameSpecifierLoc, hasPrefix, /// matches "ns::" AST_MATCHER_P(NestedNameSpecifier, specifiesNamespace, internal::Matcher, InnerMatcher) { - if (!Node.getAsNamespace()) + if (Node.getKind() != NestedNameSpecifier::Kind::Namespace) + return false; + const auto *Namespace = + dyn_cast(Node.getAsNamespaceAndPrefix().Namespace); + if (!Namespace) return false; - return InnerMatcher.matches(*Node.getAsNamespace(), Finder, Builder); + return InnerMatcher.matches(*Namespace, Finder, Builder); } /// Matches attributes. diff --git a/clang/include/clang/ASTMatchers/ASTMatchersInternal.h b/clang/include/clang/ASTMatchers/ASTMatchersInternal.h index 667a044abcef1..399af3d888551 100644 --- a/clang/include/clang/ASTMatchers/ASTMatchersInternal.h +++ b/clang/include/clang/ASTMatchers/ASTMatchersInternal.h @@ -1013,10 +1013,7 @@ class HasDeclarationMatcher : public MatcherInterface { // First, for any types that have a declaration, extract the declaration and // match on it. if (const auto *S = dyn_cast(&Node)) { - return matchesDecl(S->getDecl(), Finder, Builder); - } - if (const auto *S = dyn_cast(&Node)) { - return matchesDecl(S->getDecl(), Finder, Builder); + return matchesDecl(S->getOriginalDecl(), Finder, Builder); } if (const auto *S = dyn_cast(&Node)) { return matchesDecl(S->getDecl(), Finder, Builder); @@ -1027,6 +1024,9 @@ class HasDeclarationMatcher : public MatcherInterface { if (const auto *S = dyn_cast(&Node)) { return matchesDecl(S->getDecl(), Finder, Builder); } + if (const auto *S = dyn_cast(&Node)) { + return matchesDecl(S->getDecl(), Finder, Builder); + } if (const auto *S = dyn_cast(&Node)) { return matchesDecl(S->getInterface(), Finder, Builder); } @@ -1062,12 +1062,6 @@ class HasDeclarationMatcher : public MatcherInterface { Builder); } - // FIXME: We desugar elaborated types. This makes the assumption that users - // do never want to match on whether a type is elaborated - there are - // arguments for both sides; for now, continue desugaring. - if (const auto *S = dyn_cast(&Node)) { - return matchesSpecialized(S->desugar(), Finder, Builder); - } // Similarly types found via using declarations. // These are *usually* meaningless sugar, and this matches the historical // behavior prior to the introduction of UsingType. @@ -1207,8 +1201,8 @@ using AdaptativeDefaultToTypes = /// All types that are supported by HasDeclarationMatcher above. using HasDeclarationSupportedTypes = TypeList; @@ -1785,7 +1779,7 @@ class LocMatcher : public MatcherInterface { private: static DynTypedNode extract(const NestedNameSpecifierLoc &Loc) { - return DynTypedNode::create(*Loc.getNestedNameSpecifier()); + return DynTypedNode::create(Loc.getNestedNameSpecifier()); } }; diff --git a/clang/include/clang/Analysis/FlowSensitive/ASTOps.h b/clang/include/clang/Analysis/FlowSensitive/ASTOps.h index 8c7ee86d15c06..a404b06cd62ca 100644 --- a/clang/include/clang/Analysis/FlowSensitive/ASTOps.h +++ b/clang/include/clang/Analysis/FlowSensitive/ASTOps.h @@ -112,8 +112,14 @@ class AnalysisASTVisitor : public DynamicRecursiveASTVisitor { // fields that are only used in these. // Note: The operand of the `noexcept` operator is an unevaluated operand, but // nevertheless it appears in the Clang CFG, so we don't exclude it here. - bool TraverseDecltypeTypeLoc(DecltypeTypeLoc) override { return true; } - bool TraverseTypeOfExprTypeLoc(TypeOfExprTypeLoc) override { return true; } + bool TraverseDecltypeTypeLoc(DecltypeTypeLoc, + bool TraverseQualifier) override { + return true; + } + bool TraverseTypeOfExprTypeLoc(TypeOfExprTypeLoc, + bool TraverseQualifier) override { + return true; + } bool TraverseCXXTypeidExpr(CXXTypeidExpr *TIE) override { if (TIE->isPotentiallyEvaluated()) return DynamicRecursiveASTVisitor::TraverseCXXTypeidExpr(TIE); diff --git a/clang/include/clang/Basic/DeclNodes.td b/clang/include/clang/Basic/DeclNodes.td index f1ebaf1db3fc0..b4c02949426a1 100644 --- a/clang/include/clang/Basic/DeclNodes.td +++ b/clang/include/clang/Basic/DeclNodes.td @@ -15,81 +15,80 @@ def PragmaComment : DeclNode; def PragmaDetectMismatch : DeclNode; def ExternCContext : DeclNode, DeclContext; def Named : DeclNode; - def Namespace : DeclNode, DeclContext; - def UsingDirective : DeclNode; - def NamespaceAlias : DeclNode; - def Label : DeclNode; - def Type : DeclNode; - def TypedefName : DeclNode; - def Typedef : DeclNode; - def TypeAlias : DeclNode; - def ObjCTypeParam : DeclNode; - def UnresolvedUsingTypename : DeclNode; - def Tag : DeclNode, DeclContext; - def Enum : DeclNode; - def Record : DeclNode; - def CXXRecord : DeclNode; - def ClassTemplateSpecialization : DeclNode; - def ClassTemplatePartialSpecialization - : DeclNode; - def TemplateTypeParm : DeclNode; - def Value : DeclNode; - def EnumConstant : DeclNode; - def UnresolvedUsingValue : DeclNode; - def IndirectField : DeclNode; - def Binding : DeclNode; - def OMPDeclareReduction : DeclNode, DeclContext; - def OMPDeclareMapper : DeclNode, DeclContext; - def MSGuid : DeclNode; - def UnnamedGlobalConstant : DeclNode; - def TemplateParamObject : DeclNode; - def Declarator : DeclNode; - def Field : DeclNode; - def ObjCIvar : DeclNode; - def ObjCAtDefsField : DeclNode; - def MSProperty : DeclNode; - def Function : DeclNode, DeclContext; - def CXXDeductionGuide : DeclNode; - def CXXMethod : DeclNode; - def CXXConstructor : DeclNode; - def CXXDestructor : DeclNode; - def CXXConversion : DeclNode; - def Var : DeclNode; - def VarTemplateSpecialization : DeclNode; - def VarTemplatePartialSpecialization - : DeclNode; - def ImplicitParam : DeclNode; - def ParmVar : DeclNode; - def Decomposition : DeclNode; - def OMPCapturedExpr : DeclNode; - def NonTypeTemplateParm : DeclNode; - def Template : DeclNode; - def RedeclarableTemplate : DeclNode; - def FunctionTemplate : DeclNode; - def ClassTemplate : DeclNode; - def VarTemplate : DeclNode; - def TypeAliasTemplate : DeclNode; - def TemplateTemplateParm : DeclNode