Implement capture-by-copy for arrays in lambdas.
llvm-svn: 150138
diff --git a/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp b/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp
index 10d1e92..2dcaa5d 100644
--- a/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp
+++ b/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp
@@ -1,5 +1,7 @@
// RUN: %clang_cc1 -fsyntax-only -std=c++11 %s -verify
+template<typename T> void capture(const T&);
+
class NonCopyable {
NonCopyable(const NonCopyable&); // expected-note 2 {{implicitly declared private here}}
};
@@ -19,6 +21,7 @@
};
struct CopyCtorDefault {
+ CopyCtorDefault();
CopyCtorDefault(const CopyCtorDefault&, NonTrivial nt = NonTrivial());
void foo() const;
@@ -28,7 +31,17 @@
(void)[=] () -> void { cct.foo(); }; // expected-error{{lambda expressions are not supported yet}}
}
-// FIXME: arrays!
+struct ExpectedArrayLayout {
+ CopyCtorDefault array[3];
+};
+
+void capture_array() {
+ CopyCtorDefault array[3];
+ auto x = [=]() -> void { // expected-error{{lambda expressions are not supported yet}}
+ capture(array[0]);
+ };
+ static_assert(sizeof(x) == sizeof(ExpectedArrayLayout), "layout mismatch");
+}
// Check for the expected non-static data members.
@@ -37,8 +50,6 @@
short b;
};
-template<typename T> void capture(const T&);
-
void test_layout(char a, short b) {
auto x = [=] () -> void { // expected-error{{lambda expressions are not supported yet}}
capture(a);