xref: /llvm-project/clang/test/SemaCXX/decomposition-openmp.cpp (revision de1ea787ed70ff376a1ff3b4262d0e25e4d135f2)
1 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++20 -fopenmp %s
2 
3 // Okay, not an OpenMP capture.
f()4 auto f() {
5   int i[2] = {};
6   auto [a, b] = i;
7   return [=, &a] {
8     return a + b;
9   };
10 }
11 
12 // Okay, not an OpenMP capture.
13 void foo(int);
g()14 void g() {
15   #pragma omp parallel
16   {
17     int i[2] = {};
18     auto [a, b] = i;
19     auto L = [&] { foo(a+b); };
20   }
21 }
22 
23 // FIXME: OpenMP should support capturing structured bindings
h()24 void h() {
25   int i[2] = {};
26   auto [a, b] = i; // expected-note 2{{declared here}}
27   #pragma omp parallel
28   {
29     // expected-error@+1 2{{capturing a structured binding is not yet supported in OpenMP}}
30     foo(a + b);
31   }
32 }
33