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