| // We use 'auto' without a function return type, so specify dialect here |
| // { dg-additional-options "-std=c++14 -fdump-tree-gimple" } |
| #include <cstdlib> |
| |
| #define N 10 |
| int main (void) |
| { |
| int X, Y; |
| #pragma omp target map(from: X, Y) |
| { |
| int x = 0, y = 0; |
| |
| for (int i = 0; i < N; i++) |
| [&] (int v) { x += v; } (i); |
| |
| auto yinc = [&y] { y++; }; |
| for (int i = 0; i < N; i++) |
| yinc (); |
| |
| X = x; |
| Y = y; |
| } |
| |
| int Xs = 0; |
| for (int i = 0; i < N; i++) |
| Xs += i; |
| if (X != Xs) |
| abort (); |
| |
| if (Y != N) |
| abort (); |
| } |
| |
| /* Make sure lambda objects do NOT appear in target maps. */ |
| /* { dg-final { scan-tree-dump {(?n)#pragma omp target num_teams.* map\(from:Y \[len: [0-9]+\]\) map\(from:X \[len: [0-9]+\]\)$} "gimple" } } */ |