[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
Fri Feb 20 08:19:50 PST 2026
https://github.com/chris-earl updated https://github.com/llvm/llvm-project/pull/182387
>From 1af11e9d4c09718f27f96f4733a3a903179728da Mon Sep 17 00:00:00 2001
From: Chris Earl <chris.earl at hpe.com>
Date: Tue, 17 Feb 2026 08:52:18 -0600
Subject: [PATCH] [Flang] Add 'f2023' and 'f202Y' as valid flags for '-std='
option
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.
---
flang/include/flang/Support/LangOptions.def | 2 ++
flang/include/flang/Support/LangOptions.h | 7 +++++++
flang/lib/Frontend/CompilerInvocation.cpp | 20 ++++++++++++++-----
.../{std2018-wrong.f90 => std20XX-wrong.f90} | 4 ++--
.../test/Driver/{std2018.f90 => std20XX.f90} | 4 +++-
5 files changed, 29 insertions(+), 8 deletions(-)
rename flang/test/Driver/{std2018-wrong.f90 => std20XX-wrong.f90} (61%)
rename flang/test/Driver/{std2018.f90 => std20XX.f90} (75%)
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
More information about the flang-commits
mailing list