re PR middle-end/33330 (Wrong alias for accessing scalar through array)
2007-09-07 Richard Guenther <rguenther@suse.de> PR middle-end/33330 * tree-ssa-operands.c (access_can_touch_variable): An access of the form (*p)[0] can touch a variable of same size. From-SVN: r128240
This commit is contained in:
parent
201b2eadc4
commit
ccf64c833f
@ -1,3 +1,9 @@
|
||||
2007-09-07 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR middle-end/33330
|
||||
* tree-ssa-operands.c (access_can_touch_variable): An access
|
||||
of the form (*p)[0] can touch a variable of same size.
|
||||
|
||||
2007-09-07 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* passes.c (init_optimization_passes): Add simple dce and addressable
|
||||
|
@ -1292,6 +1292,15 @@ access_can_touch_variable (tree ref, tree alias, HOST_WIDE_INT offset,
|
||||
}
|
||||
To implement this, we just punt on accesses through union
|
||||
pointers entirely.
|
||||
|
||||
Another case we have to allow is accessing a variable
|
||||
through an array access at offset zero. This happens from
|
||||
code generated by the fortran frontend like
|
||||
|
||||
char[1:1] & my_char_ref;
|
||||
char my_char;
|
||||
my_char_ref_1 = (char[1:1] &) &my_char;
|
||||
D.874_2 = (*my_char_ref_1)[1]{lb: 1 sz: 1};
|
||||
*/
|
||||
else if (ref
|
||||
&& flag_strict_aliasing
|
||||
@ -1300,6 +1309,14 @@ access_can_touch_variable (tree ref, tree alias, HOST_WIDE_INT offset,
|
||||
&& base
|
||||
&& (TREE_CODE (base) != INDIRECT_REF
|
||||
|| TREE_CODE (TREE_TYPE (base)) != UNION_TYPE)
|
||||
&& (TREE_CODE (base) != INDIRECT_REF
|
||||
|| TREE_CODE (ref) != ARRAY_REF
|
||||
|| offset != 0
|
||||
|| (DECL_SIZE (alias)
|
||||
&& TREE_CODE (DECL_SIZE (alias)) == INTEGER_CST
|
||||
&& size != -1
|
||||
&& (unsigned HOST_WIDE_INT)size
|
||||
!= TREE_INT_CST_LOW (DECL_SIZE (alias))))
|
||||
&& !AGGREGATE_TYPE_P (TREE_TYPE (alias))
|
||||
&& TREE_CODE (TREE_TYPE (alias)) != COMPLEX_TYPE
|
||||
&& !var_ann (alias)->is_heapvar
|
||||
|
Loading…
Reference in New Issue
Block a user