diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/tree-ssa-ccp.c | 10 |
2 files changed, 15 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 684919a..ae90fdd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2010-07-14 Richard Guenther <rguenther@suse.de> + * tree-ssa-ccp.c (fold_const_aggregate_ref): Handle MEM_REF + as base of ARRAY_REFs. + +2010-07-14 Richard Guenther <rguenther@suse.de> + PR middle-end/44930 * tree-pretty-print.c (do_niy): Do not print a newline. diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index 17d07a9..89ef5b3 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -1164,6 +1164,16 @@ fold_const_aggregate_ref (tree t) base = TREE_OPERAND (t, 0); switch (TREE_CODE (base)) { + case MEM_REF: + /* ??? We could handle this case. */ + if (!integer_zerop (TREE_OPERAND (base, 1))) + return NULL_TREE; + base = get_base_address (base); + if (!base + || TREE_CODE (base) != VAR_DECL) + return NULL_TREE; + + /* Fallthru. */ case VAR_DECL: if (!TREE_READONLY (base) || TREE_CODE (TREE_TYPE (base)) != ARRAY_TYPE |