From: Richard Biener Date: Fri, 26 Feb 2016 08:34:58 +0000 (+0000) Subject: re PR target/69551 (Wrong code with single element vector insert) X-Git-Tag: basepoints/gcc-7~750 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5aed7e2c0d9bde14f5c0e45e3d29727e6ec94324;p=thirdparty%2Fgcc.git re PR target/69551 (Wrong code with single element vector insert) 2016-02-26 Richard Biener PR tree-optimization/69551 * tree-ssa-structalias.c (get_constraint_for_ssa_var): When looking through aliases adjust DECL_PT_UID to refer to the ultimate alias target. * gcc.dg/torture/pr69951.c: New testcase. From-SVN: r233734 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0414e0970130..c4aa8c04a55d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2016-02-26 Richard Biener + + PR tree-optimization/69551 + * tree-ssa-structalias.c (get_constraint_for_ssa_var): When + looking through aliases adjust DECL_PT_UID to refer to the + ultimate alias target. + 2016-02-25 Martin Liska PR middle-end/69919 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2e45a6a0b6cc..5fdc3e354895 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-02-26 Richard Biener + + PR tree-optimization/69551 + * gcc.dg/torture/pr69951.c: New testcase. + 2016-02-25 Richard Biener PR tree-optimization/48795 diff --git a/gcc/testsuite/gcc.dg/torture/pr69951.c b/gcc/testsuite/gcc.dg/torture/pr69951.c new file mode 100644 index 000000000000..cb46fefccdb2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr69951.c @@ -0,0 +1,21 @@ +/* { dg-do run } */ +/* { dg-require-alias "" } */ + +extern void abort (void); + +int a = 1, c = 1; +extern int b __attribute__((alias("a"))); +extern int d __attribute__((alias("c"))); +int main(int argc) +{ + int *p, *q; + if (argc) + p = &c, q = &d; + else + p = &b, q = &d; + *p = 1; + *q = 2; + if (*p == 1) + abort(); + return 0; +} diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index d7a7dc554e4d..de123800f0b3 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -2943,6 +2943,14 @@ get_constraint_for_ssa_var (tree t, vec *results, bool address_p) if (node && node->alias && node->analyzed) { node = node->ultimate_alias_target (); + /* Canonicalize the PT uid of all aliases to the ultimate target. + ??? Hopefully the set of aliases can't change in a way that + changes the ultimate alias target. */ + gcc_assert ((! DECL_PT_UID_SET_P (node->decl) + || DECL_PT_UID (node->decl) == DECL_UID (node->decl)) + && (! DECL_PT_UID_SET_P (t) + || DECL_PT_UID (t) == DECL_UID (node->decl))); + DECL_PT_UID (t) = DECL_UID (node->decl); t = node->decl; } }