diff options
author | Jason Merrill <jason@redhat.com> | 2022-04-26 11:15:04 -0400 |
---|---|---|
committer | Jason Merrill <jason@redhat.com> | 2022-05-17 18:09:24 -0400 |
commit | 2b0c8377729a3c62a05897136666574ab939aaab (patch) | |
tree | 7e773340c84575e560cb9d78468a761c16866b08 /gcc/go | |
parent | 2c05a2d1a8e4697ea95d65c5da601aeae327e7a7 (diff) | |
download | gcc-2b0c8377729a3c62a05897136666574ab939aaab.zip gcc-2b0c8377729a3c62a05897136666574ab939aaab.tar.gz gcc-2b0c8377729a3c62a05897136666574ab939aaab.tar.bz2 |
c++: constexpr ref to array of array [PR102307]
The problem here is that first check_initializer calls
build_aggr_init_full_exprs, which does overload resolution, but then in the
case of failed constexpr throws away the result and does it again in
build_functional_cast. But in the first overload resolution,
reshape_init_array_1 decided to reuse the inner CONSTRUCTORs because
tf_error is set, so we know we're committed. But the second pass gets
confused by the CONSTRUCTORs with non-init-list types.
Fixed by avoiding a second pass: instead, pass the call from build_aggr_init
to build_cplus_new, which will turn it into a TARGET_EXPR. I don't bother
to change the object argument because it will be replaced later in
simplify_aggr_init_expr.
PR c++/102307
gcc/cp/ChangeLog:
* decl.cc (check_initializer): Use build_cplus_new in case of
constexpr failure.
gcc/testsuite/ChangeLog:
* g++.dg/cpp1z/constexpr-array2.C: New test.
Diffstat (limited to 'gcc/go')
0 files changed, 0 insertions, 0 deletions