diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/pr36141.c | 17 | ||||
-rw-r--r-- | gcc/tree-ssa-forwprop.c | 3 |
4 files changed, 31 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5fe9f63..aba462f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9adb755..ecae395 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 0000000..8275619 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/pr36141.c @@ -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; +} diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c index 9fbf58d..31322b6 100644 --- a/gcc/tree-ssa-forwprop.c +++ b/gcc/tree-ssa-forwprop.c @@ -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))) |