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

            Bug ID: 116832
           Summary: Code after a select-then-abort in an abortable part
                    executes when the outer select-then-abort completes
           Product: gcc
           Version: 14.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: ada
          Assignee: unassigned at gcc dot gnu.org
          Reporter: liam at liampwll dot com
                CC: dkm at gcc dot gnu.org
  Target Milestone: ---

As shown by the code below, code after a select-then-abort in an abortable part
executes when the outer select-then-abort completes. This only occurs when B is
a protected object rather than a task. This is potentially related to bug
52280, which is still reproducible. This occurs on trunk, 14.2.1, and 8.2.
Other versions are untested.

with Ada.Text_IO; use Ada.Text_IO;

procedure Example is
   task A is
      entry A;
   end A;

   protected B is
      entry B;
   end B;

   task body A is
   begin
      delay 3.0;
      accept A;
   end A;

   protected body B is
      entry B when False is
      begin
         Ada.Text_IO.Put_Line ("This correctly never executes.");
      end B;
   end B;
begin
   select
      A.A;
   then abort
      select
         B.B;
      then abort
         B.B;
      end select;
      Ada.Text_IO.Put_Line ("This should be unreachable but it executes.");
   end select;
end Example;

Reply via email to