1// { dg-do run } 2 3extern "C" void abort (void); 4 5template <typename S, typename T> 6void 7foo (void) 8{ 9 extern S l, m; 10 extern T i, j; 11 12 #pragma omp atomic read 13 i = l; 14 #pragma omp atomic read 15 m = j; 16 if (i != 77 || m != 88) 17 abort (); 18 #pragma omp atomic write 19 l = 1 + i + 6 * 1; 20 #pragma omp atomic write 21 j = 170 - 170 + m + 1 * 7; 22 #pragma omp atomic capture 23 i = l += 4; 24 #pragma omp atomic capture 25 m = j += 4; 26 if (i != 88 || m != 99) 27 abort (); 28 #pragma omp atomic capture 29 { 30 i = l; 31 l += 4; 32 } 33 #pragma omp atomic capture 34 { 35 m = j; 36 j += 4; 37 } 38 if (i != 88 || m != 99) 39 abort (); 40 #pragma omp atomic capture 41 { 42 l += 4; 43 i = l; 44 } 45 #pragma omp atomic capture 46 { 47 j += 4; 48 m = j; 49 } 50 if (i != 96 || m != 107) 51 abort (); 52} 53 54long long l, m; 55int i, j; 56 57int 58main () 59{ 60 l = 77; 61 j = 88; 62 foo <long long, int> (); 63} 64