Hi Arnaud,

On 29/07/14 16:02, Arnaud Charlet wrote:
If a procedure or entry has an formal out-parameter of a null-excluding access
type, there is no check applied to the actual before the call. This patch
removes a spurious access check on such parameters on entry calls.

Compiling and executing p.adb must yield;

     Procedure version did not raise exception
     Entry version did not raise exception

---
with Ada.Text_IO; use Ada.Text_IO;
procedure P is
    type Integer_Access is access all Integer;

    An_Integer : aliased Integer;

    procedure Procedure_Version (A : out not null Integer_Access) is
    begin
       A := An_Integer'Access;
    end Procedure_Version;

    protected Object is
       entry Entry_Version (A : out not null Integer_Access);
    end Object;

    protected body Object is
       entry Entry_Version (A : out not null Integer_Access) when True is
          Junk : integer := 0;

this variable "Junk" seems useless.

       begin
          A := An_Integer'Access;
       end Entry_Version;
    end Object;

    A : Integer_Access;
begin
    A := null;
    Procedure_Version (A);
    Put_Line ("Procedure version did not raise exception");

    A := null;
    Object.Entry_Version (A);
    Put_Line ("Entry version did not raise exception");
end;

Ciao, Duncan.

Reply via email to