aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenth@gcc.gnu.org>2010-07-05 09:04:44 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2010-07-05 09:04:44 +0000
commite3061843d8b708c29d4194afa970a56b3a987457 (patch)
tree59850848c5abef9945446e189f590380583debc0 /gcc
parent5bb120900a7cdb113b00ccfac46714c553d8f4fc (diff)
downloadgcc-e3061843d8b708c29d4194afa970a56b3a987457.zip
gcc-e3061843d8b708c29d4194afa970a56b3a987457.tar.gz
gcc-e3061843d8b708c29d4194afa970a56b3a987457.tar.bz2
tree-cfg.c (verify_gimple_return): Handle DECL_BY_REFERENCE RESULT_DECLs properly.
2010-07-05 Richard Guenther <rguenther@suse.de> * tree-cfg.c (verify_gimple_return): Handle DECL_BY_REFERENCE RESULT_DECLs properly. From-SVN: r161821
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/tree-cfg.c14
2 files changed, 15 insertions, 8 deletions
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 <rguenther@suse.de>
+
+ * tree-cfg.c (verify_gimple_return): Handle DECL_BY_REFERENCE
+ RESULT_DECLs properly.
+
2010-07-04 H.J. Lu <hongjiu.lu@intel.com>
PR rtl-optimization/44695
@@ -15,8 +20,8 @@
2010-07-04 Jan Hubicka <jh@suse.cz>
- * 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 <rdsandiford@googlemail.com>
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);