re PR middle-end/36154 (internal compiler error: in get_constraint_for_component_ref, at tree-ssa-structalias.c:2727)

2008-05-08  Richard Guenther  <rguenther@suse.de>

	PR middle-end/36154
	* tree-ssa-structalias.c (push_fields_onto_fieldstack): Make
	sure to create a representative for trailing arrays for PTA.

	* gcc.c-torture/compile/pr36154.c: New testcase.

From-SVN: r135071
This commit is contained in:
Richard Guenther 2008-05-08 08:20:45 +00:00 committed by Richard Biener
parent b13e7b6cfc
commit 1b674de053
4 changed files with 30 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2008-05-08 Richard Guenther <rguenther@suse.de>
PR middle-end/36154
* tree-ssa-structalias.c (push_fields_onto_fieldstack): Make
sure to create a representative for trailing arrays for PTA.
2008-05-08 Richard Guenther <rguenther@suse.de>
PR middle-end/36172

View File

@ -1,3 +1,8 @@
2008-05-08 Richard Guenther <rguenther@suse.de>
PR middle-end/36154
* gcc.c-torture/compile/pr36154.c: New testcase.
2008-05-08 Richard Guenther <rguenther@suse.de>
PR middle-end/36172

View File

@ -0,0 +1,11 @@
struct eth_test_pkt {
unsigned short len;
unsigned short ctr;
unsigned char packet[];
} __attribute__ ((packed));
struct eth_test_pkt pkt_unaligned = { .packet = { 0xFC } };
int cmd_unaligned(const void *p)
{
return memcmp(p, pkt_unaligned.packet, 1);
}

View File

@ -4160,11 +4160,15 @@ push_fields_onto_fieldstack (tree type, VEC(fieldoff_s,heap) **fieldstack,
(DECL_NONADDRESSABLE_P (field)
? addressable_type
: TREE_TYPE (field))))
&& DECL_SIZE (field)
&& !integer_zerop (DECL_SIZE (field)))
/* Empty structures may have actual size, like in C++. So
&& ((DECL_SIZE (field)
&& !integer_zerop (DECL_SIZE (field)))
|| (!DECL_SIZE (field)
&& TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE)))
/* Empty structures may have actual size, like in C++. So
see if we didn't push any subfields and the size is
nonzero, push the field onto the stack */
nonzero, push the field onto the stack. Trailing flexible
array members also need a representative to be able to
treat taking their address in PTA. */
push = true;
if (push)