with Text_IO;
procedure test1 is
task type T1 is
entry E1;
end T1;
task body T1 is
begin
Text_IO.Put_Line ("T1 started");
accept E1;
Text_IO.Put_Line ("T1 done");
end T1;
function f1 return T1 is
begin
return R : T1;
end f1;
procedure p2 (x1: T1) is
begin
Text_IO.Put_Line ("begin p2");
x1.E1;
end p2;
begin
declare
x1: T1 := f1;
begin
p2(x1); -- this works
end;
declare
x1: T1 renames f1;
begin
p2(x1); -- this works
end;
p2(f1); -- this hangs
end test1;
output:
begin p2
T1 started
T1 done
begin p2
T1 started
T1 done
begin p2
<<hangs>>
--
Summary: Legal tasking program hangs at run time, function
returning task that is then passed to a subprogram
Product: gcc
Version: 4.3.4
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: ada
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: ludovic at ludovic-brenta dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42413