c++: Fix ICE on invalid alignas in a template [PR93530]
authorMarek Polacek <polacek@redhat.com>
Sat, 1 Feb 2020 00:28:10 +0000 (19:28 -0500)
committerMarek Polacek <polacek@redhat.com>
Sun, 2 Feb 2020 20:30:21 +0000 (15:30 -0500)
commitb817be038d94c987e02c26ed2d81b6f2ebb5f97a
tree27df3e30ed3b738aee3e2a5f319c560bcd25bdb0
parent26a591f2a47e1238951cce42e1a14c05ee166d7e
c++: Fix ICE on invalid alignas in a template [PR93530]

This fixes an ICE taking place in cp_default_conversion because we got
a SCOPE_REF that doesn't have a type and so checking
INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (exp)) will crash.
This happens since the recent Joseph's change in decl_attributes whereby
we don't skip C++11 attributes on types.

[dcl.align] is clear that alignas applied to a function is ill-formed.
That should be fixed, and we have PR90847 for that.  But I think a more
appropriate fix at this stage would be the following: in a template we
want to splice dependent attributes and save them for later, and by
doing so avoid this crash.

PR c++/93530 - ICE on invalid alignas in a template.
* decl.c (grokdeclarator): Call cplus_decl_attributes instead of
decl_attributes.

* g++.dg/cpp0x/alignas18.C: New test.
gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/alignas18.C [new file with mode: 0644]