re PR middle-end/36141 (Gcc 4.4 failed to boostrap)
authorAndrew Pinski <andrew_pinski@playstation.sony.com>
Tue, 6 May 2008 03:47:29 +0000 (03:47 +0000)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Tue, 6 May 2008 03:47:29 +0000 (20:47 -0700)
2008-05-05  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        PR middle-end/36141
        * tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Don't create VCE
        for function decls.

2008-05-05  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        PR middle-end/36141
        * gcc.c-torture/pr36141.c: New testcase.

From-SVN: r134972

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

index 5fe9f63cce27216775bed59397f4d88a29b123d7..aba462fbd8d115938f586d8d5df161f876b20ed1 100644 (file)
@@ -1,3 +1,9 @@
+2008-05-05  Andrew Pinski  <andrew_pinski@playstation.sony.com>
+
+       PR middle-end/36141
+       * tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Don't create VCE
+       for function decls.
+
 2008-05-05  H.J. Lu  <hongjiu.lu@intel.com>
 
        * config/i386/sse.md (sse2_<plusminus_insn><mode>3): Fix a typo.
index 9adb755b6006b8244793409b2f360c4069030e2d..ecae39579e6b978f1661a566408065653fb31416 100644 (file)
@@ -1,3 +1,8 @@
+2008-05-05  Andrew Pinski  <andrew_pinski@playstation.sony.com>
+
+       PR middle-end/36141
+       * gcc.c-torture/pr36141.c: New testcase.
+
 2008-05-06  Danny Smith  <dannysmith@users.sourceforge.net>
 
        * lib/target_supports.exp (check_effective_target_4byte_wchar_t):
diff --git a/gcc/testsuite/gcc.c-torture/pr36141.c b/gcc/testsuite/gcc.c-torture/pr36141.c
new file mode 100644 (file)
index 0000000..8275619
--- /dev/null
@@ -0,0 +1,17 @@
+extern void ffi_closure_unix (void);
+ffi_prep_closure_loc (void)
+{
+  struct ia64_fd
+  {
+    unsigned long long code_pointer;
+    unsigned long long gp;
+  };
+  struct ffi_ia64_trampoline_struct
+  {
+    unsigned long long code_pointer;
+  };
+  struct ffi_ia64_trampoline_struct *tramp;
+  struct ia64_fd *fd;
+  fd = (struct ia64_fd *)(void *)ffi_closure_unix;
+  tramp->code_pointer = fd->code_pointer;
+}
index 9fbf58d853df9f50011fa170dd468850b2146339..31322b65791872643bd5fef8c4201f2bd1c76bda 100644 (file)
@@ -657,6 +657,9 @@ forward_propagate_addr_expr_1 (tree name, tree def_rhs, tree use_stmt,
       && TREE_OPERAND (rhs, 0) == name
       && TYPE_SIZE (TREE_TYPE (rhs))
       && TYPE_SIZE (TREE_TYPE (TREE_OPERAND (def_rhs, 0)))
+      /* Function decls should not be used for VCE either as it could be
+         a function descriptor that we want and not the actual function code.  */
+      && TREE_CODE (TREE_OPERAND (def_rhs, 0)) != FUNCTION_DECL
       /* We should not convert volatile loads to non volatile loads. */
       && !TYPE_VOLATILE (TREE_TYPE (rhs))
       && !TYPE_VOLATILE (TREE_TYPE (TREE_OPERAND (def_rhs, 0)))