On 12/12/24 3:28 PM, Patrick Palka wrote:
Bootstrapped and regtested on x86_64-pc-linux-gnu, does this look
OK for trunk and perhpas 14?

OK for both.

-- >8 --

When we encounter an unexpected (likely templated) tree code during
constexpr evaluation we currently ICE even in release mode.  But it
seems more user-friendly to just gracefully treat the expression as
non-constant, which will be harmless most of the time (e.g. in the case
of warning-specific or speculative constexpr folding as in the PR), and
at worst would transform an ICE-on-valid bug into a rejects-valid bug.
This is also what e.g. tsubst_expr does when it encounters an unexpected
(likely non-templated) tree code.

        PR c++/117925

gcc/cp/ChangeLog:

        * constexpr.cc (cxx_eval_constant_expression) <default>:
        Relax ICE when encountering an unexpected tree code into a
        checking ICE guarded by flag_checking.
---
  gcc/cp/constexpr.cc | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc
index 55e44fcbafb..221d57f6ffa 100644
--- a/gcc/cp/constexpr.cc
+++ b/gcc/cp/constexpr.cc
@@ -8613,7 +8613,7 @@ cxx_eval_constant_expression (const constexpr_ctx *ctx, 
tree t,
            error_at (EXPR_LOCATION (t),
                      "statement is not a constant expression");
        }
-      else
+      else if (flag_checking)
        internal_error ("unexpected expression %qE of kind %s", t,
                        get_tree_code_name (TREE_CODE (t)));
        *non_constant_p = true;

Reply via email to