1-- { dg-do compile }
2-- { dg-options "-fdump-tree-gimple" }
3
4with VFA1_Pkg; use VFA1_Pkg;
5
6procedure VFA1_1 is
7  Temp : Integer;
8
9  function F (I : Integer) return Integer is
10  begin
11    return I;
12  end;
13
14  function F2 return Integer is
15  begin
16    return Integer(Counter1);
17  end;
18
19  procedure P3 (I : Out Integer) is
20  begin
21    null;
22  end;
23
24begin
25
26  Counter1 := Int(Counter2);
27  Counter2 := Integer(Counter1);
28
29  Temp := Integer(Counter1);
30  Counter1 := Int(Temp);
31
32  Temp := Counter2;
33  Counter2 := Temp;
34
35  Temp := Integer (Counter1) + Counter2;
36
37  if Counter1 /= Int (Counter2) then
38    raise Program_Error;
39  end if;
40
41  Temp := F(Integer (Counter1));
42  Counter1 := Int(F(Temp));
43
44  Temp := F(Counter2);
45  Counter2 := F(Temp);
46
47  Temp := F2;
48  P3 (Counter2);
49
50end;
51
52-- { dg-final { scan-tree-dump-times "atomic_load\[^\n\r\]*&vfa1_pkg__counter1" 6 "gimple"} }
53-- { dg-final { scan-tree-dump-times "atomic_load\[^\n\r\]*&vfa1_pkg__counter2" 5 "gimple"} }
54-- { dg-final { scan-tree-dump-times "atomic_load\[^\n\r\]*&temp" 0 "gimple"} }
55
56-- { dg-final { scan-tree-dump-times "atomic_store\[^\n\r\]*&vfa1_pkg__counter1" 3 "gimple"} }
57-- { dg-final { scan-tree-dump-times "atomic_store\[^\n\r\]*&vfa1_pkg__counter2" 4 "gimple"} }
58-- { dg-final { scan-tree-dump-times "atomic_store\[^\n\r\]*&temp" 0 "gimple"} }
59
60