Skip to content

Commit 615209b

Browse files
committed
support_for_target_directive_clang_unittests
1 parent d4f9c11 commit 615209b

File tree

5 files changed

+118
-0
lines changed

5 files changed

+118
-0
lines changed

clang/include/clang/ASTMatchers/ASTMatchers.h

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8735,6 +8735,21 @@ AST_MATCHER_P(OMPExecutableDirective, hasAnyClause,
87358735
Builder) != Clauses.end();
87368736
}
87378737

8738+
/// Matches any ``#pragma omp target update`` executable directive.
8739+
///
8740+
/// Given
8741+
///
8742+
/// \code
8743+
/// #pragma omp target update from(a)
8744+
/// #pragma omp target update to(b)
8745+
/// \endcode
8746+
///
8747+
/// ``ompTargetUpdateDirective()`` matches both ``omp target update from(a)``
8748+
/// and ``omp target update to(b)``.
8749+
extern const internal::VariadicDynCastAllOfMatcher<Stmt,
8750+
OMPTargetUpdateDirective>
8751+
ompTargetUpdateDirective;
8752+
87388753
/// Matches OpenMP ``default`` clause.
87398754
///
87408755
/// Given
@@ -8848,6 +8863,18 @@ AST_MATCHER_P(OMPExecutableDirective, isAllowedToContainClauseKind,
88488863
Finder->getASTContext().getLangOpts().OpenMP);
88498864
}
88508865

8866+
/// Matches OpenMP ``from`` clause.
8867+
///
8868+
/// Given
8869+
///
8870+
/// \code
8871+
/// #pragma omp target update from(a)
8872+
/// \endcode
8873+
///
8874+
/// ``ompFromClause()`` matches ``from(a)``.
8875+
extern const internal::VariadicDynCastAllOfMatcher<OMPClause, OMPFromClause>
8876+
ompFromClause;
8877+
88518878
//----------------------------------------------------------------------------//
88528879
// End OpenMP handling.
88538880
//----------------------------------------------------------------------------//

clang/lib/ASTMatchers/ASTMatchersInternal.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1125,8 +1125,12 @@ AST_TYPELOC_TRAVERSE_MATCHER_DEF(
11251125

11261126
const internal::VariadicDynCastAllOfMatcher<Stmt, OMPExecutableDirective>
11271127
ompExecutableDirective;
1128+
const internal::VariadicDynCastAllOfMatcher<Stmt, OMPTargetUpdateDirective>
1129+
ompTargetUpdateDirective;
11281130
const internal::VariadicDynCastAllOfMatcher<OMPClause, OMPDefaultClause>
11291131
ompDefaultClause;
1132+
const internal::VariadicDynCastAllOfMatcher<OMPClause, OMPFromClause>
1133+
ompFromClause;
11301134
const internal::VariadicDynCastAllOfMatcher<Decl, CXXDeductionGuideDecl>
11311135
cxxDeductionGuideDecl;
11321136

clang/lib/ASTMatchers/Dynamic/Registry.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,9 @@ RegistryMaps::RegistryMaps() {
531531
REGISTER_MATCHER(ofClass);
532532
REGISTER_MATCHER(ofKind);
533533
REGISTER_MATCHER(ompDefaultClause);
534+
REGISTER_MATCHER(ompFromClause);
534535
REGISTER_MATCHER(ompExecutableDirective);
536+
REGISTER_MATCHER(ompTargetUpdateDirective);
535537
REGISTER_MATCHER(on);
536538
REGISTER_MATCHER(onImplicitObjectArgument);
537539
REGISTER_MATCHER(opaqueValueExpr);

clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4737,6 +4737,65 @@ void x() {
47374737
EXPECT_TRUE(matchesWithOpenMP(Source8, Matcher));
47384738
}
47394739

4740+
TEST_P(ASTMatchersTest, OMPTargetUpdateDirective_IsStandaloneDirective) {
4741+
auto Matcher = ompTargetUpdateDirective(isStandaloneDirective());
4742+
4743+
StringRef Source0 = R"(
4744+
void foo() {
4745+
int arr[8];
4746+
#pragma omp target update from(arr[0:8:2])
4747+
;
4748+
}
4749+
)";
4750+
EXPECT_TRUE(matchesWithOpenMP(Source0, Matcher));
4751+
}
4752+
4753+
TEST_P(ASTMatchersTest, OMPTargetUpdateDirective_HasStructuredBlock) {
4754+
StringRef Source0 = R"(
4755+
void foo() {
4756+
int arr[8];
4757+
#pragma omp target update from(arr[0:8:2])
4758+
;
4759+
}
4760+
)";
4761+
EXPECT_TRUE(notMatchesWithOpenMP(
4762+
Source0, ompTargetUpdateDirective(hasStructuredBlock(nullStmt()))));
4763+
}
4764+
4765+
TEST_P(ASTMatchersTest, OMPTargetUpdateDirective_HasClause) {
4766+
auto Matcher = ompTargetUpdateDirective(hasAnyClause(anything()));
4767+
4768+
StringRef Source0 = R"(
4769+
void foo() {
4770+
int arr[8];
4771+
#pragma omp target update from(arr[0:8:2])
4772+
;
4773+
}
4774+
)";
4775+
EXPECT_TRUE(matchesWithOpenMP(Source0, Matcher));
4776+
}
4777+
4778+
TEST_P(ASTMatchersTest, OMPTargetUpdateDirective_IsAllowedToContainClauseKind) {
4779+
auto Matcher = ompTargetUpdateDirective(
4780+
isAllowedToContainClauseKind(llvm::omp::OMPC_from));
4781+
4782+
StringRef Source0 = R"(
4783+
void x() {
4784+
;
4785+
}
4786+
)";
4787+
EXPECT_TRUE(notMatchesWithOpenMP(Source0, Matcher));
4788+
4789+
StringRef Source1 = R"(
4790+
void foo() {
4791+
int arr[8];
4792+
#pragma omp target update from(arr[0:8:2])
4793+
;
4794+
}
4795+
)";
4796+
EXPECT_TRUE(matchesWithOpenMP(Source1, Matcher));
4797+
}
4798+
47404799
TEST_P(ASTMatchersTest, HasAnyBase_DirectBase) {
47414800
if (!GetParam().isCXX()) {
47424801
return;

clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2779,6 +2779,32 @@ void x() {
27792779
EXPECT_TRUE(notMatchesWithOpenMP(Source2, Matcher));
27802780
}
27812781

2782+
TEST(ASTMatchersTestOpenMP, OMPTargetUpdateDirective) {
2783+
auto Matcher = stmt(ompTargetUpdateDirective());
2784+
2785+
StringRef Source0 = R"(
2786+
void foo() {
2787+
int arr[8];
2788+
#pragma omp target update from(arr[0:8:2])
2789+
;
2790+
}
2791+
)";
2792+
EXPECT_TRUE(matchesWithOpenMP(Source0, Matcher));
2793+
}
2794+
2795+
TEST(ASTMatchersTestOpenMP, OMPFromClause) {
2796+
auto Matcher = ompTargetUpdateDirective(hasAnyClause(ompFromClause()));
2797+
2798+
StringRef Source0 = R"(
2799+
void foo() {
2800+
int arr[8];
2801+
#pragma omp target update from(arr[0:8:2])
2802+
;
2803+
}
2804+
)";
2805+
EXPECT_TRUE(matchesWithOpenMP(Source0, Matcher));
2806+
}
2807+
27822808
TEST(ASTMatchersTestOpenMP, OMPDefaultClause) {
27832809
auto Matcher = ompExecutableDirective(hasAnyClause(ompDefaultClause()));
27842810

0 commit comments

Comments
 (0)