diff options
author | Richard Guenther <rguenther@suse.de> | 2010-07-02 09:14:03 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-07-02 09:14:03 +0000 |
commit | 3fa39831668c00d32632f72860cbacbcf8bef1cb (patch) | |
tree | e275a509ae2b4520b1fe0b16331bf4376e900379 | |
parent | 8c7481f253d8943d16947248d76d7f717f8d7028 (diff) | |
download | gcc-3fa39831668c00d32632f72860cbacbcf8bef1cb.zip gcc-3fa39831668c00d32632f72860cbacbcf8bef1cb.tar.gz gcc-3fa39831668c00d32632f72860cbacbcf8bef1cb.tar.bz2 |
re PR tree-optimization/44748 (ICE: in fold_convert_const_int_from_real, at fold-const.c:1548)
2010-07-02 Richard Guenther <rguenther@suse.de>
PR tree-optimization/44748
* tree-ssa-ccp.c (fold_const_aggregate_ref): Properly handle
the embedded conversion in MEM_REFs.
* gcc.dg/tree-ssa/ssa-ccp-29.c: New testcase.
From-SVN: r161689
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-29.c | 11 | ||||
-rw-r--r-- | gcc/tree-ssa-ccp.c | 9 |
4 files changed, 30 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4052269..365a719 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-07-02 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/44748 + * tree-ssa-ccp.c (fold_const_aggregate_ref): Properly handle + the embedded conversion in MEM_REFs. + 2010-07-01 López-Ibáñez <manu@gcc.gnu.org> * reload.c: Include toplev.h. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8d84acd..d9c0a99 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-07-02 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/44748 + * gcc.dg/tree-ssa/ssa-ccp-29.c: New testcase. + 2010-07-02 Iain Sandoe <iains@gcc.gnu.org> * objc-obj-c++-shared/next-abi.h: Remove dependency on system diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-29.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-29.c new file mode 100644 index 0000000..44d2945 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-29.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fdump-tree-ccp2" } */ + +static double num; +int foo (void) +{ + return *(unsigned *)# +} + +/* { dg-final { scan-tree-dump "return 0;" "ccp2" } } */ +/* { dg-final { cleanup-tree-dump "ccp2" } } */ diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index 912c505..1e2309a 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -1317,7 +1317,14 @@ fold_const_aggregate_ref (tree t) if (DECL_P (base) && !AGGREGATE_TYPE_P (TREE_TYPE (base)) && integer_zerop (TREE_OPERAND (t, 1))) - return get_symbol_constant_value (base); + { + tree res = get_symbol_constant_value (base); + if (res + && !useless_type_conversion_p + (TREE_TYPE (t), TREE_TYPE (res))) + res = fold_unary (VIEW_CONVERT_EXPR, TREE_TYPE (t), res); + return res; + } if (!TREE_READONLY (base) || TREE_CODE (TREE_TYPE (base)) != ARRAY_TYPE |