aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2007-11-16 13:14:03 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2007-11-16 13:14:03 +0000
commit99552e406c4175a2d700149758ba8c6c70d400f2 (patch)
tree97750d67d6f8abd3fbd25accee31cb3d8df964c2 /gcc
parent7f879c9615a980c3874350e9739bce139c67f322 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr34113.c11
-rw-r--r--gcc/tree-ssa-forwprop.c4
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))
{