https://github.com/tblah updated https://github.com/llvm/llvm-project/pull/144915
>From 7bb96a8479a0b351b0d6de33cbab98e498a3ab7c Mon Sep 17 00:00:00 2001 From: Tom Eccles <tom.ecc...@arm.com> Date: Thu, 19 Jun 2025 14:57:04 +0000 Subject: [PATCH 1/3] [flang][OpenMP] Remove experimental warning RFC: https://discourse.llvm.org/t/rfc-removing-the-openmp-experimental-warning-for-llvm-21/86455 Fixes: #110008 --- .../clang/Basic/DiagnosticDriverKinds.td | 4 ++-- clang/lib/Driver/ToolChains/Flang.cpp | 19 ++++++++++++++++--- flang/test/Driver/fopenmp.f90 | 4 ++-- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index 29f6480ba935c..68f87ebb1b39f 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -143,8 +143,8 @@ def warn_drv_unsupported_option_for_processor : Warning< def warn_drv_unsupported_openmp_library : Warning< "the library '%0=%1' is not supported, OpenMP will not be enabled">, InGroup<OptionIgnored>; -def warn_openmp_experimental : Warning< - "OpenMP support in flang is still experimental">, +def warn_openmp_incomplete : Warning< + "OpenMP support for version %0 in flang is still incomplete">, InGroup<ExperimentalOption>; def err_drv_invalid_thread_model_for_target : Error< diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp index 47d0e345086b2..04613457cb20a 100644 --- a/clang/lib/Driver/ToolChains/Flang.cpp +++ b/clang/lib/Driver/ToolChains/Flang.cpp @@ -11,6 +11,7 @@ #include "clang/Basic/CodeGenOptions.h" #include "clang/Driver/CommonArgs.h" +#include "clang/Driver/OptionUtils.h" #include "clang/Driver/Options.h" #include "llvm/Frontend/Debug/Options.h" #include "llvm/Support/Path.h" @@ -772,6 +773,13 @@ static void renderRemarksOptions(const ArgList &Args, ArgStringList &CmdArgs, } } +static std::string OpenMPVersionToString(int Version) { + int Major = Version / 10; + int Minor = Version % 10; + + return llvm::Twine{Major}.concat(".").concat(llvm::Twine{Minor}).str(); +} + void Flang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const { @@ -906,9 +914,14 @@ void Flang::ConstructJob(Compilation &C, const JobAction &JA, if (Args.hasArg(options::OPT_fopenmp_force_usm)) CmdArgs.push_back("-fopenmp-force-usm"); - // TODO: OpenMP support isn't "done" yet, so for now we warn that it - // is experimental. - D.Diag(diag::warn_openmp_experimental); + + // TODO: OpenMP support for newer versions of the standard is incomplete. + if (int Version = + getLastArgIntValue(Args, options::OPT_fopenmp_version_EQ, 0)) { + if (Version >= 40) + D.Diag(diag::warn_openmp_incomplete) + << OpenMPVersionToString(Version); + } // FIXME: Clang supports a whole bunch more flags here. break; diff --git a/flang/test/Driver/fopenmp.f90 b/flang/test/Driver/fopenmp.f90 index b3c3547800bdb..b170e77372d50 100644 --- a/flang/test/Driver/fopenmp.f90 +++ b/flang/test/Driver/fopenmp.f90 @@ -74,6 +74,6 @@ ! CHECK-LD-ANYMD: "{{.*}}ld{{(.exe)?}}" ! CHECK-LD-ANYMD: "-l{{(omp|gomp|iomp5md)}}" ! -! RUN: %flang -fopenmp -c %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-EXPERIMENTAL +! RUN: %flang -fopenmp -fopenmp-version=40 -c %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-EXPERIMENTAL ! -! CHECK-EXPERIMENTAL: flang{{.*}}: warning: OpenMP support in flang is still experimental +! CHECK-EXPERIMENTAL: flang{{.*}}: warning: OpenMP support for version 4.0 in flang is still incomplete >From 5af1bfba78e4c5afd2d338d26e814ff01993de85 Mon Sep 17 00:00:00 2001 From: Tom Eccles <tom.ecc...@arm.com> Date: Fri, 20 Jun 2025 11:33:03 +0000 Subject: [PATCH 2/3] s/EXPERIMENTAL/INCOMPLETE/ --- flang/test/Driver/fopenmp.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/flang/test/Driver/fopenmp.f90 b/flang/test/Driver/fopenmp.f90 index b170e77372d50..3a150aa657953 100644 --- a/flang/test/Driver/fopenmp.f90 +++ b/flang/test/Driver/fopenmp.f90 @@ -74,6 +74,6 @@ ! CHECK-LD-ANYMD: "{{.*}}ld{{(.exe)?}}" ! CHECK-LD-ANYMD: "-l{{(omp|gomp|iomp5md)}}" ! -! RUN: %flang -fopenmp -fopenmp-version=40 -c %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-EXPERIMENTAL +! RUN: %flang -fopenmp -fopenmp-version=40 -c %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-INCOMPLETE ! -! CHECK-EXPERIMENTAL: flang{{.*}}: warning: OpenMP support for version 4.0 in flang is still incomplete +! CHECK-INCOMPLETE: flang{{.*}}: warning: OpenMP support for version 4.0 in flang is still incomplete >From ebd2980051b3994d1c419d06f3cba22927283aec Mon Sep 17 00:00:00 2001 From: Tom Eccles <tom.ecc...@arm.com> Date: Thu, 26 Jun 2025 10:18:47 +0000 Subject: [PATCH 3/3] Move warning to frontend driver --- clang/lib/Driver/ToolChains/Flang.cpp | 16 ---------------- flang/lib/Frontend/CompilerInvocation.cpp | 8 ++++++-- flang/test/Driver/fopenmp.f90 | 4 ++-- 3 files changed, 8 insertions(+), 20 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp index 04613457cb20a..e4e321ba1e195 100644 --- a/clang/lib/Driver/ToolChains/Flang.cpp +++ b/clang/lib/Driver/ToolChains/Flang.cpp @@ -11,7 +11,6 @@ #include "clang/Basic/CodeGenOptions.h" #include "clang/Driver/CommonArgs.h" -#include "clang/Driver/OptionUtils.h" #include "clang/Driver/Options.h" #include "llvm/Frontend/Debug/Options.h" #include "llvm/Support/Path.h" @@ -773,13 +772,6 @@ static void renderRemarksOptions(const ArgList &Args, ArgStringList &CmdArgs, } } -static std::string OpenMPVersionToString(int Version) { - int Major = Version / 10; - int Minor = Version % 10; - - return llvm::Twine{Major}.concat(".").concat(llvm::Twine{Minor}).str(); -} - void Flang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const { @@ -915,14 +907,6 @@ void Flang::ConstructJob(Compilation &C, const JobAction &JA, if (Args.hasArg(options::OPT_fopenmp_force_usm)) CmdArgs.push_back("-fopenmp-force-usm"); - // TODO: OpenMP support for newer versions of the standard is incomplete. - if (int Version = - getLastArgIntValue(Args, options::OPT_fopenmp_version_EQ, 0)) { - if (Version >= 40) - D.Diag(diag::warn_openmp_incomplete) - << OpenMPVersionToString(Version); - } - // FIXME: Clang supports a whole bunch more flags here. break; default: diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp index 07d6814da8671..766131fd69d85 100644 --- a/flang/lib/Frontend/CompilerInvocation.cpp +++ b/flang/lib/Frontend/CompilerInvocation.cpp @@ -1138,8 +1138,9 @@ static bool parseOpenMPArgs(CompilerInvocation &res, llvm::opt::ArgList &args, unsigned numErrorsBefore = diags.getNumErrors(); llvm::Triple t(res.getTargetOpts().triple); - // By default OpenMP is set to 3.1 version - res.getLangOpts().OpenMPVersion = 31; + constexpr unsigned newestFullySupported = 31; + // By default OpenMP is set to the most recent fully supported version + res.getLangOpts().OpenMPVersion = newestFullySupported; res.getFrontendOpts().features.Enable( Fortran::common::LanguageFeature::OpenMP); if (auto *arg = @@ -1164,6 +1165,9 @@ static bool parseOpenMPArgs(CompilerInvocation &res, llvm::opt::ArgList &args, if (!value.getAsInteger(/*radix=*/10, version)) { if (llvm::is_contained(ompVersions, version)) { res.getLangOpts().OpenMPVersion = version; + + if (version > newestFullySupported) + diags.Report(clang::diag::warn_openmp_incomplete) << version; } else if (llvm::is_contained(oldVersions, version)) { const unsigned diagID = diags.getCustomDiagID(clang::DiagnosticsEngine::Warning, diff --git a/flang/test/Driver/fopenmp.f90 b/flang/test/Driver/fopenmp.f90 index 3a150aa657953..f7e83e0eeb734 100644 --- a/flang/test/Driver/fopenmp.f90 +++ b/flang/test/Driver/fopenmp.f90 @@ -74,6 +74,6 @@ ! CHECK-LD-ANYMD: "{{.*}}ld{{(.exe)?}}" ! CHECK-LD-ANYMD: "-l{{(omp|gomp|iomp5md)}}" ! -! RUN: %flang -fopenmp -fopenmp-version=40 -c %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-INCOMPLETE +! RUN: %flang -fopenmp -fopenmp-version=40 -c %s -S -o - 2>&1 | FileCheck %s --check-prefix=CHECK-INCOMPLETE ! -! CHECK-INCOMPLETE: flang{{.*}}: warning: OpenMP support for version 4.0 in flang is still incomplete +! CHECK-INCOMPLETE: warning: OpenMP support for version 40 in flang is still incomplete _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits