From: David Blaikie Date: Wed, 15 Nov 2017 16:52:12 +0000 (+0000) Subject: ASTMatchers.h: Fix ODR violations by avoiding internal linkage variables in headers X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0b7fe98286274f0bfbc4f8335208c5e01217d019;p=clang ASTMatchers.h: Fix ODR violations by avoiding internal linkage variables in headers Internal linkage variables ODR referenced from inline functions create ODR violations (the same inline function ends up having different definitions in each TU, since it references different variables - rather than one definition). This also happens to break modular code generation - so this is the last fix to allow clang to compile with modular code generation. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@318304 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/ASTMatchers/ASTMatchers.h b/include/clang/ASTMatchers/ASTMatchers.h index b91e4bb6b7..e4dafece78 100644 --- a/include/clang/ASTMatchers/ASTMatchers.h +++ b/include/clang/ASTMatchers/ASTMatchers.h @@ -178,7 +178,7 @@ inline internal::TrueMatcher anything() { return internal::TrueMatcher(); } /// \endcode /// decl(hasDeclContext(translationUnitDecl())) /// matches "int X", but not "int Y". -const internal::VariadicDynCastAllOfMatcher +extern const internal::VariadicDynCastAllOfMatcher translationUnitDecl; /// \brief Matches typedef declarations. @@ -190,7 +190,8 @@ const internal::VariadicDynCastAllOfMatcher /// \endcode /// typedefDecl() /// matches "typedef int X", but not "using Y = int" -const internal::VariadicDynCastAllOfMatcher typedefDecl; +extern const internal::VariadicDynCastAllOfMatcher + typedefDecl; /// \brief Matches typedef name declarations. /// @@ -201,7 +202,7 @@ const internal::VariadicDynCastAllOfMatcher typedefDecl; /// \endcode /// typedefNameDecl() /// matches "typedef int X" and "using Y = int" -const internal::VariadicDynCastAllOfMatcher +extern const internal::VariadicDynCastAllOfMatcher typedefNameDecl; /// \brief Matches type alias declarations. @@ -213,7 +214,8 @@ const internal::VariadicDynCastAllOfMatcher /// \endcode /// typeAliasDecl() /// matches "using Y = int", but not "typedef int X" -const internal::VariadicDynCastAllOfMatcher typeAliasDecl; +extern const internal::VariadicDynCastAllOfMatcher + typeAliasDecl; /// \brief Matches type alias template declarations. /// @@ -222,7 +224,7 @@ const internal::VariadicDynCastAllOfMatcher typeAliasDecl; /// template /// using Y = X; /// \endcode -const internal::VariadicDynCastAllOfMatcher +extern const internal::VariadicDynCastAllOfMatcher typeAliasTemplateDecl; /// \brief Matches AST nodes that were expanded within the main-file. @@ -313,7 +315,7 @@ AST_POLYMORPHIC_MATCHER_P(isExpansionInFileMatching, /// friend X; /// }; /// \endcode -const internal::VariadicAllOfMatcher decl; +extern const internal::VariadicAllOfMatcher decl; /// \brief Matches a declaration of a linkage specification. /// @@ -323,7 +325,7 @@ const internal::VariadicAllOfMatcher decl; /// \endcode /// linkageSpecDecl() /// matches "extern "C" {}" -const internal::VariadicDynCastAllOfMatcher +extern const internal::VariadicDynCastAllOfMatcher linkageSpecDecl; /// \brief Matches a declaration of anything that could have a name. @@ -337,7 +339,7 @@ const internal::VariadicDynCastAllOfMatcher /// } U; /// }; /// \endcode -const internal::VariadicDynCastAllOfMatcher namedDecl; +extern const internal::VariadicDynCastAllOfMatcher namedDecl; /// \brief Matches a declaration of label. /// @@ -348,7 +350,7 @@ const internal::VariadicDynCastAllOfMatcher namedDecl; /// \endcode /// labelDecl() /// matches 'FOO:' -const internal::VariadicDynCastAllOfMatcher labelDecl; +extern const internal::VariadicDynCastAllOfMatcher labelDecl; /// \brief Matches a declaration of a namespace. /// @@ -359,7 +361,8 @@ const internal::VariadicDynCastAllOfMatcher labelDecl; /// \endcode /// namespaceDecl() /// matches "namespace {}" and "namespace test {}" -const internal::VariadicDynCastAllOfMatcher namespaceDecl; +extern const internal::VariadicDynCastAllOfMatcher + namespaceDecl; /// \brief Matches a declaration of a namespace alias. /// @@ -370,7 +373,7 @@ const internal::VariadicDynCastAllOfMatcher namespaceDecl; /// \endcode /// namespaceAliasDecl() /// matches "namespace alias" but not "namespace test" -const internal::VariadicDynCastAllOfMatcher +extern const internal::VariadicDynCastAllOfMatcher namespaceAliasDecl; /// \brief Matches class, struct, and union declarations. @@ -382,9 +385,7 @@ const internal::VariadicDynCastAllOfMatcher /// struct S {}; /// union U {}; /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Decl, - RecordDecl> recordDecl; +extern const internal::VariadicDynCastAllOfMatcher recordDecl; /// \brief Matches C++ class declarations. /// @@ -393,9 +394,8 @@ const internal::VariadicDynCastAllOfMatcher< /// class X; /// template class Z {}; /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Decl, - CXXRecordDecl> cxxRecordDecl; +extern const internal::VariadicDynCastAllOfMatcher + cxxRecordDecl; /// \brief Matches C++ class template declarations. /// @@ -403,9 +403,8 @@ const internal::VariadicDynCastAllOfMatcher< /// \code /// template class Z {}; /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Decl, - ClassTemplateDecl> classTemplateDecl; +extern const internal::VariadicDynCastAllOfMatcher + classTemplateDecl; /// \brief Matches C++ class template specializations. /// @@ -417,9 +416,9 @@ const internal::VariadicDynCastAllOfMatcher< /// \endcode /// classTemplateSpecializationDecl() /// matches the specializations \c A and \c A -const internal::VariadicDynCastAllOfMatcher< - Decl, - ClassTemplateSpecializationDecl> classTemplateSpecializationDecl; +extern const internal::VariadicDynCastAllOfMatcher< + Decl, ClassTemplateSpecializationDecl> + classTemplateSpecializationDecl; /// \brief Matches declarator declarations (field, variable, function /// and non-type template parameter declarations). @@ -430,7 +429,7 @@ const internal::VariadicDynCastAllOfMatcher< /// \endcode /// declaratorDecl() /// matches \c int y. -const internal::VariadicDynCastAllOfMatcher +extern const internal::VariadicDynCastAllOfMatcher declaratorDecl; /// \brief Matches parameter variable declarations. @@ -441,7 +440,8 @@ const internal::VariadicDynCastAllOfMatcher /// \endcode /// parmVarDecl() /// matches \c int x. -const internal::VariadicDynCastAllOfMatcher parmVarDecl; +extern const internal::VariadicDynCastAllOfMatcher + parmVarDecl; /// \brief Matches C++ access specifier declarations. /// @@ -454,9 +454,8 @@ const internal::VariadicDynCastAllOfMatcher parmVarDecl; /// \endcode /// accessSpecDecl() /// matches 'public:' -const internal::VariadicDynCastAllOfMatcher< - Decl, - AccessSpecDecl> accessSpecDecl; +extern const internal::VariadicDynCastAllOfMatcher + accessSpecDecl; /// \brief Matches constructor initializers. /// @@ -467,7 +466,8 @@ const internal::VariadicDynCastAllOfMatcher< /// int i; /// }; /// \endcode -const internal::VariadicAllOfMatcher cxxCtorInitializer; +extern const internal::VariadicAllOfMatcher + cxxCtorInitializer; /// \brief Matches template arguments. /// @@ -478,7 +478,7 @@ const internal::VariadicAllOfMatcher cxxCtorInitializer; /// \endcode /// templateArgument() /// matches 'int' in C. -const internal::VariadicAllOfMatcher templateArgument; +extern const internal::VariadicAllOfMatcher templateArgument; /// \brief Matches template name. /// @@ -489,7 +489,7 @@ const internal::VariadicAllOfMatcher templateArgument; /// \endcode /// templateName() /// matches 'X' in X. -const internal::VariadicAllOfMatcher templateName; +extern const internal::VariadicAllOfMatcher templateName; /// \brief Matches non-type template parameter declarations. /// @@ -499,9 +499,9 @@ const internal::VariadicAllOfMatcher templateName; /// \endcode /// nonTypeTemplateParmDecl() /// matches 'N', but not 'T'. -const internal::VariadicDynCastAllOfMatcher< - Decl, - NonTypeTemplateParmDecl> nonTypeTemplateParmDecl; +extern const internal::VariadicDynCastAllOfMatcher + nonTypeTemplateParmDecl; /// \brief Matches template type parameter declarations. /// @@ -511,9 +511,8 @@ const internal::VariadicDynCastAllOfMatcher< /// \endcode /// templateTypeParmDecl() /// matches 'T', but not 'N'. -const internal::VariadicDynCastAllOfMatcher< - Decl, - TemplateTypeParmDecl> templateTypeParmDecl; +extern const internal::VariadicDynCastAllOfMatcher + templateTypeParmDecl; /// \brief Matches public C++ declarations. /// @@ -974,7 +973,7 @@ AST_MATCHER_P(TemplateArgument, equalsIntegralValue, /// enum X { A, B, C }; /// void F(); /// \endcode -const internal::VariadicDynCastAllOfMatcher valueDecl; +extern const internal::VariadicDynCastAllOfMatcher valueDecl; /// \brief Matches C++ constructor declarations. /// @@ -987,9 +986,8 @@ const internal::VariadicDynCastAllOfMatcher valueDecl; /// int DoSomething(); /// }; /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Decl, - CXXConstructorDecl> cxxConstructorDecl; +extern const internal::VariadicDynCastAllOfMatcher + cxxConstructorDecl; /// \brief Matches explicit C++ destructor declarations. /// @@ -1000,9 +998,8 @@ const internal::VariadicDynCastAllOfMatcher< /// virtual ~Foo(); /// }; /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Decl, - CXXDestructorDecl> cxxDestructorDecl; +extern const internal::VariadicDynCastAllOfMatcher + cxxDestructorDecl; /// \brief Matches enum declarations. /// @@ -1012,7 +1009,7 @@ const internal::VariadicDynCastAllOfMatcher< /// A, B, C /// }; /// \endcode -const internal::VariadicDynCastAllOfMatcher enumDecl; +extern const internal::VariadicDynCastAllOfMatcher enumDecl; /// \brief Matches enum constants. /// @@ -1022,9 +1019,8 @@ const internal::VariadicDynCastAllOfMatcher enumDecl; /// A, B, C /// }; /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Decl, - EnumConstantDecl> enumConstantDecl; +extern const internal::VariadicDynCastAllOfMatcher + enumConstantDecl; /// \brief Matches method declarations. /// @@ -1032,7 +1028,8 @@ const internal::VariadicDynCastAllOfMatcher< /// \code /// class X { void y(); }; /// \endcode -const internal::VariadicDynCastAllOfMatcher cxxMethodDecl; +extern const internal::VariadicDynCastAllOfMatcher + cxxMethodDecl; /// \brief Matches conversion operator declarations. /// @@ -1040,7 +1037,7 @@ const internal::VariadicDynCastAllOfMatcher cxxMethodDecl; /// \code /// class X { operator int() const; }; /// \endcode -const internal::VariadicDynCastAllOfMatcher +extern const internal::VariadicDynCastAllOfMatcher cxxConversionDecl; /// \brief Matches variable declarations. @@ -1052,7 +1049,7 @@ const internal::VariadicDynCastAllOfMatcher /// \code /// int a; /// \endcode -const internal::VariadicDynCastAllOfMatcher varDecl; +extern const internal::VariadicDynCastAllOfMatcher varDecl; /// \brief Matches field declarations. /// @@ -1062,7 +1059,7 @@ const internal::VariadicDynCastAllOfMatcher varDecl; /// \endcode /// fieldDecl() /// matches 'm'. -const internal::VariadicDynCastAllOfMatcher fieldDecl; +extern const internal::VariadicDynCastAllOfMatcher fieldDecl; /// \brief Matches function declarations. /// @@ -1070,7 +1067,8 @@ const internal::VariadicDynCastAllOfMatcher fieldDecl; /// \code /// void f(); /// \endcode -const internal::VariadicDynCastAllOfMatcher functionDecl; +extern const internal::VariadicDynCastAllOfMatcher + functionDecl; /// \brief Matches C++ function template declarations. /// @@ -1078,9 +1076,8 @@ const internal::VariadicDynCastAllOfMatcher functionDecl; /// \code /// template void f(T t) {} /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Decl, - FunctionTemplateDecl> functionTemplateDecl; +extern const internal::VariadicDynCastAllOfMatcher + functionTemplateDecl; /// \brief Matches friend declarations. /// @@ -1090,7 +1087,7 @@ const internal::VariadicDynCastAllOfMatcher< /// \endcode /// friendDecl() /// matches 'friend void foo()'. -const internal::VariadicDynCastAllOfMatcher friendDecl; +extern const internal::VariadicDynCastAllOfMatcher friendDecl; /// \brief Matches statements. /// @@ -1100,7 +1097,7 @@ const internal::VariadicDynCastAllOfMatcher friendDecl; /// \endcode /// stmt() /// matches both the compound statement '{ ++a; }' and '++a'. -const internal::VariadicAllOfMatcher stmt; +extern const internal::VariadicAllOfMatcher stmt; /// \brief Matches declaration statements. /// @@ -1110,9 +1107,7 @@ const internal::VariadicAllOfMatcher stmt; /// \endcode /// declStmt() /// matches 'int a'. -const internal::VariadicDynCastAllOfMatcher< - Stmt, - DeclStmt> declStmt; +extern const internal::VariadicDynCastAllOfMatcher declStmt; /// \brief Matches member expressions. /// @@ -1125,7 +1120,7 @@ const internal::VariadicDynCastAllOfMatcher< /// \endcode /// memberExpr() /// matches this->x, x, y.x, a, this->b -const internal::VariadicDynCastAllOfMatcher memberExpr; +extern const internal::VariadicDynCastAllOfMatcher memberExpr; /// \brief Matches call expressions. /// @@ -1135,7 +1130,7 @@ const internal::VariadicDynCastAllOfMatcher memberExpr; /// x.y(); /// y(); /// \endcode -const internal::VariadicDynCastAllOfMatcher callExpr; +extern const internal::VariadicDynCastAllOfMatcher callExpr; /// \brief Matches lambda expressions. /// @@ -1143,7 +1138,7 @@ const internal::VariadicDynCastAllOfMatcher callExpr; /// \code /// [&](){return 5;} /// \endcode -const internal::VariadicDynCastAllOfMatcher lambdaExpr; +extern const internal::VariadicDynCastAllOfMatcher lambdaExpr; /// \brief Matches member call expressions. /// @@ -1152,9 +1147,8 @@ const internal::VariadicDynCastAllOfMatcher lambdaExpr; /// X x; /// x.y(); /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - CXXMemberCallExpr> cxxMemberCallExpr; +extern const internal::VariadicDynCastAllOfMatcher + cxxMemberCallExpr; /// \brief Matches ObjectiveC Message invocation expressions. /// @@ -1165,9 +1159,8 @@ const internal::VariadicDynCastAllOfMatcher< /// \code /// [[NSString alloc] initWithString:@"Hello"] /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - ObjCMessageExpr> objcMessageExpr; +extern const internal::VariadicDynCastAllOfMatcher + objcMessageExpr; /// \brief Matches Objective-C interface declarations. /// @@ -1176,9 +1169,8 @@ const internal::VariadicDynCastAllOfMatcher< /// @interface Foo /// @end /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Decl, - ObjCInterfaceDecl> objcInterfaceDecl; +extern const internal::VariadicDynCastAllOfMatcher + objcInterfaceDecl; /// \brief Matches Objective-C implementation declarations. /// @@ -1187,9 +1179,8 @@ const internal::VariadicDynCastAllOfMatcher< /// @implementation Foo /// @end /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Decl, - ObjCImplementationDecl> objcImplementationDecl; +extern const internal::VariadicDynCastAllOfMatcher + objcImplementationDecl; /// \brief Matches Objective-C protocol declarations. /// @@ -1198,9 +1189,8 @@ const internal::VariadicDynCastAllOfMatcher< /// @protocol FooDelegate /// @end /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Decl, - ObjCProtocolDecl> objcProtocolDecl; +extern const internal::VariadicDynCastAllOfMatcher + objcProtocolDecl; /// \brief Matches Objective-C category declarations. /// @@ -1209,9 +1199,8 @@ const internal::VariadicDynCastAllOfMatcher< /// @interface Foo (Additions) /// @end /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Decl, - ObjCCategoryDecl> objcCategoryDecl; +extern const internal::VariadicDynCastAllOfMatcher + objcCategoryDecl; /// \brief Matches Objective-C category definitions. /// @@ -1220,9 +1209,8 @@ const internal::VariadicDynCastAllOfMatcher< /// @implementation Foo (Additions) /// @end /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Decl, - ObjCCategoryImplDecl> objcCategoryImplDecl; +extern const internal::VariadicDynCastAllOfMatcher + objcCategoryImplDecl; /// \brief Matches Objective-C method declarations. /// @@ -1236,9 +1224,8 @@ const internal::VariadicDynCastAllOfMatcher< /// - (void)method {} /// @end /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Decl, - ObjCMethodDecl> objcMethodDecl; +extern const internal::VariadicDynCastAllOfMatcher + objcMethodDecl; /// \brief Matches Objective-C instance variable declarations. /// @@ -1249,9 +1236,8 @@ const internal::VariadicDynCastAllOfMatcher< /// } /// @end /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Decl, - ObjCIvarDecl> objcIvarDecl; +extern const internal::VariadicDynCastAllOfMatcher + objcIvarDecl; /// \brief Matches Objective-C property declarations. /// @@ -1261,9 +1247,8 @@ const internal::VariadicDynCastAllOfMatcher< /// @property BOOL enabled; /// @end /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Decl, - ObjCPropertyDecl> objcPropertyDecl; +extern const internal::VariadicDynCastAllOfMatcher + objcPropertyDecl; /// \brief Matches Objective-C \@throw statements. /// @@ -1271,9 +1256,8 @@ const internal::VariadicDynCastAllOfMatcher< /// \code /// @throw obj; /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - ObjCAtThrowStmt> objcThrowStmt; +extern const internal::VariadicDynCastAllOfMatcher + objcThrowStmt; /// \brief Matches Objective-C @try statements. /// @@ -1282,9 +1266,8 @@ const internal::VariadicDynCastAllOfMatcher< /// @try {} /// @catch (...) {} /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - ObjCAtTryStmt> objcTryStmt; +extern const internal::VariadicDynCastAllOfMatcher + objcTryStmt; /// \brief Matches Objective-C @catch statements. /// @@ -1293,9 +1276,8 @@ const internal::VariadicDynCastAllOfMatcher< /// @try {} /// @catch (...) {} /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - ObjCAtCatchStmt> objcCatchStmt; +extern const internal::VariadicDynCastAllOfMatcher + objcCatchStmt; /// \brief Matches Objective-C @finally statements. /// @@ -1304,9 +1286,8 @@ const internal::VariadicDynCastAllOfMatcher< /// @try {} /// @finally {} /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - ObjCAtFinallyStmt> objcFinallyStmt; +extern const internal::VariadicDynCastAllOfMatcher + objcFinallyStmt; /// \brief Matches expressions that introduce cleanups to be run at the end /// of the sub-expression's evaluation. @@ -1315,9 +1296,8 @@ const internal::VariadicDynCastAllOfMatcher< /// \code /// const std::string str = std::string(); /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - ExprWithCleanups> exprWithCleanups; +extern const internal::VariadicDynCastAllOfMatcher + exprWithCleanups; /// \brief Matches init list expressions. /// @@ -1329,7 +1309,8 @@ const internal::VariadicDynCastAllOfMatcher< /// \endcode /// initListExpr() /// matches "{ 1, 2 }" and "{ 5, 6 }" -const internal::VariadicDynCastAllOfMatcher initListExpr; +extern const internal::VariadicDynCastAllOfMatcher + initListExpr; /// \brief Matches the syntactic form of init list expressions /// (if expression have it). @@ -1351,8 +1332,9 @@ AST_MATCHER_P(InitListExpr, hasSyntacticForm, /// \endcode /// cxxStdInitializerListExpr() /// matches "{ 1, 2, 3 }" and "{ 4, 5 }" -const internal::VariadicDynCastAllOfMatcher cxxStdInitializerListExpr; +extern const internal::VariadicDynCastAllOfMatcher + cxxStdInitializerListExpr; /// \brief Matches implicit initializers of init list expressions. /// @@ -1362,8 +1344,8 @@ const internal::VariadicDynCastAllOfMatcher -implicitValueInitExpr; +extern const internal::VariadicDynCastAllOfMatcher + implicitValueInitExpr; /// \brief Matches paren list expressions. /// ParenListExprs don't have a predefined type and are used for late parsing. @@ -1380,7 +1362,8 @@ implicitValueInitExpr; /// \endcode /// parenListExpr() matches "*this" but NOT matches (a, b) because (a, b) /// has a predefined type and is a ParenExpr, not a ParenListExpr. -const internal::VariadicDynCastAllOfMatcher parenListExpr; +extern const internal::VariadicDynCastAllOfMatcher + parenListExpr; /// \brief Matches substitutions of non-type template parameters. /// @@ -1392,9 +1375,9 @@ const internal::VariadicDynCastAllOfMatcher parenListExpr; /// \endcode /// substNonTypeTemplateParmExpr() /// matches "N" in the right-hand side of "static const int n = N;" -const internal::VariadicDynCastAllOfMatcher< - Stmt, - SubstNonTypeTemplateParmExpr> substNonTypeTemplateParmExpr; +extern const internal::VariadicDynCastAllOfMatcher + substNonTypeTemplateParmExpr; /// \brief Matches using declarations. /// @@ -1405,7 +1388,7 @@ const internal::VariadicDynCastAllOfMatcher< /// \endcode /// usingDecl() /// matches \code using X::x \endcode -const internal::VariadicDynCastAllOfMatcher usingDecl; +extern const internal::VariadicDynCastAllOfMatcher usingDecl; /// \brief Matches using namespace declarations. /// @@ -1416,9 +1399,8 @@ const internal::VariadicDynCastAllOfMatcher usingDecl; /// \endcode /// usingDirectiveDecl() /// matches \code using namespace X \endcode -const internal::VariadicDynCastAllOfMatcher< - Decl, - UsingDirectiveDecl> usingDirectiveDecl; +extern const internal::VariadicDynCastAllOfMatcher + usingDirectiveDecl; /// \brief Matches reference to a name that can be looked up during parsing /// but could not be resolved to a specific declaration. @@ -1434,9 +1416,8 @@ const internal::VariadicDynCastAllOfMatcher< /// \endcode /// unresolvedLookupExpr() /// matches \code foo() \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - UnresolvedLookupExpr> unresolvedLookupExpr; +extern const internal::VariadicDynCastAllOfMatcher + unresolvedLookupExpr; /// \brief Matches unresolved using value declarations. /// @@ -1449,9 +1430,9 @@ const internal::VariadicDynCastAllOfMatcher< /// \endcode /// unresolvedUsingValueDecl() /// matches \code using X::x \endcode -const internal::VariadicDynCastAllOfMatcher< - Decl, - UnresolvedUsingValueDecl> unresolvedUsingValueDecl; +extern const internal::VariadicDynCastAllOfMatcher + unresolvedUsingValueDecl; /// \brief Matches unresolved using value declarations that involve the /// typename. @@ -1468,9 +1449,9 @@ const internal::VariadicDynCastAllOfMatcher< /// \endcode /// unresolvedUsingTypenameDecl() /// matches \code using Base::Foo \endcode -const internal::VariadicDynCastAllOfMatcher< - Decl, - UnresolvedUsingTypenameDecl> unresolvedUsingTypenameDecl; +extern const internal::VariadicDynCastAllOfMatcher + unresolvedUsingTypenameDecl; /// \brief Matches parentheses used in expressions. /// @@ -1479,9 +1460,7 @@ const internal::VariadicDynCastAllOfMatcher< /// int foo() { return 1; } /// int a = (foo() + 1); /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - ParenExpr> parenExpr; +extern const internal::VariadicDynCastAllOfMatcher parenExpr; /// \brief Matches constructor call expressions (including implicit ones). /// @@ -1493,9 +1472,8 @@ const internal::VariadicDynCastAllOfMatcher< /// int n; /// f(string(ptr, n), ptr); /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - CXXConstructExpr> cxxConstructExpr; +extern const internal::VariadicDynCastAllOfMatcher + cxxConstructExpr; /// \brief Matches unresolved constructor call expressions. /// @@ -1505,9 +1483,9 @@ const internal::VariadicDynCastAllOfMatcher< /// template /// void f(const T& t) { return T(t); } /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - CXXUnresolvedConstructExpr> cxxUnresolvedConstructExpr; +extern const internal::VariadicDynCastAllOfMatcher + cxxUnresolvedConstructExpr; /// \brief Matches implicit and explicit this expressions. /// @@ -1519,7 +1497,8 @@ const internal::VariadicDynCastAllOfMatcher< /// int f() { return i; } /// }; /// \endcode -const internal::VariadicDynCastAllOfMatcher cxxThisExpr; +extern const internal::VariadicDynCastAllOfMatcher + cxxThisExpr; /// \brief Matches nodes where temporaries are created. /// @@ -1529,9 +1508,8 @@ const internal::VariadicDynCastAllOfMatcher cxxThisExpr; /// FunctionTakesString(GetStringByValue()); /// FunctionTakesStringByPointer(GetStringPointer()); /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - CXXBindTemporaryExpr> cxxBindTemporaryExpr; +extern const internal::VariadicDynCastAllOfMatcher + cxxBindTemporaryExpr; /// \brief Matches nodes where temporaries are materialized. /// @@ -1551,9 +1529,9 @@ const internal::VariadicDynCastAllOfMatcher< /// f(); /// f().func(); /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - MaterializeTemporaryExpr> materializeTemporaryExpr; +extern const internal::VariadicDynCastAllOfMatcher + materializeTemporaryExpr; /// \brief Matches new expressions. /// @@ -1563,7 +1541,7 @@ const internal::VariadicDynCastAllOfMatcher< /// \endcode /// cxxNewExpr() /// matches 'new X'. -const internal::VariadicDynCastAllOfMatcher cxxNewExpr; +extern const internal::VariadicDynCastAllOfMatcher cxxNewExpr; /// \brief Matches delete expressions. /// @@ -1573,7 +1551,8 @@ const internal::VariadicDynCastAllOfMatcher cxxNewExpr; /// \endcode /// cxxDeleteExpr() /// matches 'delete X'. -const internal::VariadicDynCastAllOfMatcher cxxDeleteExpr; +extern const internal::VariadicDynCastAllOfMatcher + cxxDeleteExpr; /// \brief Matches array subscript expressions. /// @@ -1583,9 +1562,8 @@ const internal::VariadicDynCastAllOfMatcher cxxDeleteExpr; /// \endcode /// arraySubscriptExpr() /// matches "a[1]" -const internal::VariadicDynCastAllOfMatcher< - Stmt, - ArraySubscriptExpr> arraySubscriptExpr; +extern const internal::VariadicDynCastAllOfMatcher + arraySubscriptExpr; /// \brief Matches the value of a default argument at the call site. /// @@ -1596,9 +1574,8 @@ const internal::VariadicDynCastAllOfMatcher< /// void f(int x, int y = 0); /// f(42); /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - CXXDefaultArgExpr> cxxDefaultArgExpr; +extern const internal::VariadicDynCastAllOfMatcher + cxxDefaultArgExpr; /// \brief Matches overloaded operator calls. /// @@ -1614,9 +1591,8 @@ const internal::VariadicDynCastAllOfMatcher< /// ostream &o; int b = 1, c = 1; /// o << b << c; /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - CXXOperatorCallExpr> cxxOperatorCallExpr; +extern const internal::VariadicDynCastAllOfMatcher + cxxOperatorCallExpr; /// \brief Matches expressions. /// @@ -1624,7 +1600,7 @@ const internal::VariadicDynCastAllOfMatcher< /// \code /// void f() { x(); } /// \endcode -const internal::VariadicDynCastAllOfMatcher expr; +extern const internal::VariadicDynCastAllOfMatcher expr; /// \brief Matches expressions that refer to declarations. /// @@ -1633,7 +1609,8 @@ const internal::VariadicDynCastAllOfMatcher expr; /// bool x; /// if (x) {} /// \endcode -const internal::VariadicDynCastAllOfMatcher declRefExpr; +extern const internal::VariadicDynCastAllOfMatcher + declRefExpr; /// \brief Matches if statements. /// @@ -1641,7 +1618,7 @@ const internal::VariadicDynCastAllOfMatcher declRefExpr; /// \code /// if (x) {} /// \endcode -const internal::VariadicDynCastAllOfMatcher ifStmt; +extern const internal::VariadicDynCastAllOfMatcher ifStmt; /// \brief Matches for statements. /// @@ -1650,7 +1627,7 @@ const internal::VariadicDynCastAllOfMatcher ifStmt; /// for (;;) {} /// int i[] = {1, 2, 3}; for (auto a : i); /// \endcode -const internal::VariadicDynCastAllOfMatcher forStmt; +extern const internal::VariadicDynCastAllOfMatcher forStmt; /// \brief Matches the increment statement of a for loop. /// @@ -1688,9 +1665,8 @@ AST_MATCHER_P(ForStmt, hasLoopInit, internal::Matcher, /// int i[] = {1, 2, 3}; for (auto a : i); /// for(int j = 0; j < 5; ++j); /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - CXXForRangeStmt> cxxForRangeStmt; +extern const internal::VariadicDynCastAllOfMatcher + cxxForRangeStmt; /// \brief Matches the initialization statement of a for loop. /// @@ -1728,7 +1704,7 @@ AST_MATCHER_P(CXXForRangeStmt, hasRangeInit, internal::Matcher, /// \endcode /// whileStmt() /// matches 'while (true) {}'. -const internal::VariadicDynCastAllOfMatcher whileStmt; +extern const internal::VariadicDynCastAllOfMatcher whileStmt; /// \brief Matches do statements. /// @@ -1738,7 +1714,7 @@ const internal::VariadicDynCastAllOfMatcher whileStmt; /// \endcode /// doStmt() /// matches 'do {} while(true)' -const internal::VariadicDynCastAllOfMatcher doStmt; +extern const internal::VariadicDynCastAllOfMatcher doStmt; /// \brief Matches break statements. /// @@ -1748,7 +1724,7 @@ const internal::VariadicDynCastAllOfMatcher doStmt; /// \endcode /// breakStmt() /// matches 'break' -const internal::VariadicDynCastAllOfMatcher breakStmt; +extern const internal::VariadicDynCastAllOfMatcher breakStmt; /// \brief Matches continue statements. /// @@ -1758,7 +1734,8 @@ const internal::VariadicDynCastAllOfMatcher breakStmt; /// \endcode /// continueStmt() /// matches 'continue' -const internal::VariadicDynCastAllOfMatcher continueStmt; +extern const internal::VariadicDynCastAllOfMatcher + continueStmt; /// \brief Matches return statements. /// @@ -1768,7 +1745,7 @@ const internal::VariadicDynCastAllOfMatcher continueStmt; /// \endcode /// returnStmt() /// matches 'return 1' -const internal::VariadicDynCastAllOfMatcher returnStmt; +extern const internal::VariadicDynCastAllOfMatcher returnStmt; /// \brief Matches goto statements. /// @@ -1779,7 +1756,7 @@ const internal::VariadicDynCastAllOfMatcher returnStmt; /// \endcode /// gotoStmt() /// matches 'goto FOO' -const internal::VariadicDynCastAllOfMatcher gotoStmt; +extern const internal::VariadicDynCastAllOfMatcher gotoStmt; /// \brief Matches label statements. /// @@ -1790,7 +1767,7 @@ const internal::VariadicDynCastAllOfMatcher gotoStmt; /// \endcode /// labelStmt() /// matches 'FOO:' -const internal::VariadicDynCastAllOfMatcher labelStmt; +extern const internal::VariadicDynCastAllOfMatcher labelStmt; /// \brief Matches address of label statements (GNU extension). /// @@ -1802,7 +1779,8 @@ const internal::VariadicDynCastAllOfMatcher labelStmt; /// \endcode /// addrLabelExpr() /// matches '&&FOO' -const internal::VariadicDynCastAllOfMatcher addrLabelExpr; +extern const internal::VariadicDynCastAllOfMatcher + addrLabelExpr; /// \brief Matches switch statements. /// @@ -1812,7 +1790,7 @@ const internal::VariadicDynCastAllOfMatcher addrLabelExpr; /// \endcode /// switchStmt() /// matches 'switch(a)'. -const internal::VariadicDynCastAllOfMatcher switchStmt; +extern const internal::VariadicDynCastAllOfMatcher switchStmt; /// \brief Matches case and default statements inside switch statements. /// @@ -1822,7 +1800,7 @@ const internal::VariadicDynCastAllOfMatcher switchStmt; /// \endcode /// switchCase() /// matches 'case 42: break;' and 'default: break;'. -const internal::VariadicDynCastAllOfMatcher switchCase; +extern const internal::VariadicDynCastAllOfMatcher switchCase; /// \brief Matches case statements inside switch statements. /// @@ -1832,7 +1810,7 @@ const internal::VariadicDynCastAllOfMatcher switchCase; /// \endcode /// caseStmt() /// matches 'case 42: break;'. -const internal::VariadicDynCastAllOfMatcher caseStmt; +extern const internal::VariadicDynCastAllOfMatcher caseStmt; /// \brief Matches default statements inside switch statements. /// @@ -1842,7 +1820,8 @@ const internal::VariadicDynCastAllOfMatcher caseStmt; /// \endcode /// defaultStmt() /// matches 'default: break;'. -const internal::VariadicDynCastAllOfMatcher defaultStmt; +extern const internal::VariadicDynCastAllOfMatcher + defaultStmt; /// \brief Matches compound statements. /// @@ -1850,7 +1829,8 @@ const internal::VariadicDynCastAllOfMatcher defaultStmt; /// \code /// for (;;) {{}} /// \endcode -const internal::VariadicDynCastAllOfMatcher compoundStmt; +extern const internal::VariadicDynCastAllOfMatcher + compoundStmt; /// \brief Matches catch statements. /// @@ -1859,7 +1839,8 @@ const internal::VariadicDynCastAllOfMatcher compoundStmt; /// \endcode /// cxxCatchStmt() /// matches 'catch(int i)' -const internal::VariadicDynCastAllOfMatcher cxxCatchStmt; +extern const internal::VariadicDynCastAllOfMatcher + cxxCatchStmt; /// \brief Matches try statements. /// @@ -1868,7 +1849,7 @@ const internal::VariadicDynCastAllOfMatcher cxxCatchStmt; /// \endcode /// cxxTryStmt() /// matches 'try {}' -const internal::VariadicDynCastAllOfMatcher cxxTryStmt; +extern const internal::VariadicDynCastAllOfMatcher cxxTryStmt; /// \brief Matches throw expressions. /// @@ -1877,7 +1858,8 @@ const internal::VariadicDynCastAllOfMatcher cxxTryStmt; /// \endcode /// cxxThrowExpr() /// matches 'throw 5' -const internal::VariadicDynCastAllOfMatcher cxxThrowExpr; +extern const internal::VariadicDynCastAllOfMatcher + cxxThrowExpr; /// \brief Matches null statements. /// @@ -1886,7 +1868,7 @@ const internal::VariadicDynCastAllOfMatcher cxxThrowExpr; /// \endcode /// nullStmt() /// matches the second ';' -const internal::VariadicDynCastAllOfMatcher nullStmt; +extern const internal::VariadicDynCastAllOfMatcher nullStmt; /// \brief Matches asm statements. /// @@ -1896,7 +1878,7 @@ const internal::VariadicDynCastAllOfMatcher nullStmt; /// \endcode /// asmStmt() /// matches '__asm("mov al, 2")' -const internal::VariadicDynCastAllOfMatcher asmStmt; +extern const internal::VariadicDynCastAllOfMatcher asmStmt; /// \brief Matches bool literals. /// @@ -1904,9 +1886,8 @@ const internal::VariadicDynCastAllOfMatcher asmStmt; /// \code /// true /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - CXXBoolLiteralExpr> cxxBoolLiteral; +extern const internal::VariadicDynCastAllOfMatcher + cxxBoolLiteral; /// \brief Matches string literals (also matches wide string literals). /// @@ -1915,9 +1896,8 @@ const internal::VariadicDynCastAllOfMatcher< /// char *s = "abcd"; /// wchar_t *ws = L"abcd"; /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - StringLiteral> stringLiteral; +extern const internal::VariadicDynCastAllOfMatcher + stringLiteral; /// \brief Matches character literals (also matches wchar_t). /// @@ -1929,17 +1909,15 @@ const internal::VariadicDynCastAllOfMatcher< /// char ch = 'a'; /// wchar_t chw = L'a'; /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - CharacterLiteral> characterLiteral; +extern const internal::VariadicDynCastAllOfMatcher + characterLiteral; /// \brief Matches integer literals of all sizes / encodings, e.g. /// 1, 1L, 0x1 and 1U. /// /// Does not match character-encoded integers such as L'a'. -const internal::VariadicDynCastAllOfMatcher< - Stmt, - IntegerLiteral> integerLiteral; +extern const internal::VariadicDynCastAllOfMatcher + integerLiteral; /// \brief Matches float literals of all sizes / encodings, e.g. /// 1.0, 1.0f, 1.0L and 1e10. @@ -1948,16 +1926,14 @@ const internal::VariadicDynCastAllOfMatcher< /// \code /// float a = 10; /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - FloatingLiteral> floatLiteral; +extern const internal::VariadicDynCastAllOfMatcher + floatLiteral; /// \brief Matches user defined literal operator call. /// /// Example match: "foo"_suffix -const internal::VariadicDynCastAllOfMatcher< - Stmt, - UserDefinedLiteral> userDefinedLiteral; +extern const internal::VariadicDynCastAllOfMatcher + userDefinedLiteral; /// \brief Matches compound (i.e. non-scalar) literals /// @@ -1966,24 +1942,23 @@ const internal::VariadicDynCastAllOfMatcher< /// int array[4] = {1}; /// vector int myvec = (vector int)(1, 2); /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - CompoundLiteralExpr> compoundLiteralExpr; +extern const internal::VariadicDynCastAllOfMatcher + compoundLiteralExpr; /// \brief Matches nullptr literal. -const internal::VariadicDynCastAllOfMatcher< - Stmt, - CXXNullPtrLiteralExpr> cxxNullPtrLiteralExpr; +extern const internal::VariadicDynCastAllOfMatcher + cxxNullPtrLiteralExpr; /// \brief Matches GNU __null expression. -const internal::VariadicDynCastAllOfMatcher gnuNullExpr; +extern const internal::VariadicDynCastAllOfMatcher + gnuNullExpr; /// \brief Matches atomic builtins. /// Example matches __atomic_load_n(ptr, 1) /// \code /// void foo() { int *ptr; __atomic_load_n(ptr, 1); } /// \endcode -const internal::VariadicDynCastAllOfMatcher atomicExpr; +extern const internal::VariadicDynCastAllOfMatcher atomicExpr; /// \brief Matches statement expression (GNU extension). /// @@ -1991,7 +1966,7 @@ const internal::VariadicDynCastAllOfMatcher atomicExpr; /// \code /// int C = ({ int X = 4; X; }); /// \endcode -const internal::VariadicDynCastAllOfMatcher stmtExpr; +extern const internal::VariadicDynCastAllOfMatcher stmtExpr; /// \brief Matches binary operator expressions. /// @@ -1999,9 +1974,8 @@ const internal::VariadicDynCastAllOfMatcher stmtExpr; /// \code /// !(a || b) /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - BinaryOperator> binaryOperator; +extern const internal::VariadicDynCastAllOfMatcher + binaryOperator; /// \brief Matches unary operator expressions. /// @@ -2009,9 +1983,8 @@ const internal::VariadicDynCastAllOfMatcher< /// \code /// !a || b /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - UnaryOperator> unaryOperator; +extern const internal::VariadicDynCastAllOfMatcher + unaryOperator; /// \brief Matches conditional operator expressions. /// @@ -2019,9 +1992,8 @@ const internal::VariadicDynCastAllOfMatcher< /// \code /// (a ? b : c) + 42 /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - ConditionalOperator> conditionalOperator; +extern const internal::VariadicDynCastAllOfMatcher + conditionalOperator; /// \brief Matches binary conditional operator expressions (GNU extension). /// @@ -2029,9 +2001,9 @@ const internal::VariadicDynCastAllOfMatcher< /// \code /// (a ?: b) + 42; /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - BinaryConditionalOperator> binaryConditionalOperator; +extern const internal::VariadicDynCastAllOfMatcher + binaryConditionalOperator; /// \brief Matches opaque value expressions. They are used as helpers /// to reference another expressions and can be met @@ -2041,9 +2013,8 @@ const internal::VariadicDynCastAllOfMatcher< /// \code /// (a ?: c) + 42; /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - OpaqueValueExpr> opaqueValueExpr; +extern const internal::VariadicDynCastAllOfMatcher + opaqueValueExpr; /// \brief Matches a C++ static_assert declaration. /// @@ -2058,9 +2029,8 @@ const internal::VariadicDynCastAllOfMatcher< /// }; /// static_assert(sizeof(S) == sizeof(int)); /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Decl, - StaticAssertDecl> staticAssertDecl; +extern const internal::VariadicDynCastAllOfMatcher + staticAssertDecl; /// \brief Matches a reinterpret_cast expression. /// @@ -2072,9 +2042,8 @@ const internal::VariadicDynCastAllOfMatcher< /// \code /// void* p = reinterpret_cast(&p); /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - CXXReinterpretCastExpr> cxxReinterpretCastExpr; +extern const internal::VariadicDynCastAllOfMatcher + cxxReinterpretCastExpr; /// \brief Matches a C++ static_cast expression. /// @@ -2089,9 +2058,8 @@ const internal::VariadicDynCastAllOfMatcher< /// \code /// long eight(static_cast(8)); /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - CXXStaticCastExpr> cxxStaticCastExpr; +extern const internal::VariadicDynCastAllOfMatcher + cxxStaticCastExpr; /// \brief Matches a dynamic_cast expression. /// @@ -2105,9 +2073,8 @@ const internal::VariadicDynCastAllOfMatcher< /// B b; /// D* p = dynamic_cast(&b); /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - CXXDynamicCastExpr> cxxDynamicCastExpr; +extern const internal::VariadicDynCastAllOfMatcher + cxxDynamicCastExpr; /// \brief Matches a const_cast expression. /// @@ -2117,9 +2084,8 @@ const internal::VariadicDynCastAllOfMatcher< /// const int &r(n); /// int* p = const_cast(&r); /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - CXXConstCastExpr> cxxConstCastExpr; +extern const internal::VariadicDynCastAllOfMatcher + cxxConstCastExpr; /// \brief Matches a C-style cast expression. /// @@ -2127,9 +2093,8 @@ const internal::VariadicDynCastAllOfMatcher< /// \code /// int i = (int) 2.2f; /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - CStyleCastExpr> cStyleCastExpr; +extern const internal::VariadicDynCastAllOfMatcher + cStyleCastExpr; /// \brief Matches explicit cast expressions. /// @@ -2152,17 +2117,15 @@ const internal::VariadicDynCastAllOfMatcher< /// \code /// long ell = 42; /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - ExplicitCastExpr> explicitCastExpr; +extern const internal::VariadicDynCastAllOfMatcher + explicitCastExpr; /// \brief Matches the implicit cast nodes of Clang's AST. /// /// This matches many different places, including function call return value /// eliding, as well as any type conversions. -const internal::VariadicDynCastAllOfMatcher< - Stmt, - ImplicitCastExpr> implicitCastExpr; +extern const internal::VariadicDynCastAllOfMatcher + implicitCastExpr; /// \brief Matches any cast nodes of Clang's AST. /// @@ -2177,7 +2140,7 @@ const internal::VariadicDynCastAllOfMatcher< /// int i = (0); /// int k = 0; /// \endcode -const internal::VariadicDynCastAllOfMatcher castExpr; +extern const internal::VariadicDynCastAllOfMatcher castExpr; /// \brief Matches functional cast expressions /// @@ -2187,9 +2150,8 @@ const internal::VariadicDynCastAllOfMatcher castExpr; /// Foo g = (Foo) bar; /// Foo h = Foo(bar); /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - CXXFunctionalCastExpr> cxxFunctionalCastExpr; +extern const internal::VariadicDynCastAllOfMatcher + cxxFunctionalCastExpr; /// \brief Matches functional cast expressions having N != 1 arguments /// @@ -2197,9 +2159,8 @@ const internal::VariadicDynCastAllOfMatcher< /// \code /// Foo h = Foo(bar, bar); /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - CXXTemporaryObjectExpr> cxxTemporaryObjectExpr; +extern const internal::VariadicDynCastAllOfMatcher + cxxTemporaryObjectExpr; /// \brief Matches predefined identifier expressions [C99 6.4.2.2]. /// @@ -2207,9 +2168,8 @@ const internal::VariadicDynCastAllOfMatcher< /// \code /// printf("%s", __func__); /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - PredefinedExpr> predefinedExpr; +extern const internal::VariadicDynCastAllOfMatcher + predefinedExpr; /// \brief Matches C99 designated initializer expressions [C99 6.7.8]. /// @@ -2217,9 +2177,8 @@ const internal::VariadicDynCastAllOfMatcher< /// \code /// point ptarray[10] = { [2].y = 1.0, [0].x = 1.0 }; /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - DesignatedInitExpr> designatedInitExpr; +extern const internal::VariadicDynCastAllOfMatcher + designatedInitExpr; /// \brief Matches designated initializer expressions that contain /// a specific number of designators. @@ -2237,13 +2196,13 @@ AST_MATCHER_P(DesignatedInitExpr, designatorCountIs, unsigned, N) { } /// \brief Matches \c QualTypes in the clang AST. -const internal::VariadicAllOfMatcher qualType; +extern const internal::VariadicAllOfMatcher qualType; /// \brief Matches \c Types in the clang AST. -const internal::VariadicAllOfMatcher type; +extern const internal::VariadicAllOfMatcher type; /// \brief Matches \c TypeLocs in the clang AST. -const internal::VariadicAllOfMatcher typeLoc; +extern const internal::VariadicAllOfMatcher typeLoc; /// \brief Matches if any of the given matchers matches. /// @@ -2264,23 +2223,23 @@ const internal::VariadicAllOfMatcher typeLoc; /// \c b. /// /// Usable as: Any Matcher -const internal::VariadicOperatorMatcherFunc< +extern const internal::VariadicOperatorMatcherFunc< 2, std::numeric_limits::max()> - eachOf = {internal::DynTypedMatcher::VO_EachOf}; + eachOf; /// \brief Matches if any of the given matchers matches. /// /// Usable as: Any Matcher -const internal::VariadicOperatorMatcherFunc< +extern const internal::VariadicOperatorMatcherFunc< 2, std::numeric_limits::max()> - anyOf = {internal::DynTypedMatcher::VO_AnyOf}; + anyOf; /// \brief Matches if all given matchers match. /// /// Usable as: Any Matcher -const internal::VariadicOperatorMatcherFunc< +extern const internal::VariadicOperatorMatcherFunc< 2, std::numeric_limits::max()> - allOf = {internal::DynTypedMatcher::VO_AllOf}; + allOf; /// \brief Matches sizeof (C99), alignof (C++11) and vec_step (OpenCL) /// @@ -2291,9 +2250,9 @@ const internal::VariadicOperatorMatcherFunc< /// \endcode /// unaryExprOrTypeTraitExpr() /// matches \c sizeof(x) and \c alignof(x) -const internal::VariadicDynCastAllOfMatcher< - Stmt, - UnaryExprOrTypeTraitExpr> unaryExprOrTypeTraitExpr; +extern const internal::VariadicDynCastAllOfMatcher + unaryExprOrTypeTraitExpr; /// \brief Matches unary expressions that have a specific type of argument. /// @@ -2369,9 +2328,9 @@ inline internal::Matcher hasName(const std::string &Name) { /// \code /// anyOf(hasName(a), hasName(b), hasName(c)) /// \endcode -const internal::VariadicFunction, StringRef, - internal::hasAnyNameFunc> - hasAnyName = {}; +extern const internal::VariadicFunction, StringRef, + internal::hasAnyNameFunc> + hasAnyName; /// \brief Matches NamedDecl nodes whose fully qualified names contain /// a substring matched by the given RegExp. @@ -2520,8 +2479,7 @@ AST_MATCHER(CXXRecordDecl, isLambda) { /// casts and paren casts. If you are matching with expr then you should /// probably consider using ignoringParenImpCasts like: /// has(ignoringParenImpCasts(expr())). -const internal::ArgumentAdaptingMatcherFunc -LLVM_ATTRIBUTE_UNUSED has = {}; +extern const internal::ArgumentAdaptingMatcherFunc has; /// \brief Matches AST nodes that have descendant AST nodes that match the /// provided matcher. @@ -2537,8 +2495,9 @@ LLVM_ATTRIBUTE_UNUSED has = {}; /// DescendantT must be an AST base type. /// /// Usable as: Any Matcher -const internal::ArgumentAdaptingMatcherFunc -LLVM_ATTRIBUTE_UNUSED hasDescendant = {}; +extern const internal::ArgumentAdaptingMatcherFunc< + internal::HasDescendantMatcher> + hasDescendant; /// \brief Matches AST nodes that have child AST nodes that match the /// provided matcher. @@ -2557,8 +2516,8 @@ LLVM_ATTRIBUTE_UNUSED hasDescendant = {}; /// matches instead of only on the first one. /// /// Usable as: Any Matcher -const internal::ArgumentAdaptingMatcherFunc -LLVM_ATTRIBUTE_UNUSED forEach = {}; +extern const internal::ArgumentAdaptingMatcherFunc + forEach; /// \brief Matches AST nodes that have descendant AST nodes that match the /// provided matcher. @@ -2586,8 +2545,9 @@ LLVM_ATTRIBUTE_UNUSED forEach = {}; /// \endcode /// /// Usable as: Any Matcher -const internal::ArgumentAdaptingMatcherFunc -LLVM_ATTRIBUTE_UNUSED forEachDescendant = {}; +extern const internal::ArgumentAdaptingMatcherFunc< + internal::ForEachDescendantMatcher> + forEachDescendant; /// \brief Matches if the node or any descendant matches. /// @@ -2620,11 +2580,11 @@ internal::Matcher findAll(const internal::Matcher &Matcher) { /// \c compoundStmt(hasParent(ifStmt())) matches "{ int x = 43; }". /// /// Usable as: Any Matcher -const internal::ArgumentAdaptingMatcherFunc< +extern const internal::ArgumentAdaptingMatcherFunc< internal::HasParentMatcher, internal::TypeList, internal::TypeList> - LLVM_ATTRIBUTE_UNUSED hasParent = {}; + hasParent; /// \brief Matches AST nodes that have an ancestor that matches the provided /// matcher. @@ -2637,11 +2597,11 @@ const internal::ArgumentAdaptingMatcherFunc< /// \c expr(integerLiteral(hasAncestor(ifStmt()))) matches \c 42, but not 43. /// /// Usable as: Any Matcher -const internal::ArgumentAdaptingMatcherFunc< +extern const internal::ArgumentAdaptingMatcherFunc< internal::HasAncestorMatcher, internal::TypeList, internal::TypeList> - LLVM_ATTRIBUTE_UNUSED hasAncestor = {}; + hasAncestor; /// \brief Matches if the provided matcher does not match. /// @@ -2652,9 +2612,7 @@ const internal::ArgumentAdaptingMatcherFunc< /// \endcode /// /// Usable as: Any Matcher -const internal::VariadicOperatorMatcherFunc<1, 1> unless = { - internal::DynTypedMatcher::VO_UnaryNot -}; +extern const internal::VariadicOperatorMatcherFunc<1, 1> unless; /// \brief Matches a node if the declaration associated with that node /// matches the given matcher. @@ -4780,6 +4738,9 @@ AST_MATCHER(Type, voidType) { return Node.isVoidType(); } +template +using AstTypeMatcher = internal::VariadicDynCastAllOfMatcher; + /// \brief Matches builtin Types. /// /// Given @@ -4792,7 +4753,7 @@ AST_MATCHER(Type, voidType) { /// \endcode /// builtinType() /// matches "int b", "float c" and "bool d" -AST_TYPE_MATCHER(BuiltinType, builtinType); +extern const AstTypeMatcher builtinType; /// \brief Matches all kinds of arrays. /// @@ -4804,7 +4765,7 @@ AST_TYPE_MATCHER(BuiltinType, builtinType); /// \endcode /// arrayType() /// matches "int a[]", "int b[4]" and "int c[a[0]]"; -AST_TYPE_MATCHER(ArrayType, arrayType); +extern const AstTypeMatcher arrayType; /// \brief Matches C99 complex types. /// @@ -4814,7 +4775,7 @@ AST_TYPE_MATCHER(ArrayType, arrayType); /// \endcode /// complexType() /// matches "_Complex float f" -AST_TYPE_MATCHER(ComplexType, complexType); +extern const AstTypeMatcher complexType; /// \brief Matches any real floating-point type (float, double, long double). /// @@ -4858,7 +4819,7 @@ AST_TYPELOC_TRAVERSE_MATCHER(hasElementType, getElement, /// \endcode /// constantArrayType() /// matches "int a[2]" -AST_TYPE_MATCHER(ConstantArrayType, constantArrayType); +extern const AstTypeMatcher constantArrayType; /// \brief Matches nodes that have the specified size. /// @@ -4893,7 +4854,7 @@ AST_POLYMORPHIC_MATCHER_P(hasSize, /// \endcode /// dependentSizedArrayType /// matches "T data[Size]" -AST_TYPE_MATCHER(DependentSizedArrayType, dependentSizedArrayType); +extern const AstTypeMatcher dependentSizedArrayType; /// \brief Matches C arrays with unspecified size. /// @@ -4905,7 +4866,7 @@ AST_TYPE_MATCHER(DependentSizedArrayType, dependentSizedArrayType); /// \endcode /// incompleteArrayType() /// matches "int a[]" and "int c[]" -AST_TYPE_MATCHER(IncompleteArrayType, incompleteArrayType); +extern const AstTypeMatcher incompleteArrayType; /// \brief Matches C arrays with a specified size that is not an /// integer-constant-expression. @@ -4920,7 +4881,7 @@ AST_TYPE_MATCHER(IncompleteArrayType, incompleteArrayType); /// \endcode /// variableArrayType() /// matches "int c[a[0]]" -AST_TYPE_MATCHER(VariableArrayType, variableArrayType); +extern const AstTypeMatcher variableArrayType; /// \brief Matches \c VariableArrayType nodes that have a specific size /// expression. @@ -4947,7 +4908,7 @@ AST_MATCHER_P(VariableArrayType, hasSizeExpr, /// \endcode /// atomicType() /// matches "_Atomic(int) i" -AST_TYPE_MATCHER(AtomicType, atomicType); +extern const AstTypeMatcher atomicType; /// \brief Matches atomic types with a specific value type. /// @@ -4973,7 +4934,7 @@ AST_TYPELOC_TRAVERSE_MATCHER(hasValueType, getValue, /// \endcode /// autoType() /// matches "auto n" and "auto i" -AST_TYPE_MATCHER(AutoType, autoType); +extern const AstTypeMatcher autoType; /// \brief Matches \c AutoType nodes where the deduced type is a specific type. /// @@ -5001,7 +4962,7 @@ AST_TYPE_TRAVERSE_MATCHER(hasDeducedType, getDeducedType, /// \endcode /// functionType() /// matches "int (*f)(int)" and the type of "g". -AST_TYPE_MATCHER(FunctionType, functionType); +extern const AstTypeMatcher functionType; /// \brief Matches \c FunctionProtoType nodes. /// @@ -5013,7 +4974,7 @@ AST_TYPE_MATCHER(FunctionType, functionType); /// functionProtoType() /// matches "int (*f)(int)" and the type of "g" in C++ mode. /// In C mode, "g" is not matched because it does not contain a prototype. -AST_TYPE_MATCHER(FunctionProtoType, functionProtoType); +extern const AstTypeMatcher functionProtoType; /// \brief Matches \c ParenType nodes. /// @@ -5025,7 +4986,7 @@ AST_TYPE_MATCHER(FunctionProtoType, functionProtoType); /// /// \c varDecl(hasType(pointsTo(parenType()))) matches \c ptr_to_array but not /// \c array_of_ptrs. -AST_TYPE_MATCHER(ParenType, parenType); +extern const AstTypeMatcher parenType; /// \brief Matches \c ParenType nodes where the inner type is a specific type. /// @@ -5046,7 +5007,7 @@ AST_TYPE_TRAVERSE_MATCHER(innerType, getInnerType, /// "void (^)(int)". /// /// The \c pointee is always required to be a \c FunctionType. -AST_TYPE_MATCHER(BlockPointerType, blockPointerType); +extern const AstTypeMatcher blockPointerType; /// \brief Matches member pointer types. /// Given @@ -5056,7 +5017,7 @@ AST_TYPE_MATCHER(BlockPointerType, blockPointerType); /// \endcode /// memberPointerType() /// matches "A::* ptr" -AST_TYPE_MATCHER(MemberPointerType, memberPointerType); +extern const AstTypeMatcher memberPointerType; /// \brief Matches pointer types, but does not match Objective-C object pointer /// types. @@ -5073,7 +5034,7 @@ AST_TYPE_MATCHER(MemberPointerType, memberPointerType); /// \endcode /// pointerType() /// matches "int *a", but does not match "Foo *f". -AST_TYPE_MATCHER(PointerType, pointerType); +extern const AstTypeMatcher pointerType; /// \brief Matches an Objective-C object pointer type, which is different from /// a pointer type, despite being syntactically similar. @@ -5088,7 +5049,7 @@ AST_TYPE_MATCHER(PointerType, pointerType); /// \endcode /// pointerType() /// matches "Foo *f", but does not match "int *a". -AST_TYPE_MATCHER(ObjCObjectPointerType, objcObjectPointerType); +extern const AstTypeMatcher objcObjectPointerType; /// \brief Matches both lvalue and rvalue reference types. /// @@ -5104,7 +5065,7 @@ AST_TYPE_MATCHER(ObjCObjectPointerType, objcObjectPointerType); /// \endcode /// /// \c referenceType() matches the types of \c b, \c c, \c d, \c e, and \c f. -AST_TYPE_MATCHER(ReferenceType, referenceType); +extern const AstTypeMatcher referenceType; /// \brief Matches lvalue reference types. /// @@ -5121,7 +5082,7 @@ AST_TYPE_MATCHER(ReferenceType, referenceType); /// /// \c lValueReferenceType() matches the types of \c b, \c d, and \c e. \c e is /// matched since the type is deduced as int& by reference collapsing rules. -AST_TYPE_MATCHER(LValueReferenceType, lValueReferenceType); +extern const AstTypeMatcher lValueReferenceType; /// \brief Matches rvalue reference types. /// @@ -5138,7 +5099,7 @@ AST_TYPE_MATCHER(LValueReferenceType, lValueReferenceType); /// /// \c rValueReferenceType() matches the types of \c c and \c f. \c e is not /// matched as it is deduced to int& by reference collapsing rules. -AST_TYPE_MATCHER(RValueReferenceType, rValueReferenceType); +extern const AstTypeMatcher rValueReferenceType; /// \brief Narrows PointerType (and similar) matchers to those where the /// \c pointee matches a given matcher. @@ -5168,7 +5129,7 @@ AST_TYPELOC_TRAVERSE_MATCHER(pointee, getPointee, /// \endcode /// typedefType() /// matches "typedef int X" -AST_TYPE_MATCHER(TypedefType, typedefType); +extern const AstTypeMatcher typedefType; /// \brief Matches enum types. /// @@ -5183,7 +5144,7 @@ AST_TYPE_MATCHER(TypedefType, typedefType); // /// \c enumType() matches the type of the variable declarations of both \c c and /// \c s. -AST_TYPE_MATCHER(EnumType, enumType); +extern const AstTypeMatcher enumType; /// \brief Matches template specialization types. /// @@ -5198,7 +5159,8 @@ AST_TYPE_MATCHER(EnumType, enumType); /// /// \c templateSpecializationType() matches the type of the explicit /// instantiation in \c A and the type of the variable declaration in \c B. -AST_TYPE_MATCHER(TemplateSpecializationType, templateSpecializationType); +extern const AstTypeMatcher + templateSpecializationType; /// \brief Matches types nodes representing unary type transformations. /// @@ -5208,7 +5170,7 @@ AST_TYPE_MATCHER(TemplateSpecializationType, templateSpecializationType); /// \endcode /// unaryTransformType() /// matches "__underlying_type(T)" -AST_TYPE_MATCHER(UnaryTransformType, unaryTransformType); +extern const AstTypeMatcher unaryTransformType; /// \brief Matches record types (e.g. structs, classes). /// @@ -5223,7 +5185,7 @@ AST_TYPE_MATCHER(UnaryTransformType, unaryTransformType); /// /// \c recordType() matches the type of the variable declarations of both \c c /// and \c s. -AST_TYPE_MATCHER(RecordType, recordType); +extern const AstTypeMatcher recordType; /// \brief Matches tag types (record and enum types). /// @@ -5238,7 +5200,7 @@ AST_TYPE_MATCHER(RecordType, recordType); /// /// \c tagType() matches the type of the variable declarations of both \c e /// and \c c. -AST_TYPE_MATCHER(TagType, tagType); +extern const AstTypeMatcher tagType; /// \brief Matches types specified with an elaborated type keyword or with a /// qualified name. @@ -5258,7 +5220,7 @@ AST_TYPE_MATCHER(TagType, tagType); /// /// \c elaboratedType() matches the type of the variable declarations of both /// \c c and \c d. -AST_TYPE_MATCHER(ElaboratedType, elaboratedType); +extern const AstTypeMatcher elaboratedType; /// \brief Matches ElaboratedTypes whose qualifier, a NestedNameSpecifier, /// matches \c InnerMatcher if the qualifier exists. @@ -5315,7 +5277,8 @@ AST_MATCHER_P(ElaboratedType, namesType, internal::Matcher, /// \endcode /// /// \c substTemplateTypeParmType() matches the type of 't' but not '1' -AST_TYPE_MATCHER(SubstTemplateTypeParmType, substTemplateTypeParmType); +extern const AstTypeMatcher + substTemplateTypeParmType; /// \brief Matches template type parameter substitutions that have a replacement /// type that matches the provided matcher. @@ -5340,7 +5303,7 @@ AST_TYPE_TRAVERSE_MATCHER( /// \code /// template void f(int i); /// \endcode -AST_TYPE_MATCHER(TemplateTypeParmType, templateTypeParmType); +extern const AstTypeMatcher templateTypeParmType; /// \brief Matches injected class name types. /// @@ -5352,7 +5315,7 @@ AST_TYPE_MATCHER(TemplateTypeParmType, templateTypeParmType); /// void g(S s); /// }; /// \endcode -AST_TYPE_MATCHER(InjectedClassNameType, injectedClassNameType); +extern const AstTypeMatcher injectedClassNameType; /// \brief Matches decayed type /// Example matches i[] in declaration of f. @@ -5364,7 +5327,7 @@ AST_TYPE_MATCHER(InjectedClassNameType, injectedClassNameType); /// i[1] = 0; /// } /// \endcode -AST_TYPE_MATCHER(DecayedType, decayedType); +extern const AstTypeMatcher decayedType; /// \brief Matches the decayed type, whos decayed type matches \c InnerMatcher AST_MATCHER_P(DecayedType, hasDecayedType, internal::Matcher, @@ -5405,11 +5368,12 @@ AST_MATCHER_P(Decl, hasDeclContext, internal::Matcher, InnerMatcher) { /// \endcode /// nestedNameSpecifier() /// matches "ns::" and both "A::" -const internal::VariadicAllOfMatcher nestedNameSpecifier; +extern const internal::VariadicAllOfMatcher + nestedNameSpecifier; /// \brief Same as \c nestedNameSpecifier but matches \c NestedNameSpecifierLoc. -const internal::VariadicAllOfMatcher< - NestedNameSpecifierLoc> nestedNameSpecifierLoc; +extern const internal::VariadicAllOfMatcher + nestedNameSpecifierLoc; /// \brief Matches \c NestedNameSpecifierLocs for which the given inner /// NestedNameSpecifier-matcher matches. @@ -5768,9 +5732,8 @@ AST_MATCHER_P(ReturnStmt, hasReturnValue, internal::Matcher, /// \code /// kernel<<>>(); /// \endcode -const internal::VariadicDynCastAllOfMatcher< - Stmt, - CUDAKernelCallExpr> cudaKernelCallExpr; +extern const internal::VariadicDynCastAllOfMatcher + cudaKernelCallExpr; /// \brief Matches expressions that resolve to a null pointer constant, such as /// GNU's __null, C++11's nullptr, or C's NULL macro. diff --git a/lib/ASTMatchers/ASTMatchersInternal.cpp b/lib/ASTMatchers/ASTMatchersInternal.cpp index 491c7fc7b6..a8a7572596 100644 --- a/lib/ASTMatchers/ASTMatchersInternal.cpp +++ b/lib/ASTMatchers/ASTMatchersInternal.cpp @@ -526,5 +526,273 @@ bool HasNameMatcher::matchesNode(const NamedDecl &Node) const { } } // end namespace internal + +const internal::VariadicDynCastAllOfMatcher + translationUnitDecl; +const internal::VariadicDynCastAllOfMatcher typedefDecl; +const internal::VariadicDynCastAllOfMatcher + typedefNameDecl; +const internal::VariadicDynCastAllOfMatcher typeAliasDecl; +const internal::VariadicDynCastAllOfMatcher + typeAliasTemplateDecl; +const internal::VariadicAllOfMatcher decl; +const internal::VariadicDynCastAllOfMatcher + linkageSpecDecl; +const internal::VariadicDynCastAllOfMatcher namedDecl; +const internal::VariadicDynCastAllOfMatcher labelDecl; +const internal::VariadicDynCastAllOfMatcher namespaceDecl; +const internal::VariadicDynCastAllOfMatcher + namespaceAliasDecl; +const internal::VariadicDynCastAllOfMatcher recordDecl; +const internal::VariadicDynCastAllOfMatcher cxxRecordDecl; +const internal::VariadicDynCastAllOfMatcher + classTemplateDecl; +const internal::VariadicDynCastAllOfMatcher + classTemplateSpecializationDecl; +const internal::VariadicDynCastAllOfMatcher + declaratorDecl; +const internal::VariadicDynCastAllOfMatcher parmVarDecl; +const internal::VariadicDynCastAllOfMatcher + accessSpecDecl; +const internal::VariadicAllOfMatcher cxxCtorInitializer; +const internal::VariadicAllOfMatcher templateArgument; +const internal::VariadicAllOfMatcher templateName; +const internal::VariadicDynCastAllOfMatcher + nonTypeTemplateParmDecl; +const internal::VariadicDynCastAllOfMatcher + templateTypeParmDecl; +const internal::VariadicAllOfMatcher qualType; +const internal::VariadicAllOfMatcher type; +const internal::VariadicAllOfMatcher typeLoc; +const internal::VariadicDynCastAllOfMatcher + unaryExprOrTypeTraitExpr; +const internal::VariadicDynCastAllOfMatcher valueDecl; +const internal::VariadicDynCastAllOfMatcher + cxxConstructorDecl; +const internal::VariadicDynCastAllOfMatcher + cxxDestructorDecl; +const internal::VariadicDynCastAllOfMatcher enumDecl; +const internal::VariadicDynCastAllOfMatcher + enumConstantDecl; +const internal::VariadicDynCastAllOfMatcher cxxMethodDecl; +const internal::VariadicDynCastAllOfMatcher + cxxConversionDecl; +const internal::VariadicDynCastAllOfMatcher varDecl; +const internal::VariadicDynCastAllOfMatcher fieldDecl; +const internal::VariadicDynCastAllOfMatcher functionDecl; +const internal::VariadicDynCastAllOfMatcher + functionTemplateDecl; +const internal::VariadicDynCastAllOfMatcher friendDecl; +const internal::VariadicAllOfMatcher stmt; +const internal::VariadicDynCastAllOfMatcher declStmt; +const internal::VariadicDynCastAllOfMatcher memberExpr; +const internal::VariadicDynCastAllOfMatcher callExpr; +const internal::VariadicDynCastAllOfMatcher lambdaExpr; +const internal::VariadicDynCastAllOfMatcher + cxxMemberCallExpr; +const internal::VariadicDynCastAllOfMatcher + objcMessageExpr; +const internal::VariadicDynCastAllOfMatcher + objcInterfaceDecl; +const internal::VariadicDynCastAllOfMatcher + objcImplementationDecl; +const internal::VariadicDynCastAllOfMatcher + objcProtocolDecl; +const internal::VariadicDynCastAllOfMatcher + objcCategoryDecl; +const internal::VariadicDynCastAllOfMatcher + objcCategoryImplDecl; +const internal::VariadicDynCastAllOfMatcher + objcMethodDecl; +const internal::VariadicDynCastAllOfMatcher objcIvarDecl; +const internal::VariadicDynCastAllOfMatcher + objcPropertyDecl; +const internal::VariadicDynCastAllOfMatcher + objcThrowStmt; +const internal::VariadicDynCastAllOfMatcher objcTryStmt; +const internal::VariadicDynCastAllOfMatcher + objcCatchStmt; +const internal::VariadicDynCastAllOfMatcher + objcFinallyStmt; +const internal::VariadicDynCastAllOfMatcher + exprWithCleanups; +const internal::VariadicDynCastAllOfMatcher initListExpr; +const internal::VariadicDynCastAllOfMatcher + cxxStdInitializerListExpr; +const internal::VariadicDynCastAllOfMatcher + implicitValueInitExpr; +const internal::VariadicDynCastAllOfMatcher parenListExpr; +const internal::VariadicDynCastAllOfMatcher + substNonTypeTemplateParmExpr; +const internal::VariadicDynCastAllOfMatcher usingDecl; +const internal::VariadicDynCastAllOfMatcher + usingDirectiveDecl; +const internal::VariadicDynCastAllOfMatcher + unresolvedLookupExpr; +const internal::VariadicDynCastAllOfMatcher + unresolvedUsingValueDecl; +const internal::VariadicDynCastAllOfMatcher + unresolvedUsingTypenameDecl; +const internal::VariadicDynCastAllOfMatcher parenExpr; +const internal::VariadicDynCastAllOfMatcher + cxxConstructExpr; +const internal::VariadicDynCastAllOfMatcher + cxxUnresolvedConstructExpr; +const internal::VariadicDynCastAllOfMatcher cxxThisExpr; +const internal::VariadicDynCastAllOfMatcher + cxxBindTemporaryExpr; +const internal::VariadicDynCastAllOfMatcher + materializeTemporaryExpr; +const internal::VariadicDynCastAllOfMatcher cxxNewExpr; +const internal::VariadicDynCastAllOfMatcher cxxDeleteExpr; +const internal::VariadicDynCastAllOfMatcher + arraySubscriptExpr; +const internal::VariadicDynCastAllOfMatcher + cxxDefaultArgExpr; +const internal::VariadicDynCastAllOfMatcher + cxxOperatorCallExpr; +const internal::VariadicDynCastAllOfMatcher expr; +const internal::VariadicDynCastAllOfMatcher declRefExpr; +const internal::VariadicDynCastAllOfMatcher ifStmt; +const internal::VariadicDynCastAllOfMatcher forStmt; +const internal::VariadicDynCastAllOfMatcher + cxxForRangeStmt; +const internal::VariadicDynCastAllOfMatcher whileStmt; +const internal::VariadicDynCastAllOfMatcher doStmt; +const internal::VariadicDynCastAllOfMatcher breakStmt; +const internal::VariadicDynCastAllOfMatcher continueStmt; +const internal::VariadicDynCastAllOfMatcher returnStmt; +const internal::VariadicDynCastAllOfMatcher gotoStmt; +const internal::VariadicDynCastAllOfMatcher labelStmt; +const internal::VariadicDynCastAllOfMatcher addrLabelExpr; +const internal::VariadicDynCastAllOfMatcher switchStmt; +const internal::VariadicDynCastAllOfMatcher switchCase; +const internal::VariadicDynCastAllOfMatcher caseStmt; +const internal::VariadicDynCastAllOfMatcher defaultStmt; +const internal::VariadicDynCastAllOfMatcher compoundStmt; +const internal::VariadicDynCastAllOfMatcher cxxCatchStmt; +const internal::VariadicDynCastAllOfMatcher cxxTryStmt; +const internal::VariadicDynCastAllOfMatcher cxxThrowExpr; +const internal::VariadicDynCastAllOfMatcher nullStmt; +const internal::VariadicDynCastAllOfMatcher asmStmt; +const internal::VariadicDynCastAllOfMatcher + cxxBoolLiteral; +const internal::VariadicDynCastAllOfMatcher stringLiteral; +const internal::VariadicDynCastAllOfMatcher + characterLiteral; +const internal::VariadicDynCastAllOfMatcher + integerLiteral; +const internal::VariadicDynCastAllOfMatcher floatLiteral; +const internal::VariadicDynCastAllOfMatcher + userDefinedLiteral; +const internal::VariadicDynCastAllOfMatcher + compoundLiteralExpr; +const internal::VariadicDynCastAllOfMatcher + cxxNullPtrLiteralExpr; +const internal::VariadicDynCastAllOfMatcher gnuNullExpr; +const internal::VariadicDynCastAllOfMatcher atomicExpr; +const internal::VariadicDynCastAllOfMatcher stmtExpr; +const internal::VariadicDynCastAllOfMatcher + binaryOperator; +const internal::VariadicDynCastAllOfMatcher unaryOperator; +const internal::VariadicDynCastAllOfMatcher + conditionalOperator; +const internal::VariadicDynCastAllOfMatcher + binaryConditionalOperator; +const internal::VariadicDynCastAllOfMatcher + opaqueValueExpr; +const internal::VariadicDynCastAllOfMatcher + staticAssertDecl; +const internal::VariadicDynCastAllOfMatcher + cxxReinterpretCastExpr; +const internal::VariadicDynCastAllOfMatcher + cxxStaticCastExpr; +const internal::VariadicDynCastAllOfMatcher + cxxDynamicCastExpr; +const internal::VariadicDynCastAllOfMatcher + cxxConstCastExpr; +const internal::VariadicDynCastAllOfMatcher + cStyleCastExpr; +const internal::VariadicDynCastAllOfMatcher + explicitCastExpr; +const internal::VariadicDynCastAllOfMatcher + implicitCastExpr; +const internal::VariadicDynCastAllOfMatcher castExpr; +const internal::VariadicDynCastAllOfMatcher + cxxFunctionalCastExpr; +const internal::VariadicDynCastAllOfMatcher + cxxTemporaryObjectExpr; +const internal::VariadicDynCastAllOfMatcher + predefinedExpr; +const internal::VariadicDynCastAllOfMatcher + designatedInitExpr; +const internal::VariadicOperatorMatcherFunc< + 2, std::numeric_limits::max()> + eachOf = {internal::DynTypedMatcher::VO_EachOf}; +const internal::VariadicOperatorMatcherFunc< + 2, std::numeric_limits::max()> + anyOf = {internal::DynTypedMatcher::VO_AnyOf}; +const internal::VariadicOperatorMatcherFunc< + 2, std::numeric_limits::max()> + allOf = {internal::DynTypedMatcher::VO_AllOf}; +const internal::VariadicFunction, StringRef, + internal::hasAnyNameFunc> + hasAnyName = {}; +const internal::ArgumentAdaptingMatcherFunc has = {}; +const internal::ArgumentAdaptingMatcherFunc + hasDescendant = {}; +const internal::ArgumentAdaptingMatcherFunc forEach = + {}; +const internal::ArgumentAdaptingMatcherFunc + forEachDescendant = {}; +const internal::ArgumentAdaptingMatcherFunc< + internal::HasParentMatcher, + internal::TypeList, + internal::TypeList> + hasParent = {}; +const internal::ArgumentAdaptingMatcherFunc< + internal::HasAncestorMatcher, + internal::TypeList, + internal::TypeList> + hasAncestor = {}; +const internal::VariadicOperatorMatcherFunc<1, 1> unless = { + internal::DynTypedMatcher::VO_UnaryNot}; +const internal::VariadicAllOfMatcher nestedNameSpecifier; +const internal::VariadicAllOfMatcher + nestedNameSpecifierLoc; +const internal::VariadicDynCastAllOfMatcher + cudaKernelCallExpr; +const AstTypeMatcher builtinType; +const AstTypeMatcher arrayType; +const AstTypeMatcher complexType; +const AstTypeMatcher constantArrayType; +const AstTypeMatcher dependentSizedArrayType; +const AstTypeMatcher incompleteArrayType; +const AstTypeMatcher variableArrayType; +const AstTypeMatcher atomicType; +const AstTypeMatcher autoType; +const AstTypeMatcher functionType; +const AstTypeMatcher functionProtoType; +const AstTypeMatcher parenType; +const AstTypeMatcher blockPointerType; +const AstTypeMatcher memberPointerType; +const AstTypeMatcher pointerType; +const AstTypeMatcher objcObjectPointerType; +const AstTypeMatcher referenceType; +const AstTypeMatcher lValueReferenceType; +const AstTypeMatcher rValueReferenceType; +const AstTypeMatcher typedefType; +const AstTypeMatcher enumType; +const AstTypeMatcher templateSpecializationType; +const AstTypeMatcher unaryTransformType; +const AstTypeMatcher recordType; +const AstTypeMatcher tagType; +const AstTypeMatcher elaboratedType; +const AstTypeMatcher substTemplateTypeParmType; +const AstTypeMatcher templateTypeParmType; +const AstTypeMatcher injectedClassNameType; +const AstTypeMatcher decayedType; + } // end namespace ast_matchers } // end namespace clang