| |
| // We use 'auto' without a function return type, so specify dialect here |
| // { dg-additional-options "-std=c++14" } |
| |
| extern "C" void abort (); |
| |
| struct T |
| { |
| int x, y; |
| |
| auto sum_func (int n) |
| { |
| auto fn = [=](int m) -> int |
| { |
| int v; |
| v = (x + y) * n + m; |
| return v; |
| }; |
| return fn; |
| } |
| |
| auto sum_func_offload (int n) |
| { |
| auto fn = [=](int m) -> int |
| { |
| int v; |
| #pragma omp target map(from:v) |
| v = (x + y) * n + m; |
| return v; |
| }; |
| return fn; |
| } |
| |
| }; |
| |
| int main (void) |
| { |
| T a = { 1, 2 }; |
| |
| auto s1 = a.sum_func (3); |
| auto s2 = a.sum_func_offload (3); |
| |
| if (s1 (1) != s2 (1)) |
| abort (); |
| |
| return 0; |
| } |