From e792558227b3d53747e74e3af801fe8faba09290 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Thu, 14 Apr 2011 21:56:34 +0000 Subject: [PATCH] cfgexpand.c (expand_call_stmt): Rematerialize the original function type if this is not a builtin function. * cfgexpand.c (expand_call_stmt): Rematerialize the original function type if this is not a builtin function. From-SVN: r172459 --- gcc/ChangeLog | 5 +++++ gcc/cfgexpand.c | 13 +++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a8b773f2dbe..7808f4cf13c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2011-04-14 Eric Botcazou + + * cfgexpand.c (expand_call_stmt): Rematerialize the original function + type if this is not a builtin function. + 2011-04-14 Jakub Jelinek PR target/48605 diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index d84c57eb7f9..45a638356b1 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -1837,11 +1837,9 @@ expand_gimple_cond (basic_block bb, gimple stmt) static void expand_call_stmt (gimple stmt) { - tree exp; - tree lhs = gimple_call_lhs (stmt); - size_t i; + tree exp, decl, lhs = gimple_call_lhs (stmt); bool builtin_p; - tree decl; + size_t i; exp = build_vl_exp (CALL_EXPR, gimple_call_num_args (stmt) + 3); @@ -1849,6 +1847,13 @@ expand_call_stmt (gimple stmt) decl = gimple_call_fndecl (stmt); builtin_p = decl && DECL_BUILT_IN (decl); + /* If this is not a builtin function, the function type through which the + call is made may be different from the type of the function. */ + if (!builtin_p) + CALL_EXPR_FN (exp) + = fold_build1 (NOP_EXPR, build_pointer_type (gimple_call_fntype (stmt)), + CALL_EXPR_FN (exp)); + TREE_TYPE (exp) = gimple_call_return_type (stmt); CALL_EXPR_STATIC_CHAIN (exp) = gimple_call_chain (stmt); -- 2.30.2