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

--- Comment #13 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Eric Botcazou from comment #12)
> > Maybe for that we just have to use the result of the call in the
> > non-throwing case.
> 
> That seems to block the hoisting in all cases.

  function Bar (A : access Integer; N : Integer) return Integer is
    Ret : Integer := 0;
    Ret2 : Integer := 0;
  begin
    if N /= 0 then
      Ret2 := Foo (N);
      Ret := A.all;
    end if;
    Ret := Ret + A.all;
    return Ret + Ret2;
  end;

seems to work as in, FAIL without the patch and PASS with it.

Reply via email to