From 7c88f67af2a876e108a5fa1abd64e87e9e3019bc Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Sat, 24 May 2008 09:27:47 +0000 Subject: [PATCH] tree-dfa.c (refs_may_alias_p): Re-instantiate case that a scalar variable can be only accessed through a... 2008-05-24 Richard Guenther * tree-dfa.c (refs_may_alias_p): Re-instantiate case that a scalar variable can be only accessed through a pointer or a union. From-SVN: r135846 --- gcc/ChangeLog | 6 ++++++ gcc/tree-dfa.c | 19 +++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2a77cf8a207..d036e0318ac 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-05-24 Richard Guenther + + * tree-dfa.c (refs_may_alias_p): Re-instantiate case that + a scalar variable can be only accessed through a pointer + or a union. + 2008-05-24 Kaveh R. Ghazi * builtins.c (fold_builtin_fpclassify): Fix spelling of FP_INFINITE. diff --git a/gcc/tree-dfa.c b/gcc/tree-dfa.c index 02d2139d3b3..7e4bb7681b7 100644 --- a/gcc/tree-dfa.c +++ b/gcc/tree-dfa.c @@ -1078,8 +1078,23 @@ refs_may_alias_p (tree ref1, tree ref2) /* If one base is a ref-all pointer weird things are allowed. */ strict_aliasing_applies = (flag_strict_aliasing - && get_alias_set (base1) != 0 - && get_alias_set (base2) != 0); + && (!INDIRECT_REF_P (base1) + || get_alias_set (base1) != 0) + && (!INDIRECT_REF_P (base2) + || get_alias_set (base2) != 0)); + + /* If strict aliasing applies the only way to access a scalar variable + is through a pointer dereference or through a union (gcc extension). */ + if (strict_aliasing_applies + && ((SSA_VAR_P (ref2) + && !AGGREGATE_TYPE_P (TREE_TYPE (ref2)) + && !INDIRECT_REF_P (ref1) + && TREE_CODE (TREE_TYPE (base1)) != UNION_TYPE) + || (SSA_VAR_P (ref1) + && !AGGREGATE_TYPE_P (TREE_TYPE (ref1)) + && !INDIRECT_REF_P (ref2) + && TREE_CODE (TREE_TYPE (base2)) != UNION_TYPE))) + return false; /* If both references are through the same type, or if strict aliasing doesn't apply they are through two same pointers, they do not alias -- 2.30.2