@@ -833,8 +833,8 @@ class OmpAttributeVisitor : DirectiveAttributeVisitor<llvm::omp::Directive> {
833
833
834
834
void AddOmpRequiresToScope (Scope &, WithOmpDeclarative::RequiresFlags,
835
835
std::optional<common::OmpMemoryOrderType>);
836
- void IssueNonConformanceWarning (
837
- llvm::omp::Directive D, parser::CharBlock source);
836
+ void IssueNonConformanceWarning (llvm::omp::Directive D,
837
+ parser::CharBlock source, unsigned emit_from_version );
838
838
839
839
void CreateImplicitSymbols (const Symbol *symbol);
840
840
@@ -1664,10 +1664,9 @@ bool OmpAttributeVisitor::Pre(const parser::OpenMPBlockConstruct &x) {
1664
1664
// TODO others
1665
1665
break ;
1666
1666
}
1667
- if ((beginDir.v == llvm::omp::Directive::OMPD_master ||
1668
- beginDir.v == llvm::omp::Directive::OMPD_parallel_master) &&
1669
- context_.langOptions ().OpenMPVersion >= 52 )
1670
- IssueNonConformanceWarning (beginDir.v , beginDir.source );
1667
+ if (beginDir.v == llvm::omp::Directive::OMPD_master ||
1668
+ beginDir.v == llvm::omp::Directive::OMPD_parallel_master)
1669
+ IssueNonConformanceWarning (beginDir.v , beginDir.source , 52 );
1671
1670
ClearDataSharingAttributeObjects ();
1672
1671
ClearPrivateDataSharingAttributeObjects ();
1673
1672
ClearAllocateNames ();
@@ -1785,13 +1784,12 @@ bool OmpAttributeVisitor::Pre(const parser::OpenMPLoopConstruct &x) {
1785
1784
default :
1786
1785
break ;
1787
1786
}
1788
- if ((beginDir.v == llvm::omp::OMPD_master_taskloop ||
1789
- beginDir.v == llvm::omp::OMPD_master_taskloop_simd ||
1790
- beginDir.v == llvm::omp::OMPD_parallel_master_taskloop ||
1791
- beginDir.v == llvm::omp::OMPD_parallel_master_taskloop_simd ||
1792
- beginDir.v == llvm::omp::Directive::OMPD_target_loop) &&
1793
- context_.langOptions ().OpenMPVersion >= 52 )
1794
- IssueNonConformanceWarning (beginDir.v , beginDir.source );
1787
+ if (beginDir.v == llvm::omp::OMPD_master_taskloop ||
1788
+ beginDir.v == llvm::omp::OMPD_master_taskloop_simd ||
1789
+ beginDir.v == llvm::omp::OMPD_parallel_master_taskloop ||
1790
+ beginDir.v == llvm::omp::OMPD_parallel_master_taskloop_simd ||
1791
+ beginDir.v == llvm::omp::Directive::OMPD_target_loop)
1792
+ IssueNonConformanceWarning (beginDir.v , beginDir.source , 52 );
1795
1793
ClearDataSharingAttributeObjects ();
1796
1794
SetContextAssociatedLoopLevel (GetAssociatedLoopLevelFromClauses (clauseList));
1797
1795
@@ -2075,9 +2073,7 @@ bool OmpAttributeVisitor::Pre(const parser::OpenMPDispatchConstruct &x) {
2075
2073
}
2076
2074
2077
2075
bool OmpAttributeVisitor::Pre (const parser::OpenMPExecutableAllocate &x) {
2078
- if (context_.langOptions ().OpenMPVersion >= 52 ) {
2079
- IssueNonConformanceWarning (llvm::omp::Directive::OMPD_allocate, x.source );
2080
- }
2076
+ IssueNonConformanceWarning (llvm::omp::Directive::OMPD_allocate, x.source , 52 );
2081
2077
2082
2078
PushContext (x.source , llvm::omp::Directive::OMPD_allocate);
2083
2079
const auto &list{std::get<std::optional<parser::OmpObjectList>>(x.t )};
@@ -3131,11 +3127,16 @@ void OmpAttributeVisitor::AddOmpRequiresToScope(Scope &scope,
3131
3127
} while (!scopeIter->IsGlobal ());
3132
3128
}
3133
3129
3134
- void OmpAttributeVisitor::IssueNonConformanceWarning (
3135
- llvm::omp::Directive D, parser::CharBlock source) {
3130
+ void OmpAttributeVisitor::IssueNonConformanceWarning (llvm::omp::Directive D,
3131
+ parser::CharBlock source, unsigned emit_from_version ) {
3136
3132
std::string warnStr;
3137
3133
llvm::raw_string_ostream warnStrOS (warnStr);
3138
3134
unsigned version{context_.langOptions ().OpenMPVersion };
3135
+ // We only want to emit the warning when the version being used has the
3136
+ // directive deprecated
3137
+ if (version < emit_from_version) {
3138
+ return ;
3139
+ }
3139
3140
warnStrOS << " OpenMP directive "
3140
3141
<< parser::ToUpperCaseLetters (
3141
3142
llvm::omp::getOpenMPDirectiveName (D, version).str ())
0 commit comments