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:
parent
67f2362044
commit
391f9afbd2
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue