-- { dg-do compile } -- { dg-options "-fdump-tree-gimple" } with VFA1_Pkg; use VFA1_Pkg; procedure VFA1_3 is Temp : Short_Integer; function F (I : Short_Integer) return Short_Integer is begin return I; end; function F2 return Short_Integer is begin return Short_Integer(Buffer1.A); end; procedure P3 (I : out Short_Integer) is begin null; end; begin Temp := Buffer1.A; Buffer1.B := Temp; Temp := Buffer2.A; Buffer2.B := Temp; Temp := Buffer1.A + Buffer2.B; if Buffer1.A /= Buffer2.B then raise Program_Error; end if; Temp := F(Buffer1.A); Buffer2.B := F(Temp); Temp := F(Buffer2.B); Buffer1.A := F(Temp); Temp := F2; P3 (Buffer2.B); end; -- { dg-final { scan-tree-dump-times "atomic_load\[^\n\r\]*&vfa1_pkg__buffer1" 7 "gimple"} } -- { dg-final { scan-tree-dump-times "atomic_load\[^\n\r\]*&vfa1_pkg__buffer2" 7 "gimple"} } -- { dg-final { scan-tree-dump-times "atomic_load\[^\n\r\]*&temp" 0 "gimple"} } -- { dg-final { scan-tree-dump-times "atomic_store\[^\n\r\]*&vfa1_pkg__buffer1" 2 "gimple"} } -- { dg-final { scan-tree-dump-times "atomic_store\[^\n\r\]*&vfa1_pkg__buffer2" 3 "gimple"} } -- { dg-final { scan-tree-dump-times "atomic_store\[^\n\r\]*&temp" 0 "gimple"} }