Fix IPA SRA removal of DECL_BY_REFERENCE return

While doing bogus call LHS removal I noticed that cloning with
dropping a return value creates a bogus replacement for a
DECL_BY_REFERENCE DECL_RESULT, resulting in MEM_REFs of
aggregates rather than pointers.  The following fixes this
latent issue.

2021-05-06  Richard Biener  <rguenther@suse.de>

	* tree-inline.c (tree_function_versioning): Fix DECL_BY_REFERENCE
	return variable removal.
This commit is contained in:
Richard Biener 2021-05-06 09:44:49 +02:00
parent e82e87a851
commit 1698f496c5

View File

@ -6367,6 +6367,8 @@ tree_function_versioning (tree old_decl, tree new_decl,
tree resdecl_repl = copy_result_decl_to_var (DECL_RESULT (old_decl),
&id);
declare_inline_vars (NULL, resdecl_repl);
if (DECL_BY_REFERENCE (DECL_RESULT (old_decl)))
resdecl_repl = build_fold_addr_expr (resdecl_repl);
insert_decl_map (&id, DECL_RESULT (old_decl), resdecl_repl);
DECL_RESULT (new_decl)