mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-25 05:30:25 +08:00
c++: Fix crash in gimplifier with paren init of aggregates [PR94155]
Here we crash in the gimplifier because gimplify_init_ctor_eval doesn't expect null indexes for a constructor: /* ??? Here's to hoping the front end fills in all of the indices, so we don't have to figure out what's missing ourselves. */ gcc_assert (purpose); The indexes weren't filled because we never called reshape_init: for a constructor that represents parenthesized initialization of an aggregate we don't allow brace elision or designated initializers. PR c++/94155 - crash in gimplifier with paren init of aggregates. * init.c (build_vec_init): Fill in indexes. * g++.dg/cpp2a/paren-init22.C: New test.
This commit is contained in:
parent
c72a1b6f8b
commit
f84aded848
@ -1,3 +1,9 @@
|
||||
2020-04-04 Marek Polacek <polacek@redhat.com>
|
||||
Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/94155 - crash in gimplifier with paren init of aggregates.
|
||||
* init.c (build_vec_init): Fill in indexes.
|
||||
|
||||
2020-04-04 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/91377
|
||||
|
@ -4438,6 +4438,8 @@ build_vec_init (tree base, tree maxindex, tree init,
|
||||
errors = true;
|
||||
if (try_const)
|
||||
{
|
||||
if (!field)
|
||||
field = size_int (idx);
|
||||
tree e = maybe_constant_init (one_init);
|
||||
if (reduced_constant_expression_p (e))
|
||||
{
|
||||
|
@ -1,3 +1,8 @@
|
||||
2020-04-04 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c++/94155 - crash in gimplifier with paren init of aggregates.
|
||||
* g++.dg/cpp2a/paren-init22.C: New test.
|
||||
|
||||
2020-04-05 Iain Sandoe <iain@sandoe.co.uk>
|
||||
|
||||
* g++.dg/coroutines/torture/co-await-14-template-traits.C: Rename...
|
||||
|
15
gcc/testsuite/g++.dg/cpp2a/paren-init22.C
Normal file
15
gcc/testsuite/g++.dg/cpp2a/paren-init22.C
Normal file
@ -0,0 +1,15 @@
|
||||
// PR c++/94155 - crash in gimplifier with paren init of aggregates.
|
||||
// { dg-do compile { target c++2a } }
|
||||
|
||||
struct S { int i, j; };
|
||||
|
||||
struct A {
|
||||
S s;
|
||||
constexpr A(S e) : s(e) {}
|
||||
};
|
||||
|
||||
void
|
||||
f()
|
||||
{
|
||||
A g[1]({{1, 1}});
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user