diff options
author | Richard Guenther <rguenther@suse.de> | 2007-11-16 13:14:03 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2007-11-16 13:14:03 +0000 |
commit | 99552e406c4175a2d700149758ba8c6c70d400f2 (patch) | |
tree | 97750d67d6f8abd3fbd25accee31cb3d8df964c2 /gcc | |
parent | 7f879c9615a980c3874350e9739bce139c67f322 (diff) | |
download | gcc-99552e406c4175a2d700149758ba8c6c70d400f2.zip gcc-99552e406c4175a2d700149758ba8c6c70d400f2.tar.gz gcc-99552e406c4175a2d700149758ba8c6c70d400f2.tar.bz2 |
re PR tree-optimization/34113 (ICE in get_addr_dereference_operands, at tree-ssa-operands.c:1746)
2007-11-16 Richard Guenther <rguenther@suse.de>
PR tree-optimization/34113
* tree-ssa-forwprop.c (tree_ssa_forward_propagate_single_use_vars):
Use correct conversion direction for checking type compatibility.
* gcc.c-torture/compile/pr34113.c: New testcase.
From-SVN: r130223
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr34113.c | 11 | ||||
-rw-r--r-- | gcc/tree-ssa-forwprop.c | 4 |
4 files changed, 24 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 80dac9c..2dc4553 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2007-11-16 Richard Guenther <rguenther@suse.de> + PR tree-optimization/34113 + * tree-ssa-forwprop.c (tree_ssa_forward_propagate_single_use_vars): + Use correct conversion direction for checking type compatibility. + +2007-11-16 Richard Guenther <rguenther@suse.de> + PR tree-optimization/34099 * tree-ssa-ccp.c (likely_value): Use a whitelist for operators that produce UNDEFINED result if at least one of its operands diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9c84667..46fd19a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2007-11-16 Richard Guenther <rguenther@suse.de> + PR tree-optimization/34113 + * gcc.c-torture/compile/pr34113.c: New testcase. + +2007-11-16 Richard Guenther <rguenther@suse.de> + PR tree-optimization/34099 * g++.dg/torture/pr3499.C: New testcase. * gcc.c-torture/execute/pr34099.c: Likewise. diff --git a/gcc/testsuite/gcc.c-torture/compile/pr34113.c b/gcc/testsuite/gcc.c-torture/compile/pr34113.c new file mode 100644 index 0000000..7694b82 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr34113.c @@ -0,0 +1,11 @@ +struct sockaddr_in { int sin_addr; }; +static void ConvertAddr (struct sockaddr_in *saddr, void **addr) +{ + *addr = (void *) &saddr->sin_addr; +} +unsigned char EnableLocalHost (struct sockaddr_in *ifa_addr) +{ + unsigned char * addr; + ConvertAddr(ifa_addr, (void **)&addr); + return addr[0]; +} diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c index bacd34e..661d3d2 100644 --- a/gcc/tree-ssa-forwprop.c +++ b/gcc/tree-ssa-forwprop.c @@ -959,8 +959,8 @@ tree_ssa_forward_propagate_single_use_vars (void) || TREE_CODE (rhs) == CONVERT_EXPR) && TREE_CODE (TREE_OPERAND (rhs, 0)) == ADDR_EXPR && POINTER_TYPE_P (TREE_TYPE (rhs)) - && useless_type_conversion_p (TREE_TYPE (TREE_TYPE (rhs)), - TREE_TYPE (TREE_TYPE (TREE_OPERAND (rhs, 0)))))) + && useless_type_conversion_p (TREE_TYPE (TREE_TYPE (TREE_OPERAND (rhs, 0))), + TREE_TYPE (TREE_TYPE (rhs))))) { if (forward_propagate_addr_expr (lhs, rhs)) { |