re PR tree-optimization/89505 (LibreOffice miscompilation starting with r260383)

2019-02-26  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/89505
	* tree-ssa-structalias.c (compute_dependence_clique): Make sure
	to handle restrict pointed-to vars with multiple subvars
	correctly.

	* gcc.dg/torture/pr89505.c: New testcase.

From-SVN: r269212
This commit is contained in:
Richard Biener 2019-02-26 14:09:19 +00:00 committed by Richard Biener
parent 302fe7500a
commit 01c3ddcffb
4 changed files with 38 additions and 1 deletions

View File

@ -1,3 +1,10 @@
2019-02-26 Richard Biener <rguenther@suse.de>
PR tree-optimization/89505
* tree-ssa-structalias.c (compute_dependence_clique): Make sure
to handle restrict pointed-to vars with multiple subvars
correctly.
2019-02-26 Richard Biener <rguenther@suse.de>
PR tree-optimization/89489

View File

@ -1,3 +1,8 @@
2019-02-26 Richard Biener <rguenther@suse.de>
PR tree-optimization/89505
* gcc.dg/torture/pr89505.c: New testcase.
2019-02-26 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/opt77.adb: New test.

View File

@ -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;
}

View File

@ -7613,7 +7613,10 @@ compute_dependence_clique (void)
maybe_set_dependence_info);
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;