From: rguenth Date: Mon, 5 Jul 2010 09:04:44 +0000 (+0000) Subject: 2010-07-05 Richard Guenther X-Git-Tag: upstream/4.9.2~28130 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f5ec85fb0dbe2a6f726a6c7d783f7d146e5adaee;p=platform%2Fupstream%2Flinaro-gcc.git 2010-07-05 Richard Guenther * tree-cfg.c (verify_gimple_return): Handle DECL_BY_REFERENCE RESULT_DECLs properly. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@161821 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2b0f0ef..09e8dee 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2010-07-05 Richard Guenther + + * tree-cfg.c (verify_gimple_return): Handle DECL_BY_REFERENCE + RESULT_DECLs properly. + 2010-07-04 H.J. Lu PR rtl-optimization/44695 @@ -15,8 +20,8 @@ 2010-07-04 Jan Hubicka - * cgraphunit.c (init_cgraph): Only initialize dump file if it is not already - initialized. + * cgraphunit.c (init_cgraph): Only initialize dump file if it is not + already initialized. 2010-07-04 Richard Sandiford diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 99b8f2a..448e275 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -3826,12 +3826,14 @@ verify_gimple_return (gimple stmt) return true; } - if (!useless_type_conversion_p (restype, TREE_TYPE (op)) - /* ??? With C++ we can have the situation that the result - decl is a reference type while the return type is an aggregate. */ - && !(TREE_CODE (op) == RESULT_DECL - && TREE_CODE (TREE_TYPE (op)) == REFERENCE_TYPE - && useless_type_conversion_p (restype, TREE_TYPE (TREE_TYPE (op))))) + if ((TREE_CODE (op) == RESULT_DECL + && DECL_BY_REFERENCE (op)) + || (TREE_CODE (op) == SSA_NAME + && TREE_CODE (SSA_NAME_VAR (op)) == RESULT_DECL + && DECL_BY_REFERENCE (SSA_NAME_VAR (op)))) + op = TREE_TYPE (op); + + if (!useless_type_conversion_p (restype, TREE_TYPE (op))) { error ("invalid conversion in return statement"); debug_generic_stmt (restype);