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);