> Ugh, yeah.  I suppose PTA assigned a HEAP var as pointed-to object for the
> original pointer, even if the transformed stmt
>
>  orig_ptr_1 = &a;
>
> has the points-to information preserved for orig_ptr_1 further propagation
> of &a will make accesses through orig_ptr_1 have different alias
> properties.

AFAICS it's an escaping problem: the new variable isn't seen as escaping at 
some call point.  Testcase attached, compile opt22.adb at -O but make sure 
your tree is up-to-date.

> What should work in this special case of a singleton points-to set of
> orig_ptr_1 (might want to check that) is, do
>
>   SET_DECL_PT_UID (decl-of-a, DECL_UID (pointed-to orig_ptr_1));
>
> The brute force approach is not acceptable (it'll wreck IPA points-to
> info).

OK, thanks for the tip.


2011-09-26  Eric Botcazou  <ebotca...@adacore.com>

        * gnat.dg/opt22.adb: New test.
        * gnat.dg/opt22_pkg.ad[sb]: New helper.



-- 
Eric Botcazou
-- { dg-do run }
-- { dg-options "-O" }

with Opt22_Pkg; use Opt22_Pkg;

procedure Opt22 is

   procedure Go (S : String) is
   begin
      begin
        Fail;
      exception
        when Constraint_Error => Put ("the " & S);
      end;
      Put ("the " & S);
   end;

begin
   Go ("message");
end;
package Opt22_Pkg is

   procedure Fail;

   procedure Put (S : String);

end Opt22_Pkg;
package body Opt22_Pkg is

   procedure Fail is
   begin
      raise Constraint_Error;
   end;

   procedure Put (S : String) is
   begin
      if S /= "the message" then
         raise Program_Error;
      end if;
   end;

end Opt22_Pkg;

Reply via email to