https://gcc.gnu.org/g:aa1e19d821a39d973c4c8c0e8d1d19811d2fa433

commit r14-11176-gaa1e19d821a39d973c4c8c0e8d1d19811d2fa433
Author: Patrick Palka <ppa...@redhat.com>
Date:   Thu Jan 9 10:50:08 2025 -0500

    c++: relax ICE for unexpected trees during constexpr [PR117925]
    
    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 will 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
    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.
    
    Reviewed-by: Jason Merrill <ja...@redhat.com>
    (cherry picked from commit eeedc54cc81c4dfb472ecbd6f14cfbf2dd035474)

Diff:
---
 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 c5cd5c87680f..6025b4c29437 100644
--- a/gcc/cp/constexpr.cc
+++ b/gcc/cp/constexpr.cc
@@ -8626,7 +8626,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