re PR c++/91925 (-fpack-struct causes a decltype with template to ICE)

PR c++/91925
	* c-warn.c (check_alignment_of_packed_member): Ignore FIELD_DECLs
	with NULL DECL_FIELD_OFFSET.

	* g++.dg/conversion/packed2.C: New test.

From-SVN: r276415
This commit is contained in:
Jakub Jelinek 2019-10-01 18:19:04 +02:00 committed by Jakub Jelinek
parent 04bf300e86
commit 7552c36afa
4 changed files with 28 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2019-10-01 Jakub Jelinek <jakub@redhat.com>
PR c++/91925
* c-warn.c (check_alignment_of_packed_member): Ignore FIELD_DECLs
with NULL DECL_FIELD_OFFSET.
2019-10-01 Richard Sandiford <richard.sandiford@arm.com>
* c-pretty-print.c (pp_c_specifier_qualifier_list): If a vector type

View File

@ -2798,6 +2798,8 @@ check_alignment_of_packed_member (tree type, tree field, bool rvalue)
/* Check alignment of the data member. */
if (TREE_CODE (field) == FIELD_DECL
&& (DECL_PACKED (field) || TYPE_PACKED (TREE_TYPE (field)))
/* Ignore FIELDs not laid out yet. */
&& DECL_FIELD_OFFSET (field)
&& (!rvalue || TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE))
{
/* Check the expected alignment against the field alignment. */

View File

@ -1,3 +1,8 @@
2019-10-01 Jakub Jelinek <jakub@redhat.com>
PR c++/91925
* g++.dg/conversion/packed2.C: New test.
2019-10-01 Bill Schmidt <wschmdit@linux.ibm.com>
* gcc.target/powerpc/pr91275.c: New.

View File

@ -0,0 +1,15 @@
// PR c++/91925
// { dg-do compile { target c++11 } }
// { dg-options "-fpack-struct" }
struct A {};
int foo (A);
struct B {
A a;
decltype (foo (a)) p;
};
template <typename T> T bar (T);
class C {
A a;
decltype (bar (a)) p;
};