[clang] [clang] Respect `CLANG_USE_EXPERIMENTAL_CONST_INTERP` (PR #200716)
Timm Baeder via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 8 22:50:51 PDT 2026
Timm =?utf-8?q?Bäder?= <tbaeder at redhat.com>,
Timm =?utf-8?q?Bäder?= <tbaeder at redhat.com>
Message-ID:
In-Reply-To: <llvm.org/llvm/llvm-project/pull/200716 at github.com>
https://github.com/tbaederr updated https://github.com/llvm/llvm-project/pull/200716
>From a4009d8884f3d3f047d0f629b25f7e045ad3044b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timm=20B=C3=A4der?= <tbaeder at redhat.com>
Date: Mon, 1 Jun 2026 07:17:53 +0200
Subject: [PATCH 1/3] asdf
---
clang/lib/Driver/ToolChains/Clang.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
index 8a0efd70e6c0d..da74046cd4609 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -6668,7 +6668,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
Args.AddLastArg(CmdArgs, options::OPT_fexperimental_library);
- if (Args.hasArg(options::OPT_fexperimental_new_constant_interpreter))
+ if (Args.hasArg(options::OPT_fexperimental_new_constant_interpreter) ||
+ CLANG_USE_EXPERIMENTAL_CONST_INTERP)
CmdArgs.push_back("-fexperimental-new-constant-interpreter");
if (Arg *A = Args.getLastArg(options::OPT_fbracket_depth_EQ)) {
>From e789b808669dcebddd07fad85120cd26c4457414 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timm=20B=C3=A4der?= <tbaeder at redhat.com>
Date: Mon, 1 Jun 2026 16:58:34 +0200
Subject: [PATCH 2/3] set it in ExecuteCompilerInvocation instead.
---
clang/lib/Driver/ToolChains/Clang.cpp | 3 +--
clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp | 3 +++
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
index da74046cd4609..8a0efd70e6c0d 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -6668,8 +6668,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
Args.AddLastArg(CmdArgs, options::OPT_fexperimental_library);
- if (Args.hasArg(options::OPT_fexperimental_new_constant_interpreter) ||
- CLANG_USE_EXPERIMENTAL_CONST_INTERP)
+ if (Args.hasArg(options::OPT_fexperimental_new_constant_interpreter))
CmdArgs.push_back("-fexperimental-new-constant-interpreter");
if (Arg *A = Args.getLastArg(options::OPT_fbracket_depth_EQ)) {
diff --git a/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp b/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp
index e4622496758ac..1375291556f11 100644
--- a/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp
+++ b/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp
@@ -184,6 +184,9 @@ CreateFrontendAction(CompilerInstance &CI) {
const FrontendOptions &FEOpts = CI.getFrontendOpts();
+ if (CLANG_USE_EXPERIMENTAL_CONST_INTERP)
+ CI.getLangOpts().EnableNewConstInterp = true;
+
if (CI.getLangOpts().HLSL)
Act = std::make_unique<HLSLFrontendAction>(std::move(Act));
>From 94407097096440d3b1ba44acbdcc39a2b99d07f7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timm=20B=C3=A4der?= <tbaeder at redhat.com>
Date: Sun, 7 Jun 2026 10:17:35 +0200
Subject: [PATCH 3/3] all work
---
clang/include/clang/Options/Options.td | 8 ++++----
clang/lib/Driver/ToolChains/Clang.cpp | 11 +++++++++--
clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp | 3 ---
3 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/clang/include/clang/Options/Options.td b/clang/include/clang/Options/Options.td
index 4fd892e58df86..8041f982a9550 100644
--- a/clang/include/clang/Options/Options.td
+++ b/clang/include/clang/Options/Options.td
@@ -2162,10 +2162,10 @@ def fconstexpr_steps_EQ : Joined<["-"], "fconstexpr-steps=">, Group<f_Group>,
Visibility<[ClangOption, CC1Option]>,
HelpText<"Set the maximum number of steps in constexpr function evaluation (0 = no limit)">,
MarshallingInfoInt<LangOpts<"ConstexprStepLimit">, "1048576">;
-def fexperimental_new_constant_interpreter : Flag<["-"], "fexperimental-new-constant-interpreter">, Group<f_Group>,
- HelpText<"Enable the experimental new constant interpreter">,
- Visibility<[ClangOption, CC1Option]>,
- MarshallingInfoFlag<LangOpts<"EnableNewConstInterp">>;
+defm experimental_new_constant_interpreter : BoolFOption<"experimental-new-constant-interpreter",
+ LangOpts<"EnableNewConstInterp">, Default<"CLANG_USE_EXPERIMENTAL_CONST_INTERP">,
+ PosFlag<SetTrue, [], [ClangOption, CC1Option]>,
+ NegFlag<SetFalse, [], [ClangOption, CC1Option]>>;
def fconstexpr_backtrace_limit_EQ : Joined<["-"], "fconstexpr-backtrace-limit=">, Group<f_Group>,
Visibility<[ClangOption, CC1Option]>,
HelpText<"Set the maximum number of entries to print in a constexpr evaluation backtrace (0 = no limit)">,
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
index 8a0efd70e6c0d..36e4ee0a64e37 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -6668,8 +6668,15 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
Args.AddLastArg(CmdArgs, options::OPT_fexperimental_library);
- if (Args.hasArg(options::OPT_fexperimental_new_constant_interpreter))
- CmdArgs.push_back("-fexperimental-new-constant-interpreter");
+ if (CLANG_USE_EXPERIMENTAL_CONST_INTERP) {
+ Args.ClaimAllArgs(options::OPT_fexperimental_new_constant_interpreter);
+ Args.AddLastArg(CmdArgs,
+ options::OPT_fno_experimental_new_constant_interpreter);
+ } else {
+ Args.ClaimAllArgs(options::OPT_fno_experimental_new_constant_interpreter);
+ Args.AddLastArg(CmdArgs,
+ options::OPT_fexperimental_new_constant_interpreter);
+ }
if (Arg *A = Args.getLastArg(options::OPT_fbracket_depth_EQ)) {
CmdArgs.push_back("-fbracket-depth");
diff --git a/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp b/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp
index 1375291556f11..e4622496758ac 100644
--- a/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp
+++ b/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp
@@ -184,9 +184,6 @@ CreateFrontendAction(CompilerInstance &CI) {
const FrontendOptions &FEOpts = CI.getFrontendOpts();
- if (CLANG_USE_EXPERIMENTAL_CONST_INTERP)
- CI.getLangOpts().EnableNewConstInterp = true;
-
if (CI.getLangOpts().HLSL)
Act = std::make_unique<HLSLFrontendAction>(std::move(Act));
More information about the cfe-commits
mailing list