[flang-commits] [flang] [Flang] Add 'f2023' and 'f202Y' as valid flags for '-std=' option (PR #182387)
via flang-commits
flang-commits at lists.llvm.org
Thu Feb 19 14:15:37 PST 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-driver
Author: None (chris-earl)
<details>
<summary>Changes</summary>
These flags are added to support error checking required by the Fortran 2023 standard that should be disabled by default in flang as well as prepare for future standard requirements.
---
Full diff: https://github.com/llvm/llvm-project/pull/182387.diff
5 Files Affected:
- (modified) flang/include/flang/Support/LangOptions.def (+2)
- (modified) flang/include/flang/Support/LangOptions.h (+7)
- (modified) flang/lib/Frontend/CompilerInvocation.cpp (+15-5)
- (renamed) flang/test/Driver/std20XX-wrong.f90 (+2-2)
- (renamed) flang/test/Driver/std20XX.f90 (+3-1)
``````````diff
diff --git a/flang/include/flang/Support/LangOptions.def b/flang/include/flang/Support/LangOptions.def
index e310ecf37a52d..2160610259f1a 100644
--- a/flang/include/flang/Support/LangOptions.def
+++ b/flang/include/flang/Support/LangOptions.def
@@ -22,6 +22,8 @@ LANGOPT(Name, Bits, Default)
ENUM_LANGOPT(FPContractMode, FPModeKind, 2, FPM_Fast) ///< FP Contract Mode (off/fast)
/// signed integer overflow handling
ENUM_LANGOPT(SignedOverflowBehavior, SignedOverflowBehaviorTy, 1, SOB_Undefined)
+/// Specify Fortran standard
+ENUM_LANGOPT(FortranStandard, FortranStandardTy, 3, FortranUnspecified)
/// Indicate a build without the standard GPU libraries.
LANGOPT(NoGPULib , 1, false)
diff --git a/flang/include/flang/Support/LangOptions.h b/flang/include/flang/Support/LangOptions.h
index 1dd676e62a9e5..c297874b8582c 100644
--- a/flang/include/flang/Support/LangOptions.h
+++ b/flang/include/flang/Support/LangOptions.h
@@ -43,6 +43,13 @@ class LangOptionsBase {
FPM_Fast,
};
+ enum FortranStandardTy {
+ FortranUnspecified = 0, // default
+ Fortran2018 = 1,
+ Fortran2023 = 2,
+ Fortran202Y = 3,
+ };
+
#define LANGOPT(Name, Bits, Default) unsigned Name : Bits;
#define ENUM_LANGOPT(Name, Type, Bits, Default)
#include "LangOptions.def"
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp
index fc4975f9592eb..d424933436a55 100644
--- a/flang/lib/Frontend/CompilerInvocation.cpp
+++ b/flang/lib/Frontend/CompilerInvocation.cpp
@@ -1148,19 +1148,29 @@ static bool parseDialectArgs(CompilerInvocation &res, llvm::opt::ArgList &args,
Fortran::common::LanguageFeature::OpenACC);
}
- // -std=f2018
- // TODO: Set proper options when more fortran standards
- // are supported.
+ // -std=f20**
if (args.hasArg(clang::options::OPT_std_EQ)) {
auto standard = args.getLastArgValue(clang::options::OPT_std_EQ);
- // We only allow f2018 as the given standard
if (standard == "f2018") {
res.setEnableConformanceChecks();
res.getFrontendOpts().features.WarnOnAllNonstandard();
+ res.getLangOpts().setFortranStandard(
+ Fortran::common::LangOptions::Fortran2018);
+ } else if (standard == "f2023") {
+ res.setEnableConformanceChecks();
+ res.getFrontendOpts().features.WarnOnAllNonstandard();
+ res.getLangOpts().setFortranStandard(
+ Fortran::common::LangOptions::Fortran2023);
+ } else if (standard == "f202Y") {
+ res.setEnableConformanceChecks();
+ res.getFrontendOpts().features.WarnOnAllNonstandard();
+ res.getLangOpts().setFortranStandard(
+ Fortran::common::LangOptions::Fortran202Y);
} else {
const unsigned diagID =
diags.getCustomDiagID(clang::DiagnosticsEngine::Error,
- "Only -std=f2018 is allowed currently.");
+ "Only 'f2018', 'f2023', or 'f202Y' are "
+ "accepted to -std= currently.");
diags.Report(diagID);
}
}
diff --git a/flang/test/Driver/std2018-wrong.f90 b/flang/test/Driver/std20XX-wrong.f90
similarity index 61%
rename from flang/test/Driver/std2018-wrong.f90
rename to flang/test/Driver/std20XX-wrong.f90
index 93ba153d75f7f..227bf59e45acb 100644
--- a/flang/test/Driver/std2018-wrong.f90
+++ b/flang/test/Driver/std20XX-wrong.f90
@@ -1,8 +1,8 @@
-! Ensure argument -std=f2018 works as expected.
+! Ensure argument -std=f20XX works as expected.
!-----------------------------------------
! FRONTEND FLANG DRIVER (flang -fc1)
!-----------------------------------------
! RUN: not %flang_fc1 -std=90 %s 2>&1 | FileCheck %s --check-prefix=WRONG
-! WRONG: Only -std=f2018 is allowed currently.
+! WRONG: Only 'f2018', 'f2023', or 'f202Y' are accepted to -std= currently.
diff --git a/flang/test/Driver/std2018.f90 b/flang/test/Driver/std20XX.f90
similarity index 75%
rename from flang/test/Driver/std2018.f90
rename to flang/test/Driver/std20XX.f90
index 1727f92127b71..afec991d1e1a6 100644
--- a/flang/test/Driver/std2018.f90
+++ b/flang/test/Driver/std20XX.f90
@@ -1,10 +1,12 @@
-! Ensure argument -std=f2018 works as expected.
+! Ensure argument -std=f20XX works as expected.
!-----------------------------------------
! FRONTEND FLANG DRIVER (flang -fc1)
!-----------------------------------------
! RUN: %flang_fc1 -fsyntax-only %s 2>&1 | FileCheck %s --allow-empty --check-prefix=WITHOUT
! RUN: %flang_fc1 -fsyntax-only -std=f2018 %s 2>&1 | FileCheck %s --check-prefix=GIVEN
+! RUN: %flang_fc1 -fsyntax-only -std=f2023 %s 2>&1 | FileCheck %s --check-prefix=GIVEN
+! RUN: %flang_fc1 -fsyntax-only -std=f202Y %s 2>&1 | FileCheck %s --check-prefix=GIVEN
! RUN: %flang_fc1 -fsyntax-only -pedantic %s 2>&1 | FileCheck %s --check-prefix=GIVEN
! WITHOUT-NOT: A DO loop should terminate with an END DO or CONTINUE
``````````
</details>
https://github.com/llvm/llvm-project/pull/182387
More information about the flang-commits
mailing list