1--  { dg-do run }
2
3with Text_IO; use Text_IO;
4with TLS1_Pkg; use TLS1_Pkg;
5
6procedure TLS1 is
7  Result : Integer;
8
9  task type T is
10     entry Change (Inc : Integer);
11     entry Sum (Result : out Integer);
12  end T;
13
14  task body T is
15  begin
16      accept Change (Inc : Integer) do
17         for I in My_Array.data'range loop
18           My_Array.Data (I).Point := Inc;
19         end loop;
20      end;
21
22      accept Sum (Result : out Integer) do
23         Result := 0;
24         for I in My_Array.data'range loop
25           Result := Result + My_Array.Data (I).Point;
26         end loop;
27      end;
28   end T;
29
30   Gang : array (1..10) of T;
31
32begin
33   for J in Gang'range loop
34      Gang (J).Change (J);
35   end loop;
36
37   -- Verify the contents of each local thread storage.
38
39   for J in Gang'range loop
40      Gang (J).Sum (Result);
41      pragma Assert (Result = J * 500);
42   end loop;
43
44 --  Verify that original data is unaffected.
45
46   for J in My_Array.Data'range loop
47      Result := Result + My_Array.Data (J).Point;
48   end loop;
49
50   pragma Assert (Result = 500);
51end TLS1;
52