From: Matthias Klose Date: Thu, 21 Mar 2019 12:28:26 +0000 (+0000) Subject: backport: re PR tree-optimization/89505 (LibreOffice miscompilation starting with... X-Git-Tag: releases/gcc-7.5.0~528 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=64963d46e55394a3a896ccd3f5ecc88b322a9dcf;p=thirdparty%2Fgcc.git backport: re PR tree-optimization/89505 (LibreOffice miscompilation starting with r260383) 2019-03-21 Matthias Klose Backport from mainline 2019-02-26 Richard Biener PR tree-optimization/89505 * tree-ssa-structalias.c (compute_dependence_clique): Make sure to handle restrict pointed-to vars with multiple subvars correctly. 2019-03-21 Matthias Klose Backport from mainline 2019-02-26 Richard Biener PR tree-optimization/89505 * gcc.dg/torture/pr89505.c: New testcase. From-SVN: r269836 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b24bc2fe0e6a..cfcf569785fd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2019-03-21 Matthias Klose + + Backport from mainline + 2019-02-26 Richard Biener + + PR tree-optimization/89505 + * tree-ssa-structalias.c (compute_dependence_clique): Make sure + to handle restrict pointed-to vars with multiple subvars + correctly. + 2019-03-17 H.J. Lu Backport from mainline diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 53aaf96cc17c..28756b1f6bee 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2019-03-21 Matthias Klose + + Backport from mainline + 2019-02-26 Richard Biener + + PR tree-optimization/89505 + * gcc.dg/torture/pr89505.c: New testcase. + 2019-03-17 Thomas Koenig PR fortran/84394 diff --git a/gcc/testsuite/gcc.dg/torture/pr89505.c b/gcc/testsuite/gcc.dg/torture/pr89505.c new file mode 100644 index 000000000000..6fca475ad9d6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr89505.c @@ -0,0 +1,22 @@ +/* { dg-do run } */ + +struct S { int i; void *p; int j; }; +int a; +int __attribute__((noinline)) +foo (struct S * __restrict p, int q) +{ + int *x = &p->j; + if (q) + x = &a; + p->j = 1; + *x = 2; + return p->j; +} + +int main() +{ + struct S s; + if (foo (&s, 0) != 2) + __builtin_abort (); + return 0; +} diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index b5a5f0f54d19..bffa7dad4b49 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -7456,7 +7456,10 @@ compute_dependence_clique (void) } if (used) { - bitmap_set_bit (rvars, restrict_var->id); + /* Add all subvars to the set of restrict pointed-to set. */ + for (unsigned sv = restrict_var->head; sv != 0; + sv = get_varinfo (sv)->next) + bitmap_set_bit (rvars, sv); varinfo_t escaped = get_varinfo (find (escaped_id)); if (bitmap_bit_p (escaped->solution, restrict_var->id)) escaped_p = true;