summaryrefslogtreecommitdiff
path: root/gcc/alias.c
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>2004-03-23 20:43:44 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>2004-03-23 20:43:44 +0000
commitb24423db5b258d251c2f58f447182ae03e1e4f4f (patch)
tree78c56d654a5d59c1b915116b930d92efc18f678e /gcc/alias.c
parent8548c4ad9777bf538d830b418f6457d7b7d4ccb1 (diff)
downloadgcc-b24423db5b258d251c2f58f447182ae03e1e4f4f.tar.gz
* alias.c (get_alias_set): Add support for TYPE_REF_CAN_ALIAS_ALL.
* c-common.c (handle_mode_attribute): Add extra arg to build_pointer_type_for_mode and build_reference_type_for_mode. * c-typeck.c (build_c_cast): Only look at TREE_CONSTANT_OVERFLOW for INTEGER_CST. * tree.c (build_pointer_type_for_mode): Add arg CAN_ALIAS_ALL. Chain pointers via TYPE_NEXT_PTR_TO. (build_reference_type_for_mode): Similarly. (build_type_no_quals): Add extra arg to build_pointer_type_for_mode and build_reference_type_for_mode. (tree_check4_failed): New function. * tree.h (TREE_CHECK4, PTR_OR_REF_CHECK): New macros. (TYPE_REF_CAN_ALIAS_ALL, TYPE_NEXT_PTR_TO, TYPE_NEXT_REF_TO): Likewise. (TREE_NO_UNSUED_WARNING, TREE_VIA_VIRTUAL, TREE_CONSTANT_OVERFLOW): Add check. * cp/typeck.c (build_c_cast): Only look at TREE_CONSTANT_OVERFLOW for INTEGER_CST. * ada/decl.c (gnat_to_gnu_entity, case E_Access_Type): Pass value of No_Strict_Aliasing to build_pointer_type_for_mode. * ada/utils.c (update_pointer_to): Walk pointer and ref chains. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@79873 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/alias.c')
-rw-r--r--gcc/alias.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/alias.c b/gcc/alias.c
index be10ba688a6..22e1e70ade4 100644
--- a/gcc/alias.c
+++ b/gcc/alias.c
@@ -533,8 +533,11 @@ get_alias_set (tree t)
}
/* If we have an INDIRECT_REF via a void pointer, we don't
- know anything about what that might alias. */
- else if (TREE_CODE (TREE_TYPE (inner)) == VOID_TYPE)
+ know anything about what that might alias. Likewise if the
+ pointer is marked that way. */
+ else if (TREE_CODE (TREE_TYPE (inner)) == VOID_TYPE
+ || (TYPE_REF_CAN_ALIAS_ALL
+ (TREE_TYPE (TREE_OPERAND (inner, 0)))))
return 0;
}