From: rguenth Date: Fri, 2 Jul 2010 09:14:03 +0000 (+0000) Subject: 2010-07-02 Richard Guenther X-Git-Url: http://git.sourceforge.jp/view?a=commitdiff_plain;h=dbeb5fe04388dccd8ace37626bb29c03cdf11a90;p=pf3gnuchains%2Fgcc-fork.git 2010-07-02 Richard Guenther 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@161689 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 40522695b58..365a719ed81 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-07-02 Richard Guenther + + 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 * reload.c: Include toplev.h. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8d84acde180..d9c0a99a7bd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-07-02 Richard Guenther + + PR tree-optimization/44748 + * gcc.dg/tree-ssa/ssa-ccp-29.c: New testcase. + 2010-07-02 Iain Sandoe * 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 00000000000..44d2945a311 --- /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 912c5059363..1e2309acb16 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