On the small program below, "Something_Usefull" is never aborted: when I enter
a string, my CPU usage go to 100% but then Put_Line following the "select then
abort" is never executed.

This was observed on my Ubuntu Karmic with gnat-4.4 and gnat-4.3. A friend of
mine reproduced it with 4.4.3 and 4.5.0

for information:
% gcc -v
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.4.1-4ubuntu9'
--with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs
--enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared
--enable-multiarch --enable-linker-build-id --with-system-zlib
--libexecdir=/usr/lib --without-included-gettext --enable-threads=posix
--with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls
--enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc
--enable-targets=all --disable-werror --with-arch-32=i486 --with-tune=generic
--enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu
--target=i486-linux-gnu
Thread model: posix
gcc version 4.4.1 (Ubuntu 4.4.1-4ubuntu9)


-----------------------------------
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Real_Time; use Ada.Real_Time;

procedure Test_Select is
 type State_Type is (Start, Stop);
 protected State is
   procedure Set (Value : State_Type);
   entry Wait_For (State_Type);
 private
   Current : State_Type := Stop;
 end State;

 protected body State is
   procedure Set (Value : State_Type) is
   begin
     Current := Value;
   end Set;

   entry Wait_For (for S in State_Type) when Current = S is
   begin
     null;
   end Wait_For;
 end State;

 task Keyboard;
 task body Keyboard is
 begin
   declare
     S : String(1 .. 1024);
     Last : Integer;
     pragma Unreferenced (Last);
   begin
     Get_Line (S, Last);
     State.Set (Start);
     Put_Line ("State is now 'Start'");
   end;
 end Keyboard;

 procedure Something_Usefull is
 begin
   loop
     null;
     delay until Clock + To_Time_Span (0.1);
   end loop;
 end Something_Usefull;

begin
 Put_Line ("Before select");
 select
   State.Wait_For (Start);
 then abort
   Something_Usefull;
 end select;
 Put_Line ("Done");
end Test_Select;


-- 
           Summary: select ... then abort ... end select don't abort
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: ada
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: vaurele at gmx dot com
 GCC build triplet:  i486-linux-gnu
  GCC host triplet:  i486-linux-gnu
GCC target triplet:  i486-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43485

Reply via email to