+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
+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
--- /dev/null
+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);
+}
+
(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)