aboutsummaryrefslogtreecommitdiff
path: root/gcc/recog.c
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2020-02-07 14:44:25 -0500
committerMarek Polacek <polacek@redhat.com>2020-02-07 16:59:09 -0500
commitac6eaa55a5199196ea0a25763114ce05333a14d3 (patch)
tree26e3cee974415a5d8695ad18be4519f3824a0522 /gcc/recog.c
parent8496e135b111424e3c84f3f44c74f2cbe48eed90 (diff)
downloadgcc-ac6eaa55a5199196ea0a25763114ce05333a14d3.zip
gcc-ac6eaa55a5199196ea0a25763114ce05333a14d3.tar.gz
gcc-ac6eaa55a5199196ea0a25763114ce05333a14d3.tar.bz2
c++: Fix paren init of aggregates in unevaluated context [PR92947]
When I implemented C++20 parenthesized initialization of aggregates I introduced this bogus cp_unevaluated_operand check, thus disabling this feature in unevaluated context. Oop. Removing the check turned up another bug: I wasn't checking the return value of digest_init. So when constructible_expr called build_new_method_call_1 to see if we can construct one type from another, it got back a bogus INIT_EXPR that looked something like *(struct T &) 1 = <<< error >>>. But that isn't the error_mark_node, so constructible_expr thought we had been successful in creating the ctor call, and it gave the wrong answer. Covered by paren-init17.C. PR c++/92947 - Paren init of aggregates in unevaluated context. * call.c (build_new_method_call_1): Don't check cp_unevaluated_operand. Check the return value of digest_init. * g++.dg/cpp2a/paren-init21.C: New test.
Diffstat (limited to 'gcc/recog.c')
0 files changed, 0 insertions, 0 deletions