re PR tree-optimization/17252 (not marking char types as aliasing anything)

PR tree-optimization/17252
	* tree-ssa-alias.c (may_alias_p): Don't assume that a
	pointer may not point to itself when using relaxed
	aliasing rules.

testsuite/ChangeLog

	PR tree-optimization/17252
	* gcc.c-torture/execute/pr17252.c: New test.

From-SVN: r87529
This commit is contained in:
Diego Novillo 2004-09-15 02:58:28 +00:00 committed by Diego Novillo
parent 67f2362044
commit 391f9afbd2
4 changed files with 38 additions and 1 deletions

View File

@ -1,3 +1,10 @@
2004-09-14 Diego Novillo <dnovillo@redhat.com>
PR tree-optimization/17252
* tree-ssa-alias.c (may_alias_p): Don't assume that a
pointer may not point to itself when using relaxed
aliasing rules.
2004-09-14 Richard Henderson <rth@redhat.com>
PR middle-end/17397

View File

@ -1,3 +1,8 @@
2004-09-14 Diego Novillo <dnovillo@redhat.com>
PR tree-optimization/17252
* gcc.c-torture/execute/pr17252.c: New test.
2004-09-14 Andrew Pinski <apinski@apple.com>
* g++.dg/tree-ssa/pointer-reference-alias.C: New test.

View File

@ -0,0 +1,24 @@
/* PR 17252. When a char * pointer P takes its own address, storing
into *P changes P itself. */
char *a;
main ()
{
int i;
/* Make 'a' point to itself. */
a = (char *)&a;
/* Assign NULL to 'a' byte by byte. */
for (i = 0; i < sizeof(char *); i++)
a[i] = 0;
/* If a's memory tag does not contain 'a' in its alias set, we will
think that this predicate is superfluous and change it to
'if (1)'. */
if (a == (char *)&a)
abort ();
return 0;
}

View File

@ -1558,7 +1558,8 @@ may_alias_p (tree ptr, HOST_WIDE_INT mem_alias_set,
for PTR's alias set here, not its pointed-to type. We also can't
do this check with relaxed aliasing enabled. */
if (POINTER_TYPE_P (TREE_TYPE (var))
&& var_alias_set != 0)
&& var_alias_set != 0
&& mem_alias_set != 0)
{
HOST_WIDE_INT ptr_alias_set = get_alias_set (ptr);
if (ptr_alias_set == var_alias_set)