+2008-05-01 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/36093
+ Backport from mainline
+ 2007-04-12 Richard Guenther <rguenther@suse.de>
+
+ * gimplify.c (canonicalize_addr_expr): To be consistent with
+ gimplify_compound_lval only set operands two and three of
+ ARRAY_REFs if they are not gimple_min_invariant. This makes
+ it never at this place.
+ * tree-ssa-ccp.c (maybe_fold_offset_to_array_ref): Likewise.
+
2008-04-17 Volker Reichelt <v.reichelt@netcologne.de>
PR c/35744
/* All checks succeeded. Build a new node to merge the cast. */
*expr_p = build4 (ARRAY_REF, dctype, obj_expr,
TYPE_MIN_VALUE (TYPE_DOMAIN (datype)),
- TYPE_MIN_VALUE (TYPE_DOMAIN (datype)),
- size_binop (EXACT_DIV_EXPR, TYPE_SIZE_UNIT (dctype),
- size_int (TYPE_ALIGN_UNIT (dctype))));
+ NULL_TREE, NULL_TREE);
*expr_p = build1 (ADDR_EXPR, ctype, *expr_p);
}
+2008-05-01 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/36093
+ * gcc.c-torture/execute/pr36093.c: New testcase.
+
2008-04-17 Volker Reichelt <v.reichelt@netcologne.de>
PR c/35744
--- /dev/null
+extern void abort (void);
+
+typedef struct Bar {
+ char c[129];
+} Bar __attribute__((__aligned__(128)));
+
+typedef struct Foo {
+ Bar bar[4];
+} Foo;
+
+Foo foo[4];
+
+int main()
+{
+ int i, j;
+ Foo *foop = &foo[0];
+
+ for (i=0; i < 4; i++) {
+ Bar *bar = &foop->bar[i];
+ for (j=0; j < 129; j++) {
+ bar->c[j] = 'a' + i;
+ }
+ }
+
+ if (foo[0].bar[3].c[128] != 'd')
+ abort ();
+ return 0;
+}
if (!integer_zerop (elt_offset))
idx = int_const_binop (PLUS_EXPR, idx, elt_offset, 0);
- return build4 (ARRAY_REF, orig_type, base, idx, min_idx,
- size_int (tree_low_cst (elt_size, 1)
- / (TYPE_ALIGN_UNIT (elt_type))));
+ return build4 (ARRAY_REF, orig_type, base, idx, NULL_TREE, NULL_TREE);
}