+2010-07-29 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/45120
+ * tree-ssa-structalias.c (get_constraint_for_component_ref):
+ Handle offset in DEREFs properly.
+ (get_constraint_for_1): Handle MEM_REF offset properly.
+
2010-07-29 Richard Guenther <rguenther@suse.de>
PR middle-end/45034
+2010-07-29 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/45120
+ * gcc.dg/ipa/ipa-pta-15.c: New testcase.
+
2010-07-29 Mikael Morin <mikael@gcc.gnu.org>
PR fortran/42051
--- /dev/null
+/* { dg-do run } */
+/* { dg-options "-O2 -fipa-pta" } */
+
+struct Foo {
+ int *p;
+ int *q;
+};
+
+void __attribute__((noinline))
+bar (int **x)
+{
+ struct Foo *f = (struct Foo *)(x - 1);
+ *(f->p) = 0;
+}
+
+int foo(void)
+{
+ struct Foo f;
+ int i = 1, j = 2;
+ f.p = &i;
+ f.q = &j;
+ bar(&f.q);
+ return i;
+}
+
+extern void abort (void);
+int main()
+{
+ if (foo () != 0)
+ abort ();
+ return 0;
+}
at most one subfiled of any variable. */
if (bitpos == -1
|| bitsize != bitmaxsize
- || AGGREGATE_TYPE_P (TREE_TYPE (orig_t)))
+ || AGGREGATE_TYPE_P (TREE_TYPE (orig_t))
+ || result->offset == UNKNOWN_OFFSET)
result->offset = UNKNOWN_OFFSET;
else
- result->offset = bitpos;
+ result->offset += bitpos;
}
else if (result->type == ADDRESSOF)
{
{
case MEM_REF:
{
- get_constraint_for_ptr_offset (TREE_OPERAND (t, 0),
- TREE_OPERAND (t, 1), results);
+ tree off = double_int_to_tree (sizetype, mem_ref_offset (t));
+ get_constraint_for_ptr_offset (TREE_OPERAND (t, 0), off, results);
do_deref (results);
return;
}