Skip to content

Commit a51d263

Browse files
authored
Adding warning for Master as it is deprecated in 5.2 (#98955)
Since `master` is deprecated from OpenMP spec 5.2, warning is added. Using `masked` is the recommended alternative as per spec
1 parent d0ca9f2 commit a51d263

File tree

7 files changed

+44
-5
lines changed

7 files changed

+44
-5
lines changed

flang/lib/Semantics/resolve-directives.cpp

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -734,6 +734,8 @@ class OmpAttributeVisitor : DirectiveAttributeVisitor<llvm::omp::Directive> {
734734

735735
void AddOmpRequiresToScope(Scope &, WithOmpDeclarative::RequiresFlags,
736736
std::optional<common::OmpAtomicDefaultMemOrderType>);
737+
void IssueNonConformanceWarning(
738+
llvm::omp::Directive D, parser::CharBlock source);
737739
};
738740

739741
template <typename T>
@@ -1524,6 +1526,8 @@ bool OmpAttributeVisitor::Pre(const parser::OpenMPBlockConstruct &x) {
15241526
// TODO others
15251527
break;
15261528
}
1529+
if (beginDir.v == llvm::omp::Directive::OMPD_master)
1530+
IssueNonConformanceWarning(beginDir.v, beginDir.source);
15271531
ClearDataSharingAttributeObjects();
15281532
ClearPrivateDataSharingAttributeObjects();
15291533
ClearAllocateNames();
@@ -1634,11 +1638,7 @@ bool OmpAttributeVisitor::Pre(const parser::OpenMPLoopConstruct &x) {
16341638
break;
16351639
}
16361640
if (beginDir.v == llvm::omp::Directive::OMPD_target_loop)
1637-
if (context_.ShouldWarn(common::UsageWarning::OpenMPUsage)) {
1638-
context_.Say(beginDir.source,
1639-
"Usage of directive %s is non-confirming to OpenMP standard"_warn_en_US,
1640-
llvm::omp::getOpenMPDirectiveName(beginDir.v).str());
1641-
}
1641+
IssueNonConformanceWarning(beginDir.v, beginDir.source);
16421642
ClearDataSharingAttributeObjects();
16431643
SetContextAssociatedLoopLevel(GetAssociatedLoopLevelFromClauses(clauseList));
16441644

@@ -2800,4 +2800,21 @@ void OmpAttributeVisitor::AddOmpRequiresToScope(Scope &scope,
28002800
} while (!scopeIter->IsGlobal());
28012801
}
28022802

2803+
void OmpAttributeVisitor::IssueNonConformanceWarning(
2804+
llvm::omp::Directive D, parser::CharBlock source) {
2805+
std::string warnStr = "";
2806+
std::string dirName = llvm::omp::getOpenMPDirectiveName(D).str();
2807+
switch (D) {
2808+
case llvm::omp::OMPD_master:
2809+
warnStr = "OpenMP directive '" + dirName +
2810+
"' has been deprecated, please use 'masked' instead.";
2811+
break;
2812+
case llvm::omp::OMPD_target_loop:
2813+
default:
2814+
warnStr = "OpenMP directive '" + dirName + "' has been deprecated.";
2815+
}
2816+
if (context_.ShouldWarn(common::UsageWarning::OpenMPUsage)) {
2817+
context_.Say(source, "%s"_warn_en_US, warnStr);
2818+
}
2819+
}
28032820
} // namespace Fortran::semantics

flang/test/Semantics/OpenMP/clause-validity01.f90

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -470,12 +470,14 @@
470470
! 2.13.1 master
471471

472472
!$omp parallel
473+
!WARNING: OpenMP directive 'master' has been deprecated, please use 'masked' instead.
473474
!$omp master
474475
a=3.14
475476
!$omp end master
476477
!$omp end parallel
477478

478479
!$omp parallel
480+
!WARNING: OpenMP directive 'master' has been deprecated, please use 'masked' instead.
479481
!ERROR: NUM_THREADS clause is not allowed on the MASTER directive
480482
!$omp master num_threads(4)
481483
a=3.14

flang/test/Semantics/OpenMP/flush02.f90

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080

8181
!$omp parallel num_threads(4)
8282
array = (/1, 2, 3, 4, 5, 6, 7, 8, 9, 10/)
83+
!WARNING: OpenMP directive 'master' has been deprecated, please use 'masked' instead.
8384
!$omp master
8485
!$omp flush (array)
8586
!$omp end master

flang/test/Semantics/OpenMP/nested-barrier.f90

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ program omp_nest_barrier
7575
end do
7676
!$omp end critical
7777

78+
!WARNING: OpenMP directive 'master' has been deprecated, please use 'masked' instead.
7879
!$omp master
7980
do i = 1, 10
8081
k = k + 1
@@ -107,6 +108,7 @@ program omp_nest_barrier
107108
end do
108109
!$omp end ordered
109110

111+
!WARNING: OpenMP directive 'master' has been deprecated, please use 'masked' instead.
110112
!$omp master
111113
do i = 1, 10
112114
!ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region.

flang/test/Semantics/OpenMP/nested-master.f90

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@ program omp_nest_master
99
!$omp do
1010
do i = 1, 10
1111
k = k + 1
12+
!WARNING: OpenMP directive 'master' has been deprecated, please use 'masked' instead.
1213
!ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
1314
!$omp master
1415
j = j -1
1516
!$omp end master
1617
end do
1718

1819
!$omp sections
20+
!WARNING: OpenMP directive 'master' has been deprecated, please use 'masked' instead.
1921
!ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
2022
!$omp master
2123
do i = 1, 10
@@ -25,6 +27,7 @@ program omp_nest_master
2527
!$omp end sections
2628

2729
!$omp single
30+
!WARNING: OpenMP directive 'master' has been deprecated, please use 'masked' instead.
2831
!ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
2932
!$omp master
3033
do i = 1, 10
@@ -38,6 +41,7 @@ program omp_nest_master
3841
!$omp task
3942
do i = 1, 10
4043
k = k + 1
44+
!WARNING: OpenMP directive 'master' has been deprecated, please use 'masked' instead.
4145
!ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
4246
!$omp master
4347
j = j -1
@@ -48,6 +52,7 @@ program omp_nest_master
4852
!$omp taskloop
4953
do i = 1, 10
5054
k = k + 1
55+
!WARNING: OpenMP directive 'master' has been deprecated, please use 'masked' instead.
5156
!ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
5257
!$omp master
5358
j = j -1
@@ -58,6 +63,7 @@ program omp_nest_master
5863
!$omp target parallel do simd
5964
do i = 1, 10
6065
k = k + 1
66+
!WARNING: OpenMP directive 'master' has been deprecated, please use 'masked' instead.
6167
!ERROR: The only OpenMP constructs that can be encountered during execution of a 'SIMD' region are the `ATOMIC` construct, the `LOOP` construct, the `SIMD` construct and the `ORDERED` construct with the `SIMD` clause.
6268
!ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
6369
!$omp master
@@ -69,6 +75,7 @@ program omp_nest_master
6975
!$omp critical
7076
do i = 1, 10
7177
k = k + 1
78+
!WARNING: OpenMP directive 'master' has been deprecated, please use 'masked' instead.
7279
!$omp master
7380
j = j -1
7481
!$omp end master
@@ -78,6 +85,7 @@ program omp_nest_master
7885
!$omp ordered
7986
do i = 1, 10
8087
k = k + 1
88+
!WARNING: OpenMP directive 'master' has been deprecated, please use 'masked' instead.
8189
!$omp master
8290
j = j -1
8391
!$omp end master
@@ -91,6 +99,7 @@ program omp_nest_master
9199
!$omp distribute
92100
do k =1, 10
93101
print *, "hello"
102+
!WARNING: OpenMP directive 'master' has been deprecated, please use 'masked' instead.
94103
!$omp master
95104
j = j -1
96105
!$omp end master
@@ -107,6 +116,7 @@ program omp_nest_master
107116
!$omp distribute
108117
do k =1, 10
109118
print *, "hello"
119+
!WARNING: OpenMP directive 'master' has been deprecated, please use 'masked' instead.
110120
!$omp master
111121
j = j -1
112122
!$omp end master
@@ -123,6 +133,7 @@ program omp_nest_master
123133
!$omp distribute
124134
do k =1, 10
125135
print *, "hello"
136+
!WARNING: OpenMP directive 'master' has been deprecated, please use 'masked' instead.
126137
!ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
127138
!$omp master
128139
j = j -1
@@ -140,6 +151,7 @@ program omp_nest_master
140151
!$omp distribute
141152
do k =1, 10
142153
print *, "hello"
154+
!WARNING: OpenMP directive 'master' has been deprecated, please use 'masked' instead.
143155
!ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
144156
!$omp master
145157
j = j -1

flang/test/Semantics/OpenMP/nested-teams.f90

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ program main
4242
!$omp end teams
4343
end do
4444

45+
!WARNING: OpenMP directive 'master' has been deprecated, please use 'masked' instead.
4546
!$omp master
4647
!ERROR: TEAMS region can only be strictly nested within the implicit parallel region or TARGET region
4748
!$omp teams

flang/test/Semantics/OpenMP/ordered-simd.f90

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ SUBROUTINE ORDERED_BAD(N)
9595

9696
!$OMP CRITICAL
9797
C = C - A * B
98+
!WARNING: OpenMP directive 'master' has been deprecated, please use 'masked' instead.
9899
!$OMP MASTER
99100
DO I = 1,N
100101
!ERROR: `ORDERED` region may not be closely nested inside of `CRITICAL`, `ORDERED`, explicit `TASK` or `TASKLOOP` region.
@@ -107,6 +108,7 @@ SUBROUTINE ORDERED_BAD(N)
107108

108109
!$OMP ORDERED
109110
C = C - A * B
111+
!WARNING: OpenMP directive 'master' has been deprecated, please use 'masked' instead.
110112
!$OMP MASTER
111113
DO I = 1,N
112114
!ERROR: `ORDERED` region may not be closely nested inside of `CRITICAL`, `ORDERED`, explicit `TASK` or `TASKLOOP` region.
@@ -119,6 +121,7 @@ SUBROUTINE ORDERED_BAD(N)
119121

120122
!$OMP TASK
121123
C = C - A * B
124+
!WARNING: OpenMP directive 'master' has been deprecated, please use 'masked' instead.
122125
!ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
123126
!$OMP MASTER
124127
DO I = 1,N
@@ -133,6 +136,7 @@ SUBROUTINE ORDERED_BAD(N)
133136
!$OMP TASKLOOP
134137
DO J= 1,N
135138
C = C - A * B
139+
!WARNING: OpenMP directive 'master' has been deprecated, please use 'masked' instead.
136140
!ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
137141
!$OMP MASTER
138142
DO I = 1,N

0 commit comments

Comments
 (0)