diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp index 749d5887eaac0..34fee2f7dc6b1 100644 --- a/flang/lib/Semantics/check-omp-structure.cpp +++ b/flang/lib/Semantics/check-omp-structure.cpp @@ -2648,11 +2648,19 @@ void OmpStructureChecker::Enter(const parser::OmpClause::Destroy &x) { llvm::omp::Directive dir{GetContext().directive}; unsigned version{context_.langOptions().OpenMPVersion}; if (dir == llvm::omp::Directive::OMPD_depobj) { - if (version < 52) { - context_.Say(GetContext().clauseSource, - "The object parameter in DESTROY clause in DEPOPJ construct " - "was introduced in %s"_port_en_US, - ThisVersion(52)); + unsigned argSince{52}, noargDeprecatedIn{52}; + if (x.v) { + if (version < argSince) { + context_.Say(GetContext().clauseSource, + "The object parameter in DESTROY clause on DEPOPJ construct is not allowed in %s, %s"_warn_en_US, + ThisVersion(version), TryVersion(argSince)); + } + } else { + if (version >= noargDeprecatedIn) { + context_.Say(GetContext().clauseSource, + "The DESTROY clause without argument on DEPOBJ construct is deprecated in %s"_warn_en_US, + ThisVersion(noargDeprecatedIn)); + } } } } diff --git a/flang/test/Semantics/OpenMP/depobj-construct-v50.f90 b/flang/test/Semantics/OpenMP/depobj-construct-v50.f90 index e7fa24d521b63..e87d86ca54bee 100644 --- a/flang/test/Semantics/OpenMP/depobj-construct-v50.f90 +++ b/flang/test/Semantics/OpenMP/depobj-construct-v50.f90 @@ -23,6 +23,6 @@ subroutine f02 subroutine f03 integer :: obj, jbo !ERROR: The DESTROY clause must refer to the same object as the DEPOBJ construct -!PORTABILITY: The object parameter in DESTROY clause in DEPOPJ construct was introduced in OpenMP v5.2 +!WARNING: The object parameter in DESTROY clause on DEPOPJ construct is not allowed in OpenMP v5.0, try -fopenmp-version=52 !$omp depobj(obj) destroy(jbo) end diff --git a/flang/test/Semantics/OpenMP/depobj-construct-v52.f90 b/flang/test/Semantics/OpenMP/depobj-construct-v52.f90 index f2e66485c6c80..6b695a30128ae 100644 --- a/flang/test/Semantics/OpenMP/depobj-construct-v52.f90 +++ b/flang/test/Semantics/OpenMP/depobj-construct-v52.f90 @@ -13,3 +13,9 @@ subroutine f03 !ERROR: The DESTROY clause must refer to the same object as the DEPOBJ construct !$omp depobj(obj) destroy(jbo) end + +subroutine f06 + integer :: obj +!WARNING: The DESTROY clause without argument on DEPOBJ construct is deprecated in OpenMP v5.2 + !$omp depobj(obj) destroy +end