summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2025-10-10 08:20:22 +0200
committerRichard Biener <rguenth@gcc.gnu.org>2025-11-20 10:49:19 +0100
commit36dd19f4bea248e28a13de19ca484fbff4c48f56 (patch)
treefef110af409f4262faeaba46ac797d878a706ad4
parent413668c681d55c21d09454bee769c1561d7d55a6 (diff)
tree-optimization/122225 - fix return stmt verification
The following fixes return stmt type verification by properly looking at DECL_RESULT to decide whether that's by reference, not trying to figure that from the actual argument. PR tree-optimization/122225 * tree-cfg.cc (verify_gimple_return): Look at DECL_RESULT for DECL_BY_REFERENCE. (cherry picked from commit aaa7ac48bd888ee7bbe95006b29bb2f7eaefd0b4)
-rw-r--r--gcc/tree-cfg.cc8
1 files changed, 2 insertions, 6 deletions
diff --git a/gcc/tree-cfg.cc b/gcc/tree-cfg.cc
index ecf19d28079..6610069f22b 100644
--- a/gcc/tree-cfg.cc
+++ b/gcc/tree-cfg.cc
@@ -4878,6 +4878,7 @@ verify_gimple_return (greturn *stmt)
{
tree op = gimple_return_retval (stmt);
tree restype = TREE_TYPE (TREE_TYPE (cfun->decl));
+ tree resdecl = DECL_RESULT (cfun->decl);
/* We cannot test for present return values as we do not fix up missing
return values from the original source. */
@@ -4892,12 +4893,7 @@ verify_gimple_return (greturn *stmt)
return true;
}
- if ((TREE_CODE (op) == RESULT_DECL
- && DECL_BY_REFERENCE (op))
- || (TREE_CODE (op) == SSA_NAME
- && SSA_NAME_VAR (op)
- && TREE_CODE (SSA_NAME_VAR (op)) == RESULT_DECL
- && DECL_BY_REFERENCE (SSA_NAME_VAR (op))))
+ if (resdecl && DECL_BY_REFERENCE (resdecl))
op = TREE_TYPE (op);
if (!useless_type_conversion_p (restype, TREE_TYPE (op)))