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.
Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed.
PR tree-optimization/122225
* tree-cfg.cc (verify_gimple_return): Look at DECL_RESULT
for DECL_BY_REFERENCE.
---
gcc/tree-cfg.cc | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/gcc/tree-cfg.cc b/gcc/tree-cfg.cc
index 5b2919ae10f..01d92210938 100644
--- a/gcc/tree-cfg.cc
+++ b/gcc/tree-cfg.cc
@@ -4800,6 +4800,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. */
@@ -4814,12 +4815,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)))
--
2.51.0