llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-backend-sparc Author: Matheus Izvekov (mizvekov) <details> <summary>Changes</summary> Other changes Second patch in the series starting at https://github.com/llvm/llvm-project/pull/147835 --- Patch is 800.27 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/148012.diff 173 Files Affected: - (modified) clang/include/clang/ASTMatchers/ASTMatchers.h (+66-91) - (modified) clang/include/clang/ASTMatchers/ASTMatchersInternal.h (+7-13) - (modified) clang/include/clang/Analysis/FlowSensitive/ASTOps.h (+8-2) - (modified) clang/include/clang/Basic/DeclNodes.td (+74-75) - (modified) clang/include/clang/Basic/TypeNodes.td (+1-2) - (modified) clang/include/clang/ExtractAPI/DeclarationFragments.h (+2-3) - (modified) clang/include/clang/Sema/CodeCompleteConsumer.h (+4-3) - (modified) clang/include/clang/Sema/DeclSpec.h (+9-39) - (modified) clang/include/clang/Sema/HeuristicResolver.h (+1-2) - (modified) clang/include/clang/Sema/ParsedTemplate.h (+16-10) - (modified) clang/include/clang/Sema/Sema.h (+17-21) - (modified) clang/include/clang/Sema/SemaInternal.h (+4-4) - (modified) clang/include/clang/Sema/TypoCorrection.h (+15-14) - (modified) clang/include/clang/Serialization/ASTRecordReader.h (+1-1) - (modified) clang/include/clang/Serialization/ASTRecordWriter.h (+2-3) - (modified) clang/include/clang/Serialization/TypeBitCodes.def (-1) - (modified) clang/include/clang/Tooling/Refactoring/Lookup.h (+1-2) - (modified) clang/include/clang/Tooling/Refactoring/RecursiveSymbolVisitor.h (+9-6) - (modified) clang/lib/ASTMatchers/ASTMatchFinder.cpp (+63-52) - (modified) clang/lib/ASTMatchers/ASTMatchersInternal.cpp (+2-3) - (modified) clang/lib/ASTMatchers/Dynamic/Registry.cpp (+1-4) - (modified) clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp (+4-2) - (modified) clang/lib/Analysis/ThreadSafety.cpp (+3-1) - (modified) clang/lib/Analysis/ThreadSafetyCommon.cpp (+2-2) - (modified) clang/lib/Analysis/UnsafeBufferUsage.cpp (+8-4) - (modified) clang/lib/CodeGen/ABIInfo.cpp (+1-1) - (modified) clang/lib/CodeGen/ABIInfoImpl.cpp (+18-18) - (modified) clang/lib/CodeGen/CGBlocks.cpp (+2-1) - (modified) clang/lib/CodeGen/CGCUDANV.cpp (+2-1) - (modified) clang/lib/CodeGen/CGCXX.cpp (+10-9) - (modified) clang/lib/CodeGen/CGCXXABI.cpp (+2-2) - (modified) clang/lib/CodeGen/CGCall.cpp (+16-11) - (modified) clang/lib/CodeGen/CGClass.cpp (+56-39) - (modified) clang/lib/CodeGen/CGDebugInfo.cpp (+65-62) - (modified) clang/lib/CodeGen/CGDecl.cpp (+9-4) - (modified) clang/lib/CodeGen/CGExpr.cpp (+29-16) - (modified) clang/lib/CodeGen/CGExprAgg.cpp (+17-8) - (modified) clang/lib/CodeGen/CGExprCXX.cpp (+20-17) - (modified) clang/lib/CodeGen/CGExprConstant.cpp (+21-8) - (modified) clang/lib/CodeGen/CGExprScalar.cpp (+7-4) - (modified) clang/lib/CodeGen/CGHLSLRuntime.cpp (+1-2) - (modified) clang/lib/CodeGen/CGNonTrivialStruct.cpp (+6-3) - (modified) clang/lib/CodeGen/CGObjC.cpp (+3-1) - (modified) clang/lib/CodeGen/CGObjCMac.cpp (+6-5) - (modified) clang/lib/CodeGen/CGObjCRuntime.cpp (+3-1) - (modified) clang/lib/CodeGen/CGOpenMPRuntime.cpp (+21-14) - (modified) clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp (+2-2) - (modified) clang/lib/CodeGen/CGPointerAuth.cpp (+1-1) - (modified) clang/lib/CodeGen/CGStmt.cpp (+2-2) - (modified) clang/lib/CodeGen/CGStmtOpenMP.cpp (+6-3) - (modified) clang/lib/CodeGen/CGVTables.cpp (+4-4) - (modified) clang/lib/CodeGen/CodeGenFunction.cpp (+3-5) - (modified) clang/lib/CodeGen/CodeGenFunction.h (+3-3) - (modified) clang/lib/CodeGen/CodeGenModule.cpp (+17-11) - (modified) clang/lib/CodeGen/CodeGenTBAA.cpp (+7-6) - (modified) clang/lib/CodeGen/CodeGenTypes.cpp (+20-13) - (modified) clang/lib/CodeGen/HLSLBufferLayoutBuilder.cpp (+2-1) - (modified) clang/lib/CodeGen/ItaniumCXXABI.cpp (+40-28) - (modified) clang/lib/CodeGen/MicrosoftCXXABI.cpp (+13-12) - (modified) clang/lib/CodeGen/SwiftCallingConv.cpp (+5-4) - (modified) clang/lib/CodeGen/Targets/AArch64.cpp (+5-4) - (modified) clang/lib/CodeGen/Targets/AMDGPU.cpp (+3-3) - (modified) clang/lib/CodeGen/Targets/ARC.cpp (+3-2) - (modified) clang/lib/CodeGen/Targets/ARM.cpp (+5-4) - (modified) clang/lib/CodeGen/Targets/BPF.cpp (+3-2) - (modified) clang/lib/CodeGen/Targets/CSKY.cpp (+1-1) - (modified) clang/lib/CodeGen/Targets/Hexagon.cpp (+3-2) - (modified) clang/lib/CodeGen/Targets/Lanai.cpp (+3-2) - (modified) clang/lib/CodeGen/Targets/LoongArch.cpp (+6-4) - (modified) clang/lib/CodeGen/Targets/Mips.cpp (+4-4) - (modified) clang/lib/CodeGen/Targets/NVPTX.cpp (+3-3) - (modified) clang/lib/CodeGen/Targets/PNaCl.cpp (+2-2) - (modified) clang/lib/CodeGen/Targets/PPC.cpp (+5-3) - (modified) clang/lib/CodeGen/Targets/RISCV.cpp (+6-4) - (modified) clang/lib/CodeGen/Targets/SPIR.cpp (+3-3) - (modified) clang/lib/CodeGen/Targets/Sparc.cpp (+1-1) - (modified) clang/lib/CodeGen/Targets/SystemZ.cpp (+4-4) - (modified) clang/lib/CodeGen/Targets/WebAssembly.cpp (+2-1) - (modified) clang/lib/CodeGen/Targets/X86.cpp (+35-24) - (modified) clang/lib/CodeGen/Targets/XCore.cpp (+2-2) - (modified) clang/lib/ExtractAPI/DeclarationFragments.cpp (+57-60) - (modified) clang/lib/ExtractAPI/TypedefUnderlyingTypeResolver.cpp (+1-1) - (modified) clang/lib/Frontend/ASTConsumers.cpp (+5-2) - (modified) clang/lib/Frontend/ASTUnit.cpp (+1-1) - (modified) clang/lib/Index/IndexTypeSourceInfo.cpp (+20-32) - (modified) clang/lib/Index/USRGeneration.cpp (+9-9) - (modified) clang/lib/InstallAPI/Visitor.cpp (+4-4) - (modified) clang/lib/Interpreter/InterpreterValuePrinter.cpp (+1-1) - (modified) clang/lib/Interpreter/Value.cpp (+3-3) - (modified) clang/lib/Parse/ParseDeclCXX.cpp (+1-2) - (modified) clang/lib/Parse/ParseExprCXX.cpp (+8-5) - (modified) clang/lib/Parse/ParseTemplate.cpp (+17-12) - (modified) clang/lib/Parse/ParseTentative.cpp (+1-1) - (modified) clang/lib/Parse/Parser.cpp (+5-4) - (modified) clang/lib/Sema/AnalysisBasedWarnings.cpp (+4-7) - (modified) clang/lib/Sema/DeclSpec.cpp (+5-31) - (modified) clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp (+4-19) - (modified) clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.h (+1-1) - (modified) clang/lib/Sema/HeuristicResolver.cpp (+23-27) - (modified) clang/lib/Sema/Sema.cpp (+12-9) - (modified) clang/lib/Sema/SemaAccess.cpp (+21-22) - (modified) clang/lib/Sema/SemaAvailability.cpp (+2-2) - (modified) clang/lib/Sema/SemaBPF.cpp (+3-3) - (modified) clang/lib/Sema/SemaCUDA.cpp (+5-2) - (modified) clang/lib/Sema/SemaCXXScopeSpec.cpp (+184-147) - (modified) clang/lib/Sema/SemaCast.cpp (+25-26) - (modified) clang/lib/Sema/SemaChecking.cpp (+62-35) - (modified) clang/lib/Sema/SemaCodeComplete.cpp (+102-79) - (modified) clang/lib/Sema/SemaCoroutine.cpp (+16-19) - (modified) clang/lib/Sema/SemaDecl.cpp (+337-254) - (modified) clang/lib/Sema/SemaDeclAttr.cpp (+15-8) - (modified) clang/lib/Sema/SemaDeclCXX.cpp (+246-238) - (modified) clang/lib/Sema/SemaDeclObjC.cpp (+20-12) - (modified) clang/lib/Sema/SemaExceptionSpec.cpp (+3-2) - (modified) clang/lib/Sema/SemaExpr.cpp (+70-55) - (modified) clang/lib/Sema/SemaExprCXX.cpp (+85-77) - (modified) clang/lib/Sema/SemaExprMember.cpp (+4-3) - (modified) clang/lib/Sema/SemaExprObjC.cpp (+8-7) - (modified) clang/lib/Sema/SemaFunctionEffects.cpp (+6-2) - (modified) clang/lib/Sema/SemaHLSL.cpp (+11-9) - (modified) clang/lib/Sema/SemaInit.cpp (+78-67) - (modified) clang/lib/Sema/SemaLambda.cpp (+4-4) - (modified) clang/lib/Sema/SemaLookup.cpp (+152-88) - (modified) clang/lib/Sema/SemaObjC.cpp (+3-2) - (modified) clang/lib/Sema/SemaObjCProperty.cpp (+3-1) - (modified) clang/lib/Sema/SemaOpenMP.cpp (+8-5) - (modified) clang/lib/Sema/SemaOverload.cpp (+96-85) - (modified) clang/lib/Sema/SemaPPC.cpp (+4-2) - (modified) clang/lib/Sema/SemaSYCL.cpp (+1-1) - (modified) clang/lib/Sema/SemaStmt.cpp (+23-17) - (modified) clang/lib/Sema/SemaStmtAsm.cpp (+6-4) - (modified) clang/lib/Sema/SemaSwift.cpp (+3-2) - (modified) clang/lib/Sema/SemaTemplate.cpp (+258-286) - (modified) clang/lib/Sema/SemaTemplateDeduction.cpp (+71-91) - (modified) clang/lib/Sema/SemaTemplateDeductionGuide.cpp (+32-26) - (modified) clang/lib/Sema/SemaTemplateInstantiate.cpp (+75-109) - (modified) clang/lib/Sema/SemaTemplateInstantiateDecl.cpp (+37-47) - (modified) clang/lib/Sema/SemaTemplateVariadic.cpp (+21-18) - (modified) clang/lib/Sema/SemaType.cpp (+110-74) - (modified) clang/lib/Sema/SemaTypeTraits.cpp (+16-19) - (modified) clang/lib/Sema/UsedDeclVisitor.h (+4-3) - (modified) clang/lib/Serialization/ASTReader.cpp (+58-68) - (modified) clang/lib/Serialization/ASTReaderDecl.cpp (+8-20) - (modified) clang/lib/Serialization/ASTWriter.cpp (+58-55) - (modified) clang/lib/Serialization/ASTWriterDecl.cpp (+3-4) - (modified) clang/lib/Serialization/TemplateArgumentHasher.cpp (+2-6) - (modified) clang/lib/StaticAnalyzer/Checkers/CallAndMessageChecker.cpp (+1-1) - (modified) clang/lib/StaticAnalyzer/Checkers/CastSizeChecker.cpp (+1-1) - (modified) clang/lib/StaticAnalyzer/Checkers/DynamicTypePropagation.cpp (+1-1) - (modified) clang/lib/StaticAnalyzer/Checkers/EnumCastOutOfRangeChecker.cpp (+2-1) - (modified) clang/lib/StaticAnalyzer/Checkers/LLVMConventionsChecker.cpp (+2-5) - (modified) clang/lib/StaticAnalyzer/Checkers/NonNullParamChecker.cpp (+3-1) - (modified) clang/lib/StaticAnalyzer/Checkers/NonnullGlobalConstantsChecker.cpp (+1-4) - (modified) clang/lib/StaticAnalyzer/Checkers/NumberObjectConversionChecker.cpp (+5-6) - (modified) clang/lib/StaticAnalyzer/Checkers/PaddingChecker.cpp (+7-9) - (modified) clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp (+2-2) - (modified) clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp (+10-23) - (modified) clang/lib/StaticAnalyzer/Checkers/WebKit/RefCntblBaseVirtualDtorChecker.cpp (+2-6) - (modified) clang/lib/StaticAnalyzer/Core/CallEvent.cpp (+7-4) - (modified) clang/lib/StaticAnalyzer/Core/MemRegion.cpp (+2-2) - (modified) clang/lib/StaticAnalyzer/Core/RegionStore.cpp (+3-2) - (modified) clang/lib/StaticAnalyzer/Core/SValBuilder.cpp (+2-2) - (modified) clang/lib/Tooling/ASTDiff/ASTDiff.cpp (+7-6) - (modified) clang/lib/Tooling/Refactoring/Lookup.cpp (+2-12) - (modified) clang/lib/Tooling/Refactoring/Rename/USRLocFinder.cpp (+92-75) - (modified) clang/lib/Tooling/Syntax/BuildTree.cpp (+85-87) - (modified) clang/lib/Tooling/Transformer/RangeSelector.cpp (+2-6) - (modified) clang/tools/libclang/CIndex.cpp (+64-115) - (modified) clang/tools/libclang/CIndexCodeCompletion.cpp (+2-2) - (modified) clang/tools/libclang/CXCursor.cpp (+1-7) - (modified) clang/tools/libclang/CXIndexDataConsumer.cpp (+17-8) - (modified) clang/tools/libclang/CXType.cpp (+16-20) - (modified) clang/tools/libclang/CursorVisitor.h (+2-2) ``````````diff diff --git a/clang/include/clang/ASTMatchers/ASTMatchers.h b/clang/include/clang/ASTMatchers/ASTMatchers.h index bae004896c11f..599155c5c9950 100644 --- a/clang/include/clang/ASTMatchers/ASTMatchers.h +++ b/clang/include/clang/ASTMatchers/ASTMatchers.h @@ -221,6 +221,19 @@ extern const internal::VariadicDynCastAllOfMatcher<Decl, TypedefNameDecl> extern const internal::VariadicDynCastAllOfMatcher<Decl, TypeAliasDecl> 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<Decl, UsingShadowDecl> + usingShadowDecl; + /// Matches type alias template declarations. /// /// typeAliasTemplateDecl() matches @@ -3718,7 +3731,7 @@ extern const internal::VariadicOperatorMatcherFunc<1, 1> unless; /// Matcher<MemberExpr>, Matcher<QualType>, Matcher<RecordType>, /// Matcher<TagType>, Matcher<TemplateSpecializationType>, /// Matcher<TemplateTypeParmType>, Matcher<TypedefType>, -/// Matcher<UnresolvedUsingType> +/// Matcher<UnresolvedUsingType>, Matcher<UsingType> inline internal::PolymorphicMatcher< internal::HasDeclarationMatcher, void(internal::HasDeclarationSupportedTypes), internal::Matcher<Decl>> @@ -4353,7 +4366,13 @@ AST_POLYMORPHIC_MATCHER_P(throughUsingDecl, AST_POLYMORPHIC_SUPPORTED_TYPES(DeclRefExpr, UsingType), internal::Matcher<UsingShadowDecl>, Inner) { - const NamedDecl *FoundDecl = Node.getFoundDecl(); + const NamedDecl *FoundDecl; + if constexpr (std::is_same_v<NodeType, UsingType>) { + FoundDecl = Node.getDecl(); + } else { + static_assert(std::is_same_v<NodeType, DeclRefExpr>); + FoundDecl = Node.getFoundDecl(); + } if (const UsingShadowDecl *UsingDecl = dyn_cast<UsingShadowDecl>(FoundDecl)) return Inner.matches(*UsingDecl, Finder, Builder); return false; @@ -6982,37 +7001,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<TypeLoc, ElaboratedTypeLoc> - elaboratedTypeLoc; - -/// Matches elaborated `TypeLoc`s that have a named `TypeLoc` matching -/// `InnerMatcher`. -/// -/// Given -/// \code -/// template <typename T> -/// class C {}; -/// class C<int> 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<TypeLoc>, - InnerMatcher) { - return InnerMatcher.matches(Node.getNamedTypeLoc(), Finder, Builder); -} - /// Matches type \c bool. /// /// Given @@ -7279,7 +7267,7 @@ extern const AstTypeMatcher<DecltypeType> 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 @@ -7289,10 +7277,13 @@ AST_TYPE_TRAVERSE_MATCHER(hasDeducedType, getDeducedType, /// decltypeType(hasUnderlyingType(isInteger())) /// matches the type of "a" /// -/// Usable as: Matcher<DecltypeType>, Matcher<UsingType> -AST_TYPE_TRAVERSE_MATCHER(hasUnderlyingType, getUnderlyingType, - AST_POLYMORPHIC_SUPPORTED_TYPES(DecltypeType, - UsingType)); +/// Usable as: Matcher<QualType> +AST_MATCHER_P(Type, hasUnderlyingType, internal::Matcher<QualType>, Inner) { + QualType QT = Node.getLocallyUnqualifiedSingleStepDesugaredType(); + if (QT == QualType(&Node, 0)) + return false; + return Inner.matches(QT, Finder, Builder); +} /// Matches \c FunctionType nodes. /// @@ -7571,27 +7562,7 @@ extern const AstTypeMatcher<RecordType> recordType; /// and \c c. extern const AstTypeMatcher<TagType> 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> elaboratedType; - -/// Matches ElaboratedTypes whose qualifier, a NestedNameSpecifier, +/// Matches Types whose qualifier, a NestedNameSpecifier, /// matches \c InnerMatcher if the qualifier exists. /// /// Given @@ -7606,34 +7577,14 @@ extern const AstTypeMatcher<ElaboratedType> 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<NestedNameSpecifier>, InnerMatcher) { - if (const NestedNameSpecifier *Qualifier = Node.getQualifier()) - return InnerMatcher.matches(*Qualifier, Finder, Builder); +AST_MATCHER_P(Type, hasQualifier, internal::Matcher<NestedNameSpecifier>, + 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<QualType>, - InnerMatcher) { - return InnerMatcher.matches(Node.getNamedType(), Finder, Builder); -} - /// Matches types specified through a using declaration. /// /// Given @@ -7802,7 +7753,7 @@ AST_MATCHER_FUNCTION_P_OVERLOAD( /// matches "A::" AST_MATCHER_P(NestedNameSpecifier, specifiesType, internal::Matcher<QualType>, InnerMatcher) { - if (!Node.getAsType()) + if (Node.getKind() != NestedNameSpecifier::Kind::Type) return false; return InnerMatcher.matches(QualType(Node.getAsType(), 0), Finder, Builder); } @@ -7820,8 +7771,12 @@ AST_MATCHER_P(NestedNameSpecifier, specifiesType, /// matches "A::" AST_MATCHER_P(NestedNameSpecifierLoc, specifiesTypeLoc, internal::Matcher<TypeLoc>, 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. @@ -7836,10 +7791,21 @@ AST_MATCHER_P(NestedNameSpecifierLoc, specifiesTypeLoc, AST_MATCHER_P_OVERLOAD(NestedNameSpecifier, hasPrefix, internal::Matcher<NestedNameSpecifier>, 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. @@ -7854,7 +7820,12 @@ AST_MATCHER_P_OVERLOAD(NestedNameSpecifier, hasPrefix, AST_MATCHER_P_OVERLOAD(NestedNameSpecifierLoc, hasPrefix, internal::Matcher<NestedNameSpecifierLoc>, 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); @@ -7872,9 +7843,13 @@ AST_MATCHER_P_OVERLOAD(NestedNameSpecifierLoc, hasPrefix, /// matches "ns::" AST_MATCHER_P(NestedNameSpecifier, specifiesNamespace, internal::Matcher<NamespaceDecl>, InnerMatcher) { - if (!Node.getAsNamespace()) + if (Node.getKind() != NestedNameSpecifier::Kind::Namespace) + return false; + const auto *Namespace = + dyn_cast<NamespaceDecl>(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<T> { // First, for any types that have a declaration, extract the declaration and // match on it. if (const auto *S = dyn_cast<TagType>(&Node)) { - return matchesDecl(S->getDecl(), Finder, Builder); - } - if (const auto *S = dyn_cast<InjectedClassNameType>(&Node)) { - return matchesDecl(S->getDecl(), Finder, Builder); + return matchesDecl(S->getOriginalDecl(), Finder, Builder); } if (const auto *S = dyn_cast<TemplateTypeParmType>(&Node)) { return matchesDecl(S->getDecl(), Finder, Builder); @@ -1027,6 +1024,9 @@ class HasDeclarationMatcher : public MatcherInterface<T> { if (const auto *S = dyn_cast<UnresolvedUsingType>(&Node)) { return matchesDecl(S->getDecl(), Finder, Builder); } + if (const auto *S = dyn_cast<UsingType>(&Node)) { + return matchesDecl(S->getDecl(), Finder, Builder); + } if (const auto *S = dyn_cast<ObjCObjectType>(&Node)) { return matchesDecl(S->getInterface(), Finder, Builder); } @@ -1062,12 +1062,6 @@ class HasDeclarationMatcher : public MatcherInterface<T> { 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<ElaboratedType>(&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<CallExpr, CXXConstructExpr, CXXNewExpr, DeclRefExpr, EnumType, - ElaboratedType, InjectedClassNameType, LabelStmt, AddrLabelExpr, - MemberExpr, QualType, RecordType, TagType, + InjectedClassNameType, LabelStmt, AddrLabelExpr, MemberExpr, + QualType, RecordType, TagType, UsingType, TemplateSpecializationType, TemplateTypeParmType, TypedefType, UnresolvedUsingType, ObjCIvarRefExpr, ObjCInterfaceDecl>; @@ -1785,7 +1779,7 @@ class LocMatcher : public MatcherInterface<TLoc> { 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<Decl>; def PragmaDetectMismatch : DeclNode<Decl>; def ExternCContext : DeclNode<Decl>, DeclContext; def Named : DeclNode<Decl, "named declarations", 1>; - def Namespace : DeclNode<Named, "namespaces">, DeclContext; - def UsingDirective : DeclNode<Named>; - def NamespaceAlias : DeclNode<Named>; - def Label : DeclNode<Named, "labels">; - def Type : DeclNode<Named, "types", 1>; - def TypedefName : DeclNode<Type, "typedefs", 1>; - def Typedef : DeclNode<TypedefName>; - def TypeAlias : DeclNode<TypedefName>; - def ObjCTypeParam : DeclNode<TypedefName>; - def UnresolvedUsingTypename : DeclNode<Type>; - def Tag : DeclNode<Type, "tag types", 1>, DeclContext; - def Enum : DeclNode<Tag, "enums">; - def Record : DeclNode<Tag, "structs, unions, classes">; - def CXXRecord : DeclNode<Record, "classes">; - def ClassTemplateSpecialization : DeclNode<CXXRecord>; - def ClassTemplatePartialSpecialization - : DeclNode<ClassTemplateSpecialization>; - def TemplateTypeParm : DeclNode<Type>; - def Value : DeclNode<Named, "value declarations", 1>; - def EnumConstant : DeclNode<Value, "enumerators">; - def UnresolvedUsingValue : DeclNode<Value>; - def IndirectField : DeclNode<Value>; - def Binding : DeclNode<Value>; - def OMPDeclareReduction : DeclNode<Value>, DeclContext; - def OMPDeclareMapper : DeclNode<Value>, DeclContext; - def MSGuid : DeclNode<Value>; - def UnnamedGlobalConstant : DeclNode<Value>; - def TemplateParamObject : DeclNode<Value>; - def Declarator : DeclNode<Value, "declarators", 1>; - def Field : DeclNode<Declarator, "non-static data members">; - def ObjCIvar : DeclNode<Field>; - def ObjCAtDefsField : DeclNode<Field>; - def MSProperty : DeclNode<Declarator>; - def Function : DeclNode<Declarator, "functions">, DeclContext; - def CXXDeductionGuide : DeclNode<Function>; - def CXXMethod : DeclNode<Function>; - def CXXConstructor : DeclNode<CXXMethod>; - def CXXDestructor : DeclNode<CXXMethod>; - def CXXConversion : DeclNode<CXXMethod>; - def Var : DeclNode<Declarator, "variables">; - def VarTemplateSpecialization : DeclNode<Var>; - def VarTemplatePartialSpecialization - : DeclNode<VarTemplateSpecialization>; - def ImplicitParam : DeclNode<Var>; - def ParmVar : DeclNode<Var, "parameters">; - def Decomposition : DeclNode<Var>; - def OMPCapturedExpr : DeclNode<Var>; - def NonTypeTemplateParm : DeclNode<Declarator>; - def Template : DeclNode<Named, "templates", 1>; - def RedeclarableTemplate : DeclNode<Template, "redeclarable templates", 1>; - def FunctionTemplate : DeclNode<RedeclarableTemplate>; - def ClassTemplate : DeclNode<RedeclarableTemplate>; - def VarTemplate : DeclNode<RedeclarableTemplate>; - def TypeAliasTemplate : DeclNode<RedeclarableTemplate>; - def TemplateTemplateParm : DeclNode<Template>; - def BuiltinTemplate : DeclNode<Template>; - def Concept : DeclNode<Template>; - def BaseUsing : DeclNode<Named, "", 1>; - def Using : DeclNode<BaseUsing>; - def UsingEnum : DeclNode<BaseUsing>; - def UsingPack : DeclNode<Named>; - def UsingShadow : DeclNode<Named>; - def ConstructorUsingShadow : DeclNode<UsingShadow>; - def UnresolvedUsingIfExists : DeclNode<Named>; - def ObjCMethod : DeclNode<Named, "Objective-C methods">, DeclContext; - def ObjCContainer : DeclNode<Named, "Objective-C containers", 1>, DeclContext; - def ObjCCategory : DeclNode<ObjCContainer>; - def ObjCProtocol : DeclNode<ObjCContainer, "Objective-C protocols">; - def ObjCInterface : DeclNode<ObjCContainer, "Objective-C interfaces">; - def ObjCImpl - : DeclNode<ObjCContainer, "Objective-C implementation declarations", 1>; - def ObjCCategoryImpl : DeclNode<ObjCImpl>; - def ObjCImplementation : DeclNode<ObjCImpl>; - def ObjCProperty : DeclNode<Named, "Objective-C properties">; - def ObjCCompatibleAlias : DeclNode<Named>; +def NamespaceBase : DeclNode<Named, "namespace declarations", 1>; +def Namespace : DeclNode<NamespaceBase, "namespaces">, DeclContext; +def NamespaceAlias : DeclNode<NamespaceBase>; +def UsingDirective : DeclNode<Named>; +def Label : DeclNode<Named, "labels">; +def Type : DeclNode<Named, "types", 1>; +def TypedefName : DeclNode<Type, "typedefs", 1>; +def Typedef : DeclNode<TypedefName>; +def TypeAlias : DeclNode<TypedefName>; +def ObjCTypeParam : DeclNode<TypedefName>; +def UnresolvedUsingTypename : DeclNode<Type>; +def Tag : DeclNode<Type, "tag types", 1>, DeclContext; +def Enum : DeclNode<Tag, "enums">; +def Record : DeclNode<Tag, "structs, unions, classes">; +def CXXRecord : DeclNode<Record, "classes">; +def ClassTemplateSpecialization : DeclNode<CXXRecord>; +def ClassTemplatePartialSpecialization : DeclNode<ClassTemplateSpecialization>; +def TemplateTypeParm : DeclNode<Type>; +def Value : DeclNode<Named, "value declarations", 1>; +def EnumConstant : DeclNode<Value, "enumerators">; +def UnresolvedUsingValue : DeclNode<Value>; +def IndirectField : DeclNode<Value>; +def Binding : DeclNode<Value>; +def OMPDeclareReduction : DeclNode<Value>, DeclContext; +def OMPDeclareMapper : DeclNode<Value>, DeclContext; +def MSGuid : DeclNode<Value>; +def UnnamedGlobalConstant : DeclNode<Value>; +def TemplateParamObject : DeclNode<Value>; +def Declarator : DeclNode<Value, "declarators", 1>; +def Field : DeclNode<Declarator, "non-static data members">; +def ObjCIvar : DeclNode<Field>; +def ObjCAtDefsField : DeclNode<Field>; +def MSProperty : DeclNode<Declarator>; +def Function : DeclNode<Declarator, "functions">, DeclContext; +def CXXDeductionGuide : DeclNode<Function>; +def CXXMethod : DeclNode<Function>; +def CXXConstructor : DeclNode<CXXMethod>; +def CXXDestructor : DeclNode<CXXMethod>; +def CXXConversion : DeclNode<CXXMethod>; +def Var : DeclNode<Declarator, "variables">; +def VarTemplateSpecialization : DeclNode<Var>; +def VarTemplatePartialSpecialization : DeclNode<VarTemplateSpecialization>; +def ImplicitParam : DeclNode<Var>; +def ParmVar : DeclNode<Var, "parameters">; +def Decomposition : DeclNode<Var>; +def OMPCapturedExpr : DeclNode<Var>; +def NonTypeTemplateParm : DeclNode<Declarator>; +def Template : DeclNode<Named, "templates", 1>; +def RedeclarableTemplate : DeclNode<Template, "redeclarable templates", 1>; +def FunctionTemplate : DeclNode<RedeclarableTemplate>; +def ClassTemplate : DeclNode<RedeclarableTemplate>; +def VarTemplate : DeclNode<R... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/148012 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits