Skip to content

Commit f9360e3

Browse files
[clang] Make 'fileScopeAsmDecl' matcher public (#165319)
This PR makes the `fileScopeAsmDecl` matcher public.
1 parent 92da0ec commit f9360e3

File tree

6 files changed

+44
-11
lines changed

6 files changed

+44
-11
lines changed

clang-tools-extra/clang-tidy/hicpp/NoAssemblerCheck.cpp

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,10 @@ using namespace clang::ast_matchers;
1313

1414
namespace clang::tidy::hicpp {
1515

16-
namespace {
17-
AST_MATCHER(VarDecl, isAsm) { return Node.hasAttr<clang::AsmLabelAttr>(); }
18-
const ast_matchers::internal::VariadicDynCastAllOfMatcher<Decl,
19-
FileScopeAsmDecl>
20-
fileScopeAsmDecl; // NOLINT(readability-identifier-*) preserve clang style
21-
} // namespace
22-
2316
void NoAssemblerCheck::registerMatchers(MatchFinder *Finder) {
2417
Finder->addMatcher(asmStmt().bind("asm-stmt"), this);
2518
Finder->addMatcher(fileScopeAsmDecl().bind("asm-file-scope"), this);
26-
Finder->addMatcher(varDecl(isAsm()).bind("asm-var"), this);
19+
Finder->addMatcher(varDecl(hasAttr(attr::AsmLabel)).bind("asm-var"), this);
2720
}
2821

2922
void NoAssemblerCheck::check(const MatchFinder::MatchResult &Result) {

clang/docs/LibASTMatchersReference.html

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -825,6 +825,20 @@ <h2 id="decl-matchers">Node Matchers</h2>
825825
</pre></td></tr>
826826

827827

828+
<tr><td>Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('fileScopeAsmDecl0')"><a name="fileScopeAsmDecl0Anchor">fileScopeAsmDecl</a></td><td>Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1FileScopeAsmDecl.html">FileScopeAsmDecl</a>&gt;...</td></tr>
829+
<tr><td colspan="4" class="doc" id="fileScopeAsmDecl0"><pre>Matches top level asm declarations.
830+
831+
Given
832+
__asm("nop");
833+
void f() {
834+
__asm("mov al, 2");
835+
}
836+
fileScopeAsmDecl()
837+
matches '__asm("nop")',
838+
but not '__asm("mov al, 2")'.
839+
</pre></td></tr>
840+
841+
828842
<tr><td>Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('friendDecl0')"><a name="friendDecl0Anchor">friendDecl</a></td><td>Matcher&lt;<a href="https://clang.llvm.org/doxygen/classclang_1_1FriendDecl.html">FriendDecl</a>&gt;...</td></tr>
829843
<tr><td colspan="4" class="doc" id="friendDecl0"><pre>Matches friend declarations.
830844

clang/include/clang/ASTMatchers/ASTMatchers.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2478,6 +2478,21 @@ extern const internal::VariadicDynCastAllOfMatcher<Stmt, NullStmt> nullStmt;
24782478
/// matches '__asm("mov al, 2")'
24792479
extern const internal::VariadicDynCastAllOfMatcher<Stmt, AsmStmt> asmStmt;
24802480

2481+
/// Matches top level asm declarations.
2482+
///
2483+
/// Given
2484+
/// \code
2485+
/// __asm("nop");
2486+
/// void f() {
2487+
/// __asm("mov al, 2");
2488+
/// }
2489+
/// \endcode
2490+
/// fileScopeAsmDecl()
2491+
/// matches '__asm("nop")',
2492+
/// but not '__asm("mov al, 2")'.
2493+
extern const internal::VariadicDynCastAllOfMatcher<Decl, FileScopeAsmDecl>
2494+
fileScopeAsmDecl;
2495+
24812496
/// Matches bool literals.
24822497
///
24832498
/// Example matches true

clang/lib/ASTMatchers/ASTMatchersInternal.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -954,6 +954,8 @@ const internal::VariadicDynCastAllOfMatcher<Stmt, CXXTryStmt> cxxTryStmt;
954954
const internal::VariadicDynCastAllOfMatcher<Stmt, CXXThrowExpr> cxxThrowExpr;
955955
const internal::VariadicDynCastAllOfMatcher<Stmt, NullStmt> nullStmt;
956956
const internal::VariadicDynCastAllOfMatcher<Stmt, AsmStmt> asmStmt;
957+
const internal::VariadicDynCastAllOfMatcher<Decl, FileScopeAsmDecl>
958+
fileScopeAsmDecl;
957959
const internal::VariadicDynCastAllOfMatcher<Stmt, CXXBoolLiteralExpr>
958960
cxxBoolLiteral;
959961
const internal::VariadicDynCastAllOfMatcher<Stmt, StringLiteral> stringLiteral;

clang/lib/ASTMatchers/Dynamic/Registry.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,7 @@ RegistryMaps::RegistryMaps() {
246246
REGISTER_MATCHER(expr);
247247
REGISTER_MATCHER(exprWithCleanups);
248248
REGISTER_MATCHER(fieldDecl);
249+
REGISTER_MATCHER(fileScopeAsmDecl);
249250
REGISTER_MATCHER(fixedPointLiteral);
250251
REGISTER_MATCHER(floatLiteral);
251252
REGISTER_MATCHER(forCallable);

clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1179,6 +1179,12 @@ TEST_P(ASTMatchersTest, PredefinedExpr) {
11791179
has(stringLiteral()))));
11801180
}
11811181

1182+
TEST_P(ASTMatchersTest, FileScopeAsmDecl) {
1183+
EXPECT_TRUE(matches("__asm(\"nop\");", fileScopeAsmDecl()));
1184+
EXPECT_TRUE(
1185+
notMatches("void f() { __asm(\"mov al, 2\"); }", fileScopeAsmDecl()));
1186+
}
1187+
11821188
TEST_P(ASTMatchersTest, AsmStatement) {
11831189
EXPECT_TRUE(matches("void foo() { __asm(\"mov al, 2\"); }", asmStmt()));
11841190
}
@@ -2442,15 +2448,17 @@ TEST_P(ASTMatchersTest, LambdaCaptureTest_BindsToCaptureOfReferenceType) {
24422448
"int main() {"
24432449
" int a;"
24442450
" f(a);"
2445-
"}", matcher));
2451+
"}",
2452+
matcher));
24462453
EXPECT_FALSE(matches("template <class ...T> void f(T &...args) {"
24472454
" [...args = args] () mutable {"
24482455
" }();"
24492456
"}"
24502457
"int main() {"
24512458
" int a;"
24522459
" f(a);"
2453-
"}", matcher));
2460+
"}",
2461+
matcher));
24542462
}
24552463

24562464
TEST_P(ASTMatchersTest, IsDerivedFromRecursion) {
@@ -2628,7 +2636,7 @@ TEST(ASTMatchersTestObjC, ObjCStringLiteral) {
26282636
" [Test someFunction:@\"Ola!\"]; "
26292637
"}\n"
26302638
"@end ";
2631-
EXPECT_TRUE(matchesObjC(Objc1String, objcStringLiteral()));
2639+
EXPECT_TRUE(matchesObjC(Objc1String, objcStringLiteral()));
26322640
}
26332641

26342642
TEST(ASTMatchersTestObjC, ObjCDecls) {

0 commit comments

Comments
 (0)