From 2474373cbba039fa16f71de9c5293f76ed0de8be Mon Sep 17 00:00:00 2001 From: Krzysztof Parzyszek Date: Tue, 24 Sep 2024 17:41:16 -0500 Subject: [PATCH] [flang][OpenMP] Add version checks for clauses If there is a clause that is allowed on a given directive in a later version of the OpenMP spec, report an error and provide the minimal spec version that allows the clause. The case where a clause is not allowed on a directive at all is already handled elsewhere. --- flang/lib/Semantics/check-omp-structure.cpp | 93 +++++++++++++------ flang/lib/Semantics/check-omp-structure.h | 1 + flang/test/Lower/OpenMP/atomic-capture.f90 | 4 +- flang/test/Lower/OpenMP/atomic-read.f90 | 2 +- flang/test/Lower/OpenMP/atomic-update.f90 | 4 +- flang/test/Lower/OpenMP/atomic-write.f90 | 2 +- .../test/Lower/OpenMP/declare-target-data.f90 | 4 +- .../declare-target-deferred-marking.f90 | 4 +- .../OpenMP/declare-target-func-and-subr.f90 | 4 +- ...arget-implicit-func-and-subr-cap-enter.f90 | 8 +- ...lare-target-implicit-func-and-subr-cap.f90 | 8 +- .../declare-target-implicit-tarop-cap.f90 | 8 +- .../Lower/OpenMP/function-filtering-2.f90 | 12 +-- .../test/Lower/OpenMP/function-filtering.f90 | 12 +-- .../OpenMP/declare_target-device_type.f90 | 4 +- .../Parser/OpenMP/in-reduction-clause.f90 | 4 +- flang/test/Parser/OpenMP/order-clause01.f90 | 4 +- flang/test/Parser/OpenMP/tile-size.f90 | 4 +- flang/test/Parser/OpenMP/unroll-full.f90 | 4 +- flang/test/Parser/OpenMP/unroll.f90 | 4 +- .../Semantics/OpenMP/atomic-hint-clause.f90 | 2 +- flang/test/Semantics/OpenMP/atomic01.f90 | 2 +- flang/test/Semantics/OpenMP/atomic05.f90 | 2 +- .../Semantics/OpenMP/clause-validity01.f90 | 2 +- .../OpenMP/declarative-directive.f90 | 2 +- .../Semantics/OpenMP/declare-target01.f90 | 2 +- .../Semantics/OpenMP/declare-target02.f90 | 2 +- .../Semantics/OpenMP/declare-target06.f90 | 2 +- .../Semantics/OpenMP/device-constructs.f90 | 2 +- flang/test/Semantics/OpenMP/flush02.f90 | 2 +- flang/test/Semantics/OpenMP/if-clause.f90 | 2 +- flang/test/Semantics/OpenMP/nontemporal.f90 | 2 +- .../test/Semantics/OpenMP/order-clause01.f90 | 2 +- .../Semantics/OpenMP/requires-atomic01.f90 | 2 +- .../Semantics/OpenMP/requires-atomic02.f90 | 2 +- flang/test/Semantics/OpenMP/requires04.f90 | 2 +- flang/test/Semantics/OpenMP/requires05.f90 | 2 +- .../Semantics/OpenMP/simd-nontemporal.f90 | 2 +- flang/test/Semantics/OpenMP/target01.f90 | 2 +- flang/test/Semantics/OpenMP/taskgroup01.f90 | 2 +- .../test/Semantics/OpenMP/use_device_addr.f90 | 2 +- .../Semantics/OpenMP/use_device_addr1.f90 | 2 +- .../test/Semantics/OpenMP/use_device_ptr1.f90 | 2 +- 43 files changed, 137 insertions(+), 99 deletions(-) diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp index 643b713b32e29d..de553e055c2817 100644 --- a/flang/lib/Semantics/check-omp-structure.cpp +++ b/flang/lib/Semantics/check-omp-structure.cpp @@ -16,25 +16,25 @@ namespace Fortran::semantics { // Use when clause falls under 'struct OmpClause' in 'parse-tree.h'. #define CHECK_SIMPLE_CLAUSE(X, Y) \ void OmpStructureChecker::Enter(const parser::OmpClause::X &) { \ - CheckAllowed(llvm::omp::Clause::Y); \ + CheckAllowedClause(llvm::omp::Clause::Y); \ } #define CHECK_REQ_CONSTANT_SCALAR_INT_CLAUSE(X, Y) \ void OmpStructureChecker::Enter(const parser::OmpClause::X &c) { \ - CheckAllowed(llvm::omp::Clause::Y); \ + CheckAllowedClause(llvm::omp::Clause::Y); \ RequiresConstantPositiveParameter(llvm::omp::Clause::Y, c.v); \ } #define CHECK_REQ_SCALAR_INT_CLAUSE(X, Y) \ void OmpStructureChecker::Enter(const parser::OmpClause::X &c) { \ - CheckAllowed(llvm::omp::Clause::Y); \ + CheckAllowedClause(llvm::omp::Clause::Y); \ RequiresPositiveParameter(llvm::omp::Clause::Y, c.v); \ } // Use when clause don't falls under 'struct OmpClause' in 'parse-tree.h'. #define CHECK_SIMPLE_PARSER_CLAUSE(X, Y) \ void OmpStructureChecker::Enter(const parser::X &) { \ - CheckAllowed(llvm::omp::Y); \ + CheckAllowedClause(llvm::omp::Y); \ } // 'OmpWorkshareBlockChecker' is used to check the validity of the assignment @@ -163,6 +163,43 @@ class AssociatedLoopChecker { std::map constructNamesAndLevels_; }; +bool OmpStructureChecker::CheckAllowedClause(llvmOmpClause clause) { + unsigned version{context_.langOptions().OpenMPVersion}; + DirectiveContext &dirCtx = GetContext(); + llvm::omp::Directive dir{dirCtx.directive}; + + if (!llvm::omp::isAllowedClauseForDirective(dir, clause, version)) { + unsigned allowedInVersion{[&] { + for (unsigned v : {45, 50, 51, 52, 60}) { + if (v <= version) { + continue; + } + if (llvm::omp::isAllowedClauseForDirective(dir, clause, v)) { + return v; + } + } + return 0u; + }()}; + + auto clauseName{parser::ToUpperCaseLetters(getClauseName(clause).str())}; + auto dirName{parser::ToUpperCaseLetters(getDirectiveName(dir).str())}; + + // Only report it if there is a later version that allows it. + // If it's not allowed at all, it will be reported by CheckAllowed. + if (allowedInVersion != 0) { + std::string thisVersion{std::to_string(version / 10) + "." + + std::to_string(version % 10)}; + std::string goodVersion{std::to_string(allowedInVersion)}; + + context_.Say(dirCtx.clauseSource, + "%s clause is not allowed on directive %s in OpenMP v%s, " + "try -fopenmp-version=%d"_err_en_US, + clauseName, dirName, thisVersion, allowedInVersion); + } + } + return CheckAllowed(clause); +} + bool OmpStructureChecker::IsCloselyNestedRegion(const OmpDirectiveSet &set) { // Definition of close nesting: // @@ -1156,7 +1193,7 @@ void OmpStructureChecker::Leave(const parser::OpenMPDeclarativeAllocate &x) { } void OmpStructureChecker::Enter(const parser::OmpClause::Allocator &x) { - CheckAllowed(llvm::omp::Clause::OMPC_allocator); + CheckAllowedClause(llvm::omp::Clause::OMPC_allocator); // Note: Predefined allocators are stored in ScalarExpr as numbers // whereas custom allocators are stored as strings, so if the ScalarExpr // actually has an int value, then it must be a predefined allocator @@ -1165,7 +1202,7 @@ void OmpStructureChecker::Enter(const parser::OmpClause::Allocator &x) { } void OmpStructureChecker::Enter(const parser::OmpClause::Allocate &x) { - CheckAllowed(llvm::omp::Clause::OMPC_allocate); + CheckAllowedClause(llvm::omp::Clause::OMPC_allocate); if (const auto &modifier{ std::get>( x.v.t)}) { @@ -2310,7 +2347,7 @@ CHECK_REQ_CONSTANT_SCALAR_INT_CLAUSE(Simdlen, OMPC_simdlen) // Restrictions specific to each clause are implemented apart from the // generalized restrictions. void OmpStructureChecker::Enter(const parser::OmpClause::Reduction &x) { - CheckAllowed(llvm::omp::Clause::OMPC_reduction); + CheckAllowedClause(llvm::omp::Clause::OMPC_reduction); if (CheckReductionOperators(x)) { CheckReductionTypeList(x); } @@ -2634,7 +2671,7 @@ void OmpStructureChecker::CheckSharedBindingInOuterContext( } void OmpStructureChecker::Enter(const parser::OmpClause::Ordered &x) { - CheckAllowed(llvm::omp::Clause::OMPC_ordered); + CheckAllowedClause(llvm::omp::Clause::OMPC_ordered); // the parameter of ordered clause is optional if (const auto &expr{x.v}) { RequiresConstantPositiveParameter(llvm::omp::Clause::OMPC_ordered, *expr); @@ -2649,17 +2686,17 @@ void OmpStructureChecker::Enter(const parser::OmpClause::Ordered &x) { } void OmpStructureChecker::Enter(const parser::OmpClause::Shared &x) { - CheckAllowed(llvm::omp::Clause::OMPC_shared); + CheckAllowedClause(llvm::omp::Clause::OMPC_shared); CheckIsVarPartOfAnotherVar(GetContext().clauseSource, x.v, "SHARED"); } void OmpStructureChecker::Enter(const parser::OmpClause::Private &x) { - CheckAllowed(llvm::omp::Clause::OMPC_private); + CheckAllowedClause(llvm::omp::Clause::OMPC_private); CheckIsVarPartOfAnotherVar(GetContext().clauseSource, x.v, "PRIVATE"); CheckIntentInPointer(x.v, llvm::omp::Clause::OMPC_private); } void OmpStructureChecker::Enter(const parser::OmpClause::Nowait &x) { - CheckAllowed(llvm::omp::Clause::OMPC_nowait); + CheckAllowedClause(llvm::omp::Clause::OMPC_nowait); if (llvm::omp::noWaitClauseNotAllowedSet.test(GetContext().directive)) { context_.Say(GetContext().clauseSource, "%s clause is not allowed on the OMP %s directive," @@ -2732,7 +2769,7 @@ void OmpStructureChecker::CheckIsVarPartOfAnotherVar( } void OmpStructureChecker::Enter(const parser::OmpClause::Firstprivate &x) { - CheckAllowed(llvm::omp::Clause::OMPC_firstprivate); + CheckAllowedClause(llvm::omp::Clause::OMPC_firstprivate); CheckIsVarPartOfAnotherVar(GetContext().clauseSource, x.v, "FIRSTPRIVATE"); CheckIsLoopIvPartOfClause(llvmOmpClause::OMPC_firstprivate, x.v); @@ -2819,7 +2856,7 @@ void OmpStructureChecker::Leave(const parser::OmpAtomic &) { // Restrictions specific to each clause are implemented apart from the // generalized restrictions. void OmpStructureChecker::Enter(const parser::OmpClause::Aligned &x) { - CheckAllowed(llvm::omp::Clause::OMPC_aligned); + CheckAllowedClause(llvm::omp::Clause::OMPC_aligned); if (const auto &expr{ std::get>(x.v.t)}) { @@ -2828,7 +2865,7 @@ void OmpStructureChecker::Enter(const parser::OmpClause::Aligned &x) { // 2.8.1 TODO: list-item attribute check } void OmpStructureChecker::Enter(const parser::OmpClause::Defaultmap &x) { - CheckAllowed(llvm::omp::Clause::OMPC_defaultmap); + CheckAllowedClause(llvm::omp::Clause::OMPC_defaultmap); using VariableCategory = parser::OmpDefaultmapClause::VariableCategory; if (!std::get>(x.v.t)) { context_.Say(GetContext().clauseSource, @@ -2837,7 +2874,7 @@ void OmpStructureChecker::Enter(const parser::OmpClause::Defaultmap &x) { } } void OmpStructureChecker::Enter(const parser::OmpClause::If &x) { - CheckAllowed(llvm::omp::Clause::OMPC_if); + CheckAllowedClause(llvm::omp::Clause::OMPC_if); using dirNameModifier = parser::OmpIfClause::DirectiveNameModifier; // TODO Check that, when multiple 'if' clauses are applied to a combined // construct, at most one of them applies to each directive. @@ -2873,7 +2910,7 @@ void OmpStructureChecker::Enter(const parser::OmpClause::If &x) { } void OmpStructureChecker::Enter(const parser::OmpClause::Linear &x) { - CheckAllowed(llvm::omp::Clause::OMPC_linear); + CheckAllowedClause(llvm::omp::Clause::OMPC_linear); // 2.7 Loop Construct Restriction if ((llvm::omp::allDoSet | llvm::omp::allSimdSet) @@ -2907,7 +2944,7 @@ void OmpStructureChecker::CheckAllowedMapTypes( } void OmpStructureChecker::Enter(const parser::OmpClause::Map &x) { - CheckAllowed(llvm::omp::Clause::OMPC_map); + CheckAllowedClause(llvm::omp::Clause::OMPC_map); if (const auto &maptype{std::get>(x.v.t)}) { using Type = parser::OmpMapType::Type; @@ -2953,7 +2990,7 @@ bool OmpStructureChecker::ScheduleModifierHasType( return false; } void OmpStructureChecker::Enter(const parser::OmpClause::Schedule &x) { - CheckAllowed(llvm::omp::Clause::OMPC_schedule); + CheckAllowedClause(llvm::omp::Clause::OMPC_schedule); const parser::OmpScheduleClause &scheduleClause = x.v; // 2.7 Loop Construct Restriction @@ -2989,7 +3026,7 @@ void OmpStructureChecker::Enter(const parser::OmpClause::Schedule &x) { } void OmpStructureChecker::Enter(const parser::OmpClause::Device &x) { - CheckAllowed(llvm::omp::Clause::OMPC_device); + CheckAllowedClause(llvm::omp::Clause::OMPC_device); const parser::OmpDeviceClause &deviceClause = x.v; const auto &device{std::get<1>(deviceClause.t)}; RequiresPositiveParameter( @@ -3008,7 +3045,7 @@ void OmpStructureChecker::Enter(const parser::OmpClause::Device &x) { } void OmpStructureChecker::Enter(const parser::OmpClause::Depend &x) { - CheckAllowed(llvm::omp::Clause::OMPC_depend); + CheckAllowedClause(llvm::omp::Clause::OMPC_depend); if ((std::holds_alternative(x.v.u) || std::holds_alternative(x.v.u)) && GetContext().directive != llvm::omp::OMPD_ordered) { @@ -3051,7 +3088,7 @@ void OmpStructureChecker::CheckCopyingPolymorphicAllocatable( } void OmpStructureChecker::Enter(const parser::OmpClause::Copyprivate &x) { - CheckAllowed(llvm::omp::Clause::OMPC_copyprivate); + CheckAllowedClause(llvm::omp::Clause::OMPC_copyprivate); CheckIntentInPointer(x.v, llvm::omp::Clause::OMPC_copyprivate); SymbolSourceMap currSymbols; GetSymbolsInObjectList(x.v, currSymbols); @@ -3069,7 +3106,7 @@ void OmpStructureChecker::Enter(const parser::OmpClause::Copyprivate &x) { } void OmpStructureChecker::Enter(const parser::OmpClause::Lastprivate &x) { - CheckAllowed(llvm::omp::Clause::OMPC_lastprivate); + CheckAllowedClause(llvm::omp::Clause::OMPC_lastprivate); CheckIsVarPartOfAnotherVar(GetContext().clauseSource, x.v, "LASTPRIVATE"); @@ -3093,7 +3130,7 @@ void OmpStructureChecker::Enter(const parser::OmpClause::Lastprivate &x) { } void OmpStructureChecker::Enter(const parser::OmpClause::Copyin &x) { - CheckAllowed(llvm::omp::Clause::OMPC_copyin); + CheckAllowedClause(llvm::omp::Clause::OMPC_copyin); SymbolSourceMap currSymbols; GetSymbolsInObjectList(x.v, currSymbols); @@ -3128,7 +3165,7 @@ void OmpStructureChecker::CheckStructureElement( void OmpStructureChecker::Enter(const parser::OmpClause::UseDevicePtr &x) { CheckStructureElement(x.v, llvm::omp::Clause::OMPC_use_device_ptr); - CheckAllowed(llvm::omp::Clause::OMPC_use_device_ptr); + CheckAllowedClause(llvm::omp::Clause::OMPC_use_device_ptr); SymbolSourceMap currSymbols; GetSymbolsInObjectList(x.v, currSymbols); semantics::UnorderedSymbolSet listVars; @@ -3161,7 +3198,7 @@ void OmpStructureChecker::Enter(const parser::OmpClause::UseDevicePtr &x) { void OmpStructureChecker::Enter(const parser::OmpClause::UseDeviceAddr &x) { CheckStructureElement(x.v, llvm::omp::Clause::OMPC_use_device_addr); - CheckAllowed(llvm::omp::Clause::OMPC_use_device_addr); + CheckAllowedClause(llvm::omp::Clause::OMPC_use_device_addr); SymbolSourceMap currSymbols; GetSymbolsInObjectList(x.v, currSymbols); semantics::UnorderedSymbolSet listVars; @@ -3186,7 +3223,7 @@ void OmpStructureChecker::Enter(const parser::OmpClause::UseDeviceAddr &x) { } void OmpStructureChecker::Enter(const parser::OmpClause::IsDevicePtr &x) { - CheckAllowed(llvm::omp::Clause::OMPC_is_device_ptr); + CheckAllowedClause(llvm::omp::Clause::OMPC_is_device_ptr); SymbolSourceMap currSymbols; GetSymbolsInObjectList(x.v, currSymbols); semantics::UnorderedSymbolSet listVars; @@ -3224,7 +3261,7 @@ void OmpStructureChecker::Enter(const parser::OmpClause::IsDevicePtr &x) { } void OmpStructureChecker::Enter(const parser::OmpClause::HasDeviceAddr &x) { - CheckAllowed(llvm::omp::Clause::OMPC_has_device_addr); + CheckAllowedClause(llvm::omp::Clause::OMPC_has_device_addr); SymbolSourceMap currSymbols; GetSymbolsInObjectList(x.v, currSymbols); semantics::UnorderedSymbolSet listVars; @@ -3569,7 +3606,7 @@ void OmpStructureChecker::Enter( } void OmpStructureChecker::CheckAllowedRequiresClause(llvmOmpClause clause) { - CheckAllowed(clause); + CheckAllowedClause(clause); if (clause != llvm::omp::Clause::OMPC_atomic_default_mem_order) { // Check that it does not appear after a device construct diff --git a/flang/lib/Semantics/check-omp-structure.h b/flang/lib/Semantics/check-omp-structure.h index 2cc1a78068f540..319489bd1ea910 100644 --- a/flang/lib/Semantics/check-omp-structure.h +++ b/flang/lib/Semantics/check-omp-structure.h @@ -139,6 +139,7 @@ class OmpStructureChecker } private: + bool CheckAllowedClause(llvmOmpClause clause); void CheckMultipleOccurrence(semantics::UnorderedSymbolSet &listVars, const std::list &nameList, const parser::CharBlock &item, const std::string &clauseName); diff --git a/flang/test/Lower/OpenMP/atomic-capture.f90 b/flang/test/Lower/OpenMP/atomic-capture.f90 index 667ae8ed7a133b..af82e4b2a20eb2 100644 --- a/flang/test/Lower/OpenMP/atomic-capture.f90 +++ b/flang/test/Lower/OpenMP/atomic-capture.f90 @@ -2,8 +2,8 @@ ! This test checks the lowering of atomic capture -! RUN: bbc %openmp_flags -emit-hlfir %s -o - | FileCheck %s -! RUN: %flang_fc1 -emit-hlfir %openmp_flags %s -o - | FileCheck %s +! RUN: bbc %openmp_flags -fopenmp-version=50 -emit-hlfir %s -o - | FileCheck %s +! RUN: %flang_fc1 -emit-hlfir %openmp_flags -fopenmp-version=50 %s -o - | FileCheck %s program OmpAtomicCapture diff --git a/flang/test/Lower/OpenMP/atomic-read.f90 b/flang/test/Lower/OpenMP/atomic-read.f90 index d578df959a474d..c3270dd6c1d670 100644 --- a/flang/test/Lower/OpenMP/atomic-read.f90 +++ b/flang/test/Lower/OpenMP/atomic-read.f90 @@ -1,6 +1,6 @@ ! REQUIRES: openmp_runtime -! RUN: bbc %openmp_flags -emit-hlfir %s -o - | FileCheck %s +! RUN: bbc %openmp_flags -fopenmp-version=50 -emit-hlfir %s -o - | FileCheck %s ! This test checks the lowering of atomic read diff --git a/flang/test/Lower/OpenMP/atomic-update.f90 b/flang/test/Lower/OpenMP/atomic-update.f90 index 85edfdf4de84d5..16dae9d5f301c1 100644 --- a/flang/test/Lower/OpenMP/atomic-update.f90 +++ b/flang/test/Lower/OpenMP/atomic-update.f90 @@ -1,8 +1,8 @@ ! REQUIRES: openmp_runtime ! This test checks lowering of atomic and atomic update constructs -! RUN: bbc %openmp_flags -emit-hlfir %s -o - | FileCheck %s -! RUN: %flang_fc1 -emit-hlfir %openmp_flags %s -o - | FileCheck %s +! RUN: bbc %openmp_flags -fopenmp-version=50 -emit-hlfir %s -o - | FileCheck %s +! RUN: %flang_fc1 -emit-hlfir %openmp_flags -fopenmp-version=50 %s -o - | FileCheck %s program OmpAtomicUpdate use omp_lib diff --git a/flang/test/Lower/OpenMP/atomic-write.f90 b/flang/test/Lower/OpenMP/atomic-write.f90 index 8867dc59211922..b30dc483e6b845 100644 --- a/flang/test/Lower/OpenMP/atomic-write.f90 +++ b/flang/test/Lower/OpenMP/atomic-write.f90 @@ -1,6 +1,6 @@ ! REQUIRES: openmp_runtime -! RUN: bbc %openmp_flags -emit-hlfir %s -o - | FileCheck %s +! RUN: bbc %openmp_flags -fopenmp-version=50 -emit-hlfir %s -o - | FileCheck %s ! This test checks the lowering of atomic write diff --git a/flang/test/Lower/OpenMP/declare-target-data.f90 b/flang/test/Lower/OpenMP/declare-target-data.f90 index d86f74d18b6df0..154853a0fa20c4 100644 --- a/flang/test/Lower/OpenMP/declare-target-data.f90 +++ b/flang/test/Lower/OpenMP/declare-target-data.f90 @@ -1,5 +1,5 @@ -!RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s -!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-is-target-device %s -o - | FileCheck %s +!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=52 %s -o - | FileCheck %s +!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=52 -fopenmp-is-target-device %s -o - | FileCheck %s module test_0 implicit none diff --git a/flang/test/Lower/OpenMP/declare-target-deferred-marking.f90 b/flang/test/Lower/OpenMP/declare-target-deferred-marking.f90 index 1998c3da23af5f..079d43e309028d 100644 --- a/flang/test/Lower/OpenMP/declare-target-deferred-marking.f90 +++ b/flang/test/Lower/OpenMP/declare-target-deferred-marking.f90 @@ -1,5 +1,5 @@ -!RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s --check-prefixes ALL,HOST -!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-is-device %s -o - | FileCheck %s --check-prefixes ALL +!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=52 %s -o - | FileCheck %s --check-prefixes ALL,HOST +!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=52 -fopenmp-is-device %s -o - | FileCheck %s --check-prefixes ALL program main use, intrinsic :: iso_c_binding diff --git a/flang/test/Lower/OpenMP/declare-target-func-and-subr.f90 b/flang/test/Lower/OpenMP/declare-target-func-and-subr.f90 index 0d138321445ce6..8182e468928e22 100644 --- a/flang/test/Lower/OpenMP/declare-target-func-and-subr.f90 +++ b/flang/test/Lower/OpenMP/declare-target-func-and-subr.f90 @@ -1,5 +1,5 @@ -!RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s --check-prefixes ALL,HOST -!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-is-device %s -o - | FileCheck %s --check-prefixes ALL,DEVICE +!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=52 %s -o - | FileCheck %s --check-prefixes ALL,HOST +!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=52 -fopenmp-is-device %s -o - | FileCheck %s --check-prefixes ALL,DEVICE ! Check specification valid forms of declare target with functions ! utilising device_type and to clauses as well as the default diff --git a/flang/test/Lower/OpenMP/declare-target-implicit-func-and-subr-cap-enter.f90 b/flang/test/Lower/OpenMP/declare-target-implicit-func-and-subr-cap-enter.f90 index 0ca2bcbd66a960..8035f1a65880b7 100644 --- a/flang/test/Lower/OpenMP/declare-target-implicit-func-and-subr-cap-enter.f90 +++ b/flang/test/Lower/OpenMP/declare-target-implicit-func-and-subr-cap-enter.f90 @@ -1,7 +1,7 @@ -!RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s -!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-is-target-device %s -o - | FileCheck %s --check-prefix=DEVICE -!RUN: bbc -emit-hlfir -fopenmp %s -o - | FileCheck %s -!RUN: bbc -emit-hlfir -fopenmp -fopenmp-is-target-device %s -o - | FileCheck %s --check-prefix=DEVICE +!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=52 %s -o - | FileCheck %s +!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=52 -fopenmp-is-target-device %s -o - | FileCheck %s --check-prefix=DEVICE +!RUN: bbc -emit-hlfir -fopenmp -fopenmp-version=52 %s -o - | FileCheck %s +!RUN: bbc -emit-hlfir -fopenmp -fopenmp-version=52 -fopenmp-is-target-device %s -o - | FileCheck %s --check-prefix=DEVICE ! CHECK-LABEL: func.func @_QPimplicitly_captured_twice ! CHECK-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget{{.*}}} diff --git a/flang/test/Lower/OpenMP/declare-target-implicit-func-and-subr-cap.f90 b/flang/test/Lower/OpenMP/declare-target-implicit-func-and-subr-cap.f90 index ffca5c3ff25000..70e4ac22f8974e 100644 --- a/flang/test/Lower/OpenMP/declare-target-implicit-func-and-subr-cap.f90 +++ b/flang/test/Lower/OpenMP/declare-target-implicit-func-and-subr-cap.f90 @@ -1,7 +1,7 @@ -!RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s -!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-is-target-device %s -o - | FileCheck %s --check-prefix=DEVICE -!RUN: bbc -emit-hlfir -fopenmp %s -o - | FileCheck %s -!RUN: bbc -emit-hlfir -fopenmp -fopenmp-is-target-device %s -o - | FileCheck %s --check-prefix=DEVICE +!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=50 %s -o - | FileCheck %s +!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=50 -fopenmp-is-target-device %s -o - | FileCheck %s --check-prefix=DEVICE +!RUN: bbc -emit-hlfir -fopenmp -fopenmp-version=50 %s -o - | FileCheck %s +!RUN: bbc -emit-hlfir -fopenmp -fopenmp-version=50 -fopenmp-is-target-device %s -o - | FileCheck %s --check-prefix=DEVICE ! CHECK-LABEL: func.func @_QPimplicitly_captured ! CHECK-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget{{.*}}} diff --git a/flang/test/Lower/OpenMP/declare-target-implicit-tarop-cap.f90 b/flang/test/Lower/OpenMP/declare-target-implicit-tarop-cap.f90 index 9b85a32036ca52..653c89dea54dcb 100644 --- a/flang/test/Lower/OpenMP/declare-target-implicit-tarop-cap.f90 +++ b/flang/test/Lower/OpenMP/declare-target-implicit-tarop-cap.f90 @@ -1,7 +1,7 @@ -!RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s -!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-is-device %s -o - | FileCheck %s --check-prefix=DEVICE -!RUN: bbc -emit-hlfir -fopenmp %s -o - | FileCheck %s -!RUN: bbc -emit-hlfir -fopenmp -fopenmp-is-target-device %s -o - | FileCheck %s --check-prefix=DEVICE +!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=52 %s -o - | FileCheck %s +!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=52 -fopenmp-is-device %s -o - | FileCheck %s --check-prefix=DEVICE +!RUN: bbc -emit-hlfir -fopenmp -fopenmp-version=52 %s -o - | FileCheck %s +!RUN: bbc -emit-hlfir -fopenmp -fopenmp-version=52 -fopenmp-is-target-device %s -o - | FileCheck %s --check-prefix=DEVICE ! DEVICE-LABEL: func.func @_QPimplicit_capture ! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget{{.*}}} diff --git a/flang/test/Lower/OpenMP/function-filtering-2.f90 b/flang/test/Lower/OpenMP/function-filtering-2.f90 index 2c595452794c4d..a2c5e29cfdcbf6 100644 --- a/flang/test/Lower/OpenMP/function-filtering-2.f90 +++ b/flang/test/Lower/OpenMP/function-filtering-2.f90 @@ -1,9 +1,9 @@ -! RUN: %flang_fc1 -fopenmp -flang-experimental-hlfir -emit-llvm %s -o - | FileCheck --check-prefixes=LLVM,LLVM-HOST %s -! RUN: %flang_fc1 -fopenmp -emit-hlfir %s -o - | FileCheck --check-prefix=MLIR %s -! RUN: %flang_fc1 -triple amdgcn-amd-amdhsa -fopenmp -fopenmp-is-target-device -flang-experimental-hlfir -emit-llvm %s -o - | FileCheck --check-prefixes=LLVM,LLVM-DEVICE %s -! RUN: %flang_fc1 -triple amdgcn-amd-amdhsa -fopenmp -fopenmp-is-target-device -emit-hlfir %s -o - | FileCheck --check-prefix=MLIR %s -! RUN: bbc -fopenmp -emit-hlfir %s -o - | FileCheck --check-prefixes=MLIR-HOST,MLIR-ALL %s -! RUN: bbc -target amdgcn-amd-amdhsa -fopenmp -fopenmp-is-target-device -emit-hlfir %s -o - | FileCheck --check-prefixes=MLIR-DEVICE,MLIR-ALL %s +! RUN: %flang_fc1 -fopenmp -fopenmp-version=52 -flang-experimental-hlfir -emit-llvm %s -o - | FileCheck --check-prefixes=LLVM,LLVM-HOST %s +! RUN: %flang_fc1 -fopenmp -fopenmp-version=52 -emit-hlfir %s -o - | FileCheck --check-prefix=MLIR %s +! RUN: %flang_fc1 -triple amdgcn-amd-amdhsa -fopenmp -fopenmp-version=52 -fopenmp-is-target-device -flang-experimental-hlfir -emit-llvm %s -o - | FileCheck --check-prefixes=LLVM,LLVM-DEVICE %s +! RUN: %flang_fc1 -triple amdgcn-amd-amdhsa -fopenmp -fopenmp-version=52 -fopenmp-is-target-device -emit-hlfir %s -o - | FileCheck --check-prefix=MLIR %s +! RUN: bbc -fopenmp -fopenmp-version=52 -emit-hlfir %s -o - | FileCheck --check-prefixes=MLIR-HOST,MLIR-ALL %s +! RUN: bbc -target amdgcn-amd-amdhsa -fopenmp -fopenmp-version=52 -fopenmp-is-target-device -emit-hlfir %s -o - | FileCheck --check-prefixes=MLIR-DEVICE,MLIR-ALL %s ! MLIR: func.func @{{.*}}implicit_invocation() attributes {omp.declare_target = #omp.declaretarget} ! MLIR: return diff --git a/flang/test/Lower/OpenMP/function-filtering.f90 b/flang/test/Lower/OpenMP/function-filtering.f90 index 0e041f77b8091e..9f37e6f028d7a9 100644 --- a/flang/test/Lower/OpenMP/function-filtering.f90 +++ b/flang/test/Lower/OpenMP/function-filtering.f90 @@ -1,9 +1,9 @@ -! RUN: %flang_fc1 -fopenmp -flang-experimental-hlfir -emit-llvm %s -o - | FileCheck --check-prefixes=LLVM-HOST,LLVM-ALL %s -! RUN: %flang_fc1 -fopenmp -emit-hlfir %s -o - | FileCheck --check-prefixes=MLIR-HOST,MLIR-ALL %s -! RUN: %flang_fc1 -triple amdgcn-amd-amdhsa -fopenmp -fopenmp-is-target-device -flang-experimental-hlfir -emit-llvm %s -o - | FileCheck --check-prefixes=LLVM-DEVICE,LLVM-ALL %s -! RUN: %flang_fc1 -triple amdgcn-amd-amdhsa -fopenmp -fopenmp-is-target-device -emit-hlfir %s -o - | FileCheck --check-prefixes=MLIR-DEVICE,MLIR-ALL %s -! RUN: bbc -fopenmp -emit-hlfir %s -o - | FileCheck --check-prefixes=MLIR-HOST,MLIR-ALL %s -! RUN: bbc -target amdgcn-amd-amdhsa -fopenmp -fopenmp-is-target-device -emit-hlfir %s -o - | FileCheck --check-prefixes=MLIR-DEVICE,MLIR-ALL %s +! RUN: %flang_fc1 -fopenmp -fopenmp-version=52 -flang-experimental-hlfir -emit-llvm %s -o - | FileCheck --check-prefixes=LLVM-HOST,LLVM-ALL %s +! RUN: %flang_fc1 -fopenmp -fopenmp-version=52 -emit-hlfir %s -o - | FileCheck --check-prefixes=MLIR-HOST,MLIR-ALL %s +! RUN: %flang_fc1 -triple amdgcn-amd-amdhsa -fopenmp -fopenmp-version=52 -fopenmp-is-target-device -flang-experimental-hlfir -emit-llvm %s -o - | FileCheck --check-prefixes=LLVM-DEVICE,LLVM-ALL %s +! RUN: %flang_fc1 -triple amdgcn-amd-amdhsa -fopenmp -fopenmp-version=52 -fopenmp-is-target-device -emit-hlfir %s -o - | FileCheck --check-prefixes=MLIR-DEVICE,MLIR-ALL %s +! RUN: bbc -fopenmp -fopenmp-version=52 -emit-hlfir %s -o - | FileCheck --check-prefixes=MLIR-HOST,MLIR-ALL %s +! RUN: bbc -target amdgcn-amd-amdhsa -fopenmp -fopenmp-version=52 -fopenmp-is-target-device -emit-hlfir %s -o - | FileCheck --check-prefixes=MLIR-DEVICE,MLIR-ALL %s ! Check that the correct LLVM IR functions are kept for the host and device ! after running the whole set of translation and transformation passes from diff --git a/flang/test/Parser/OpenMP/declare_target-device_type.f90 b/flang/test/Parser/OpenMP/declare_target-device_type.f90 index 0b4f75e7ddccbf..40eb1c2fa4caee 100644 --- a/flang/test/Parser/OpenMP/declare_target-device_type.f90 +++ b/flang/test/Parser/OpenMP/declare_target-device_type.f90 @@ -1,5 +1,5 @@ -! RUN: %flang_fc1 -fdebug-unparse -fopenmp %s | FileCheck --ignore-case %s -! RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp %s | FileCheck --check-prefix="PARSE-TREE" %s +! RUN: %flang_fc1 -fdebug-unparse -fopenmp -fopenmp-version=52 %s | FileCheck --ignore-case %s +! RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp -fopenmp-version=52 %s | FileCheck --check-prefix="PARSE-TREE" %s subroutine openmp_declare_target integer, save :: x, y diff --git a/flang/test/Parser/OpenMP/in-reduction-clause.f90 b/flang/test/Parser/OpenMP/in-reduction-clause.f90 index 16f045771d732c..776ead3824b715 100644 --- a/flang/test/Parser/OpenMP/in-reduction-clause.f90 +++ b/flang/test/Parser/OpenMP/in-reduction-clause.f90 @@ -1,5 +1,5 @@ -! RUN: %flang_fc1 -fdebug-unparse -fopenmp %s | FileCheck --ignore-case %s -! RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp %s | FileCheck --check-prefix="PARSE-TREE" %s +! RUN: %flang_fc1 -fdebug-unparse -fopenmp -fopenmp-version=50 %s | FileCheck --ignore-case %s +! RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp -fopenmp-version=50 %s | FileCheck --check-prefix="PARSE-TREE" %s ! Check for IN_REDUCTION() clause on OpenMP constructs diff --git a/flang/test/Parser/OpenMP/order-clause01.f90 b/flang/test/Parser/OpenMP/order-clause01.f90 index d7efaf0f67c23b..41e131f9b5428e 100644 --- a/flang/test/Parser/OpenMP/order-clause01.f90 +++ b/flang/test/Parser/OpenMP/order-clause01.f90 @@ -1,5 +1,5 @@ -! RUN: %flang_fc1 -fdebug-unparse -fopenmp %s | FileCheck --ignore-case %s -! RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp %s | FileCheck --check-prefix="PARSE-TREE" %s +! RUN: %flang_fc1 -fdebug-unparse -fopenmp -fopenmp-version=50 %s | FileCheck --ignore-case %s +! RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp -fopenmp-version=50 %s | FileCheck --check-prefix="PARSE-TREE" %s ! Check for ORDER([order-modifier :]concurrent) clause on OpenMP constructs diff --git a/flang/test/Parser/OpenMP/tile-size.f90 b/flang/test/Parser/OpenMP/tile-size.f90 index f40dc3819af071..64bc3c5319e884 100644 --- a/flang/test/Parser/OpenMP/tile-size.f90 +++ b/flang/test/Parser/OpenMP/tile-size.f90 @@ -1,5 +1,5 @@ -! RUN: %flang_fc1 -fdebug-unparse -fopenmp %s | FileCheck --ignore-case %s -! RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp %s | FileCheck --check-prefix="PARSE-TREE" %s +! RUN: %flang_fc1 -fdebug-unparse -fopenmp -fopenmp-version=51 %s | FileCheck --ignore-case %s +! RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp -fopenmp-version=51 %s | FileCheck --check-prefix="PARSE-TREE" %s subroutine openmp_tiles(x) diff --git a/flang/test/Parser/OpenMP/unroll-full.f90 b/flang/test/Parser/OpenMP/unroll-full.f90 index 3f26f61fc9aa0c..30d2f466249911 100644 --- a/flang/test/Parser/OpenMP/unroll-full.f90 +++ b/flang/test/Parser/OpenMP/unroll-full.f90 @@ -1,5 +1,5 @@ -! RUN: %flang_fc1 -fdebug-unparse -fopenmp %s | FileCheck --ignore-case %s -! RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp %s | FileCheck --check-prefix="PARSE-TREE" %s +! RUN: %flang_fc1 -fdebug-unparse -fopenmp -fopenmp-version=51 %s | FileCheck --ignore-case %s +! RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp -fopenmp-version=51 %s | FileCheck --check-prefix="PARSE-TREE" %s subroutine openmp_parse_unroll(x) diff --git a/flang/test/Parser/OpenMP/unroll.f90 b/flang/test/Parser/OpenMP/unroll.f90 index 93163a3390db4c..8ac2a74166773e 100644 --- a/flang/test/Parser/OpenMP/unroll.f90 +++ b/flang/test/Parser/OpenMP/unroll.f90 @@ -1,5 +1,5 @@ -! RUN: %flang_fc1 -fdebug-unparse-no-sema -fopenmp %s | FileCheck --ignore-case %s -! RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp %s | FileCheck --check-prefix="PARSE-TREE" %s +! RUN: %flang_fc1 -fdebug-unparse-no-sema -fopenmp -fopenmp-version=51 %s | FileCheck --ignore-case %s +! RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp -fopenmp-version=51 %s | FileCheck --check-prefix="PARSE-TREE" %s subroutine openmp_parse_unroll(x) diff --git a/flang/test/Semantics/OpenMP/atomic-hint-clause.f90 b/flang/test/Semantics/OpenMP/atomic-hint-clause.f90 index e157b7e1e73a7f..f724a69345f6e0 100644 --- a/flang/test/Semantics/OpenMP/atomic-hint-clause.f90 +++ b/flang/test/Semantics/OpenMP/atomic-hint-clause.f90 @@ -1,6 +1,6 @@ ! REQUIRES: openmp_runtime -! RUN: %python %S/../test_errors.py %s %flang_fc1 %openmp_flags +! RUN: %python %S/../test_errors.py %s %flang_fc1 %openmp_flags -fopenmp-version=50 ! Semantic checks on hint clauses, as they appear on atomic constructs program sample diff --git a/flang/test/Semantics/OpenMP/atomic01.f90 b/flang/test/Semantics/OpenMP/atomic01.f90 index f0e1b47d2fa165..538db316f6e7f5 100644 --- a/flang/test/Semantics/OpenMP/atomic01.f90 +++ b/flang/test/Semantics/OpenMP/atomic01.f90 @@ -1,6 +1,6 @@ ! REQUIRES: openmp_runtime -! RUN: %python %S/../test_errors.py %s %flang_fc1 %openmp_flags +! RUN: %python %S/../test_errors.py %s %flang_fc1 %openmp_flags -fopenmp-version=50 ! Semantic checks for OpenMP 5.0 standard 2.17.7 atomic Construct. use omp_lib diff --git a/flang/test/Semantics/OpenMP/atomic05.f90 b/flang/test/Semantics/OpenMP/atomic05.f90 index 2d9566463309c9..f37aabcfce06ec 100644 --- a/flang/test/Semantics/OpenMP/atomic05.f90 +++ b/flang/test/Semantics/OpenMP/atomic05.f90 @@ -1,6 +1,6 @@ ! REQUIRES: openmp_runtime -! RUN: %python %S/../test_errors.py %s %flang %openmp_flags +! RUN: %python %S/../test_errors.py %s %flang %openmp_flags -fopenmp-version=50 ! This tests the various semantics related to the clauses of various OpenMP atomic constructs diff --git a/flang/test/Semantics/OpenMP/clause-validity01.f90 b/flang/test/Semantics/OpenMP/clause-validity01.f90 index 020d63f735596d..24540492e73271 100644 --- a/flang/test/Semantics/OpenMP/clause-validity01.f90 +++ b/flang/test/Semantics/OpenMP/clause-validity01.f90 @@ -1,6 +1,6 @@ ! REQUIRES: openmp_runtime -! RUN: %python %S/../test_errors.py %s %flang_fc1 %openmp_flags %openmp_module_flag +! RUN: %python %S/../test_errors.py %s %flang_fc1 %openmp_flags %openmp_module_flag -fopenmp-version=50 use omp_lib ! Check OpenMP clause validity for the following directives: ! diff --git a/flang/test/Semantics/OpenMP/declarative-directive.f90 b/flang/test/Semantics/OpenMP/declarative-directive.f90 index 4d10dc2d1b123e..8d6762b87adb95 100644 --- a/flang/test/Semantics/OpenMP/declarative-directive.f90 +++ b/flang/test/Semantics/OpenMP/declarative-directive.f90 @@ -1,4 +1,4 @@ -! RUN: %python %S/../test_errors.py %s %flang -fopenmp +! RUN: %python %S/../test_errors.py %s %flang -fopenmp -fopenmp-version=52 ! Check OpenMP declarative directives diff --git a/flang/test/Semantics/OpenMP/declare-target01.f90 b/flang/test/Semantics/OpenMP/declare-target01.f90 index 2c50a9248280b3..0651d3b5d89c19 100644 --- a/flang/test/Semantics/OpenMP/declare-target01.f90 +++ b/flang/test/Semantics/OpenMP/declare-target01.f90 @@ -1,6 +1,6 @@ ! REQUIRES: openmp_runtime -! RUN: %python %S/../test_errors.py %s %flang_fc1 %openmp_flags +! RUN: %python %S/../test_errors.py %s %flang_fc1 %openmp_flags -fopenmp-version=52 ! OpenMP Version 5.1 ! Check OpenMP construct validity for the following directives: ! 2.14.7 Declare Target Directive diff --git a/flang/test/Semantics/OpenMP/declare-target02.f90 b/flang/test/Semantics/OpenMP/declare-target02.f90 index 8166e10d702b89..0f12180587f838 100644 --- a/flang/test/Semantics/OpenMP/declare-target02.f90 +++ b/flang/test/Semantics/OpenMP/declare-target02.f90 @@ -1,4 +1,4 @@ -! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp +! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp -fopenmp-version=52 ! OpenMP Version 5.1 ! Check OpenMP construct validity for the following directives: ! 2.14.7 Declare Target Directive diff --git a/flang/test/Semantics/OpenMP/declare-target06.f90 b/flang/test/Semantics/OpenMP/declare-target06.f90 index a1c55d39e1b684..9abcfcecb681ab 100644 --- a/flang/test/Semantics/OpenMP/declare-target06.f90 +++ b/flang/test/Semantics/OpenMP/declare-target06.f90 @@ -1,4 +1,4 @@ -! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp +! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp -fopenmp-version=52 ! OpenMP Version 5.1 ! Check OpenMP construct validity for the following directives: ! 2.14.7 Declare Target Directive diff --git a/flang/test/Semantics/OpenMP/device-constructs.f90 b/flang/test/Semantics/OpenMP/device-constructs.f90 index 1ac00ef922c6bd..4047fbf3fa811d 100644 --- a/flang/test/Semantics/OpenMP/device-constructs.f90 +++ b/flang/test/Semantics/OpenMP/device-constructs.f90 @@ -1,4 +1,4 @@ -! RUN: %python %S/../test_errors.py %s %flang -fopenmp +! RUN: %python %S/../test_errors.py %s %flang -fopenmp -fopenmp-version=51 ! Check OpenMP clause validity for the following directives: ! 2.10 Device constructs program main diff --git a/flang/test/Semantics/OpenMP/flush02.f90 b/flang/test/Semantics/OpenMP/flush02.f90 index d12c76bad0334d..f06719f302fd7a 100644 --- a/flang/test/Semantics/OpenMP/flush02.f90 +++ b/flang/test/Semantics/OpenMP/flush02.f90 @@ -1,6 +1,6 @@ ! REQUIRES: openmp_runtime -! RUN: %python %S/../test_errors.py %s %flang_fc1 %openmp_flags +! RUN: %python %S/../test_errors.py %s %flang_fc1 %openmp_flags -fopenmp-version=50 ! Check OpenMP 5.0 - 2.17.8 flush Construct ! Restriction - diff --git a/flang/test/Semantics/OpenMP/if-clause.f90 b/flang/test/Semantics/OpenMP/if-clause.f90 index 493c6c873bfbf2..7aeb617e535630 100644 --- a/flang/test/Semantics/OpenMP/if-clause.f90 +++ b/flang/test/Semantics/OpenMP/if-clause.f90 @@ -1,4 +1,4 @@ -! RUN: %python %S/../test_errors.py %s %flang -fopenmp +! RUN: %python %S/../test_errors.py %s %flang -fopenmp -fopenmp-version=52 ! Check OpenMP 'if' clause validity for all directives that can have it program main diff --git a/flang/test/Semantics/OpenMP/nontemporal.f90 b/flang/test/Semantics/OpenMP/nontemporal.f90 index 6d24849575ee93..ad0ebc85b5ce72 100644 --- a/flang/test/Semantics/OpenMP/nontemporal.f90 +++ b/flang/test/Semantics/OpenMP/nontemporal.f90 @@ -1,4 +1,4 @@ -! RUN: %python %S/../test_errors.py %s %flang -fopenmp +! RUN: %python %S/../test_errors.py %s %flang -fopenmp -fopenmp-version=50 ! REQUIRES: shell ! Check OpenMP clause validity for NONTEMPORAL clause diff --git a/flang/test/Semantics/OpenMP/order-clause01.f90 b/flang/test/Semantics/OpenMP/order-clause01.f90 index 247791fac15b49..bb6e19e4ddd14e 100644 --- a/flang/test/Semantics/OpenMP/order-clause01.f90 +++ b/flang/test/Semantics/OpenMP/order-clause01.f90 @@ -1,4 +1,4 @@ -! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp +! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp -fopenmp-version=50 subroutine omp_order() integer :: i, j = 1 diff --git a/flang/test/Semantics/OpenMP/requires-atomic01.f90 b/flang/test/Semantics/OpenMP/requires-atomic01.f90 index b39c9cdcc0bb33..ee1281b25a6739 100644 --- a/flang/test/Semantics/OpenMP/requires-atomic01.f90 +++ b/flang/test/Semantics/OpenMP/requires-atomic01.f90 @@ -1,4 +1,4 @@ -! RUN: %flang_fc1 -fopenmp -fdebug-dump-parse-tree %s 2>&1 | FileCheck %s +! RUN: %flang_fc1 -fopenmp -fopenmp-version=50 -fdebug-dump-parse-tree %s 2>&1 | FileCheck %s ! Ensure that requires atomic_default_mem_order is used to update atomic ! operations with no explicit memory order set. program requires diff --git a/flang/test/Semantics/OpenMP/requires-atomic02.f90 b/flang/test/Semantics/OpenMP/requires-atomic02.f90 index 3af83970e7927a..2c0ea693bd9538 100644 --- a/flang/test/Semantics/OpenMP/requires-atomic02.f90 +++ b/flang/test/Semantics/OpenMP/requires-atomic02.f90 @@ -1,4 +1,4 @@ -! RUN: %flang_fc1 -fopenmp -fdebug-dump-parse-tree %s 2>&1 | FileCheck %s +! RUN: %flang_fc1 -fopenmp -fopenmp-version=50 -fdebug-dump-parse-tree %s 2>&1 | FileCheck %s ! Ensure that requires atomic_default_mem_order is used to update atomic ! operations with no explicit memory order set. ACQ_REL clause tested here. program requires diff --git a/flang/test/Semantics/OpenMP/requires04.f90 b/flang/test/Semantics/OpenMP/requires04.f90 index bb4101c1cbd6c4..1fbb3aa6219bc3 100644 --- a/flang/test/Semantics/OpenMP/requires04.f90 +++ b/flang/test/Semantics/OpenMP/requires04.f90 @@ -1,4 +1,4 @@ -! RUN: %python %S/../test_errors.py %s %flang -fopenmp +! RUN: %python %S/../test_errors.py %s %flang -fopenmp -fopenmp-version=52 ! OpenMP Version 5.0 ! 2.4 Requires directive ! Target-related clauses in 'requires' directives must come strictly before any diff --git a/flang/test/Semantics/OpenMP/requires05.f90 b/flang/test/Semantics/OpenMP/requires05.f90 index dd27e3895e394c..f410f0104d899c 100644 --- a/flang/test/Semantics/OpenMP/requires05.f90 +++ b/flang/test/Semantics/OpenMP/requires05.f90 @@ -1,4 +1,4 @@ -! RUN: %python %S/../test_errors.py %s %flang -fopenmp +! RUN: %python %S/../test_errors.py %s %flang -fopenmp -fopenmp-version=52 ! OpenMP Version 5.0 ! 2.4 Requires directive ! Target-related clauses in 'requires' directives must come strictly before any diff --git a/flang/test/Semantics/OpenMP/simd-nontemporal.f90 b/flang/test/Semantics/OpenMP/simd-nontemporal.f90 index a488edd98cdc3f..42518fd1aabe1c 100644 --- a/flang/test/Semantics/OpenMP/simd-nontemporal.f90 +++ b/flang/test/Semantics/OpenMP/simd-nontemporal.f90 @@ -1,4 +1,4 @@ -! RUN: %python %S/../test_errors.py %s %flang -fopenmp +! RUN: %python %S/../test_errors.py %s %flang -fopenmp -fopenmp-version=50 ! OpenMP Version 4.5 ! 2.8.1 simd Construct diff --git a/flang/test/Semantics/OpenMP/target01.f90 b/flang/test/Semantics/OpenMP/target01.f90 index 9836f0112738fe..545cc8a7b69f84 100644 --- a/flang/test/Semantics/OpenMP/target01.f90 +++ b/flang/test/Semantics/OpenMP/target01.f90 @@ -1,4 +1,4 @@ -! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp +! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp -fopenmp-version=51 subroutine foo(b) use iso_c_binding diff --git a/flang/test/Semantics/OpenMP/taskgroup01.f90 b/flang/test/Semantics/OpenMP/taskgroup01.f90 index 98c9aabffa234e..e05051387411a3 100644 --- a/flang/test/Semantics/OpenMP/taskgroup01.f90 +++ b/flang/test/Semantics/OpenMP/taskgroup01.f90 @@ -1,6 +1,6 @@ ! REQUIRES: openmp_runtime -! RUN: %python %S/../test_errors.py %s %flang %openmp_flags +! RUN: %python %S/../test_errors.py %s %flang %openmp_flags -fopenmp-version=50 use omp_lib implicit none diff --git a/flang/test/Semantics/OpenMP/use_device_addr.f90 b/flang/test/Semantics/OpenMP/use_device_addr.f90 index 93a7643b5eb485..0571a1fc06f815 100644 --- a/flang/test/Semantics/OpenMP/use_device_addr.f90 +++ b/flang/test/Semantics/OpenMP/use_device_addr.f90 @@ -1,4 +1,4 @@ -! RUN: %flang_fc1 -fopenmp -fdebug-dump-symbols %s | FileCheck %s +! RUN: %flang_fc1 -fopenmp -fopenmp-version=51 -fdebug-dump-symbols %s | FileCheck %s ! OpenMP Version 5.1 ! 2.14.2 use_device_addr clause ! List item that appears in a use_device_addr clause has corresponding storage diff --git a/flang/test/Semantics/OpenMP/use_device_addr1.f90 b/flang/test/Semantics/OpenMP/use_device_addr1.f90 index 867e324b68ad95..e6a3e6e5b2a2de 100644 --- a/flang/test/Semantics/OpenMP/use_device_addr1.f90 +++ b/flang/test/Semantics/OpenMP/use_device_addr1.f90 @@ -1,4 +1,4 @@ -! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp +! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp -fopenmp-version=50 ! OpenMP Version 5.0 ! 2.10.1 use_device_ptr clause ! List item in USE_DEVICE_ADDR clause must not be structure element. diff --git a/flang/test/Semantics/OpenMP/use_device_ptr1.f90 b/flang/test/Semantics/OpenMP/use_device_ptr1.f90 index 176fb5f35a8490..41dbadc59ce7ca 100644 --- a/flang/test/Semantics/OpenMP/use_device_ptr1.f90 +++ b/flang/test/Semantics/OpenMP/use_device_ptr1.f90 @@ -1,4 +1,4 @@ -! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp +! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp -fopenmp-version=50 ! OpenMP Version 5.0 ! 2.10.1 use_device_ptr clause ! List item in USE_DEVICE_PTR clause must not be structure element.