2007-11-16 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 16 Nov 2007 13:14:03 +0000 (13:14 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 16 Nov 2007 13:14:03 +0000 (13:14 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130223 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr34113.c [new file with mode: 0644]
gcc/tree-ssa-forwprop.c

index 80dac9c..2dc4553 100644 (file)
@@ -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
index 9c84667..46fd19a 100644 (file)
@@ -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 (file)
index 0000000..7694b82
--- /dev/null
@@ -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];
+}
index bacd34e..661d3d2 100644 (file)
@@ -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))
                    {