re PR c++/16129 (g++.old-deja/g++.eh/catch[35679]*.C)
PR wrong-code/16129 * alias.c (get_alias_set): Adjust setting of DECL_POINTER_ALIAS_SET for pointers to aggregates. From-SVN: r83674
This commit is contained in:
parent
ed397c43b4
commit
4f430fb914
@ -1,3 +1,9 @@
|
|||||||
|
2004-06-25 Mark Mitchell <mark@codesourcery.com>
|
||||||
|
|
||||||
|
PR wrong-code/16129
|
||||||
|
* alias.c (get_alias_set): Adjust setting of
|
||||||
|
DECL_POINTER_ALIAS_SET for pointers to aggregates.
|
||||||
|
|
||||||
2004-06-24 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
|
2004-06-24 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
|
||||||
|
|
||||||
* tree-inline.c (remap_type): Arrange to have just one pointer type
|
* tree-inline.c (remap_type): Arrange to have just one pointer type
|
||||||
|
15
gcc/alias.c
15
gcc/alias.c
@ -507,6 +507,8 @@ get_alias_set (tree t)
|
|||||||
/* If we haven't computed the actual alias set, do it now. */
|
/* If we haven't computed the actual alias set, do it now. */
|
||||||
if (DECL_POINTER_ALIAS_SET (decl) == -2)
|
if (DECL_POINTER_ALIAS_SET (decl) == -2)
|
||||||
{
|
{
|
||||||
|
tree pointed_to_type = TREE_TYPE (TREE_TYPE (decl));
|
||||||
|
|
||||||
/* No two restricted pointers can point at the same thing.
|
/* No two restricted pointers can point at the same thing.
|
||||||
However, a restricted pointer can point at the same thing
|
However, a restricted pointer can point at the same thing
|
||||||
as an unrestricted pointer, if that unrestricted pointer
|
as an unrestricted pointer, if that unrestricted pointer
|
||||||
@ -515,11 +517,22 @@ get_alias_set (tree t)
|
|||||||
alias set for the type pointed to by the type of the
|
alias set for the type pointed to by the type of the
|
||||||
decl. */
|
decl. */
|
||||||
HOST_WIDE_INT pointed_to_alias_set
|
HOST_WIDE_INT pointed_to_alias_set
|
||||||
= get_alias_set (TREE_TYPE (TREE_TYPE (decl)));
|
= get_alias_set (pointed_to_type);
|
||||||
|
|
||||||
if (pointed_to_alias_set == 0)
|
if (pointed_to_alias_set == 0)
|
||||||
/* It's not legal to make a subset of alias set zero. */
|
/* It's not legal to make a subset of alias set zero. */
|
||||||
DECL_POINTER_ALIAS_SET (decl) = 0;
|
DECL_POINTER_ALIAS_SET (decl) = 0;
|
||||||
|
else if (AGGREGATE_TYPE_P (pointed_to_type))
|
||||||
|
/* For an aggregate, we must treat the restricted
|
||||||
|
pointer the same as an ordinary pointer. If we
|
||||||
|
were to make the type pointed to by the
|
||||||
|
restricted pointer a subset of the pointed-to
|
||||||
|
type, then we would believe that other subsets
|
||||||
|
of the pointed-to type (such as fields of that
|
||||||
|
type) do not conflict with the type pointed to
|
||||||
|
by the restricted pointer. */
|
||||||
|
DECL_POINTER_ALIAS_SET (decl)
|
||||||
|
= pointed_to_alias_set;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DECL_POINTER_ALIAS_SET (decl) = new_alias_set ();
|
DECL_POINTER_ALIAS_SET (decl) = new_alias_set ();
|
||||||
|
Loading…
Reference in New Issue
Block a user