c++: ICE with auto[] and VLA [PR102414]
authorMarek Polacek <polacek@redhat.com>
Thu, 27 Jan 2022 23:11:03 +0000 (18:11 -0500)
committerMarek Polacek <polacek@redhat.com>
Mon, 31 Jan 2022 20:35:59 +0000 (15:35 -0500)
commit874ad5d6745bf3bbe4aa138cef09c669b3fb9b07
treed054a1aea8a313a793097818b6401b86faf9badf
parentb1a8b92f8f78536a00012e2e53a0d12ddbe6836d
c++: ICE with auto[] and VLA [PR102414]

Here we ICE in unify_array_domain when we're trying to deduce the type
of an array, as in

  auto(*p)[i] = (int(*)[i])0;

but unify_array_domain doesn't arbitrarily complex bounds.  Another
test is, e.g.,

  auto (*b)[0/0] = &a;

where the type of the array is

  <<< Unknown tree: template_type_parm >>>[0:(sizetype) ((ssizetype) (0 / 0) - 1)]

It seems to me that we need not handle these.

PR c++/102414
PR c++/101874

gcc/cp/ChangeLog:

* decl.cc (create_array_type_for_decl): Use template_placeholder_p.
Sorry on a variable-length array of auto.

gcc/testsuite/ChangeLog:

* g++.dg/cpp23/auto-array3.C: New test.
* g++.dg/cpp23/auto-array4.C: New test.
gcc/cp/decl.cc
gcc/testsuite/g++.dg/cpp23/auto-array3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp23/auto-array4.C [new file with mode: 0644]