Index: gcc/alias.c =================================================================== *** gcc/alias.c (revision 148119) --- gcc/alias.c (working copy) *************** get_deref_alias_set_1 (tree t) *** 536,547 **** { tree decl = find_base_decl (t); ! if (decl && DECL_POINTER_ALIAS_SET_KNOWN_P (decl)) { /* If we haven't computed the actual alias set, do it now. */ ! 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. However, a restricted pointer can point at the same thing --- 536,550 ---- { tree decl = find_base_decl (t); ! if (decl ! && POINTER_TYPE_P (TREE_TYPE (decl)) ! && TYPE_RESTRICT (TREE_TYPE (decl))) { /* If we haven't computed the actual alias set, do it now. */ ! if (DECL_POINTER_ALIAS_SET (decl) == -2 ! || !DECL_POINTER_ALIAS_SET_KNOWN_P (decl)) { ! tree pointed_to_type = TREE_TYPE (TREE_TYPE (t)); /* No two restricted pointers can point at the same thing. However, a restricted pointer can point at the same thing *************** get_deref_alias_set_1 (tree t) *** 556,562 **** if (pointed_to_alias_set == 0) /* It's not legal to make a subset of alias set zero. */ 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 --- 559,566 ---- if (pointed_to_alias_set == 0) /* It's not legal to make a subset of alias set zero. */ DECL_POINTER_ALIAS_SET (decl) = 0; ! else if (AGGREGATE_TYPE_P (pointed_to_type) ! && TREE_CODE (pointed_to_type) != ARRAY_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