https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112653

--- Comment #12 from Richard Biener <rguenth at gcc dot gnu.org> ---
Hmm, r10-900-ged315c041f48f4 contained related work(?), but a typo(?):

@@ -4976,7 +5002,12 @@ find_func_aliases (struct function *fn, gimple *origt)
       greturn *return_stmt = as_a <greturn *> (t);
       fi = NULL;
       if (!in_ipa_mode
-         || !(fi = get_vi_for_tree (fn->decl)))
+         && SSA_VAR_P (gimple_return_retval (return_stmt)))
+       {
+         /* We handle simple returns by post-processing the solutions.  */
+         ;
+       }
+      if (!(fi = get_vi_for_tree (fn->decl)))
        make_escape_constraint (gimple_return_retval (return_stmt));

the 2nd 'if' should be an 'else if', otherwise the code is dead.  It doesn't
really help the testcase since 'test2' is still marked escaped but 2nd
level points-to effects of making the var escaped would be not there.

So instead of full-blown tracking of return_escaped one could fix the above
(will test for negative impact separately ...) and then compute
return_escaped during post-processing only.  But I first have to understand
the post-processing code.

Reply via email to