[Bug c++/123557] [16 regression] ICE when building hpx-1.11.0 (in cp_gimplify_init_expr, at cp/cp-gimplify.cc:340)
cvs-commit at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sat Jan 31 09:43:45 GMT 2026
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123557
--- Comment #7 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Nathaniel Shead <nshead@gcc.gnu.org>:
https://gcc.gnu.org/g:6bfec5d7b8b87f505d974da8e24240af11b9914e
commit r16-7213-g6bfec5d7b8b87f505d974da8e24240af11b9914e
Author: Nathaniel Shead <nathanieloshead@gmail.com>
Date: Sat Jan 24 19:34:53 2026 +1100
c++: Fix cp_fold_non_odr_use_1 [PR123557,PR123738]
This fixes two issues with cp_fold_non_odr_use_1:
- When called to fold away a reference, it considers the use to not be
an lvalue and so 'maybe_constant_value' folds all the way through the
nested INDIRECT_REF to a prvalue. Fixed by folding the op0 of the
INDIRECT_REF rather than the ref itself and avoiding a double
cp_fold_non_odr_use_1.
- When used to fold away the initializing expression for an INIT_EXPR,
it doesn't mark any new TARGET_EXPRs as eliding. Fixed by reapplying
'set_target_expr_eliding' for the initializer of an INIT_EXPR if it
got modified during ff_only_non_odr walk.
PR c++/123557
PR c++/123738
gcc/cp/ChangeLog:
* cp-gimplify.cc (cp_fold_maybe_rvalue): Call
cp_fold_non_odr_use_1 before recursing cp_fold.
(cp_fold): Pass op0 to cp_fold_non_odr_use_1 when folding a
reference. Reapply set_target_expr_eliding on the initializing
expression of an INIT_EXPR.
gcc/testsuite/ChangeLog:
* g++.dg/cpp0x/constexpr-ice22.C: New test.
* g++.dg/cpp2a/constexpr-ref2.C: New test.
Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
Reviewed-by: Jason Merrill <jason@redhat.com>
More information about the Gcc-bugs
mailing list