diff options
author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-02-22 15:53:27 +0000 |
---|---|---|
committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-02-22 15:53:27 +0000 |
commit | c21cf15cd9421a802ab70cd461d4e135e20db943 (patch) | |
tree | c4319a78825fefbbe169d78d1f2716fb5d69d8e1 /gcc/tree-inline.c | |
parent | c21d7f23b99500b4840d495e4e9c25a128ca3891 (diff) | |
download | gcc-c21cf15cd9421a802ab70cd461d4e135e20db943.tar.gz |
2010-02-22 Richard Guenther <rguenther@suse.de>
PR lto/43045
* tree-inline.c (declare_return_variable): Use the type of
the call stmt lhs if available.
* gfortran.dg/lto/20100222-1_0.f03: New testcase.
* gfortran.dg/lto/20100222-1_1.c: Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@156966 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-inline.c')
-rw-r--r-- | gcc/tree-inline.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 9c560b1056c..de8ca707ce2 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -2542,9 +2542,16 @@ declare_return_variable (copy_body_data *id, tree return_slot, tree modify_dest) tree caller = id->dst_fn; tree result = DECL_RESULT (callee); tree callee_type = TREE_TYPE (result); - tree caller_type = TREE_TYPE (TREE_TYPE (callee)); + tree caller_type; tree var, use; + /* Handle type-mismatches in the function declaration return type + vs. the call expression. */ + if (modify_dest) + caller_type = TREE_TYPE (modify_dest); + else + caller_type = TREE_TYPE (TREE_TYPE (callee)); + /* We don't need to do anything for functions that don't return anything. */ if (!result || VOID_TYPE_P (callee_type)) |