This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/37046] Inlining produces calls which gimple_call_fndecl cannot handle correctly
- From: "jamborm at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 7 Aug 2008 10:11:37 -0000
- Subject: [Bug middle-end/37046] Inlining produces calls which gimple_call_fndecl cannot handle correctly
- References: <bug-37046-15951@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #1 from jamborm at gcc dot gnu dot org 2008-08-07 10:11 -------
I am testing the patch below which should fix the problem:
2008-08-07 Martin Jambor <mjambor@suse.cz>
* tree-inline.c (remap_gimple_stmt): Remove extraneous addr_expr
from call statements.
Index: iinln/gcc/tree-inline.c
===================================================================
--- iinln.orig/gcc/tree-inline.c
+++ iinln/gcc/tree-inline.c
@@ -1209,6 +1209,14 @@ remap_gimple_stmt (gimple stmt, copy_bod
wi.info = id;
walk_gimple_op (copy, remap_gimple_op_r, &wi);
+ /* When a parameter is propagated into a call destination, it is in the form
+ of call<addr_expr<fndecl>> which gimple_call_fndecl does not understand.
+ Therefore we need to take the extra addr_expr out here. */
+ if (is_gimple_call (copy)
+ && TREE_CODE (gimple_call_fn (copy)) == ADDR_EXPR
+ && TREE_CODE (TREE_OPERAND (gimple_call_fn (copy), 0)) == FUNCTION_DECL)
+ gimple_call_set_fn (copy, TREE_OPERAND (gimple_call_fn (copy), 0));
+
/* We have to handle EH region remapping of GIMPLE_RESX specially because
the region number is not an operand. */
if (gimple_code (stmt) == GIMPLE_RESX && id->eh_region_offset)
--
jamborm at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |ASSIGNED
Ever Confirmed|0 |1
Last reconfirmed|0000-00-00 00:00:00 |2008-08-07 10:11:37
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37046