This reverts commit bdc6974f92304f4ed542241b9b89ba58ba6b20aa because it breaks all the LLDB tests that import the std module. import-std-module/array.TestArrayFromStdModule.py import-std-module/deque-basic.TestDequeFromStdModule.py import-std-module/deque-dbg-info-content.TestDbgInfoContentDequeFromStdModule.py import-std-module/forward_list.TestForwardListFromStdModule.py import-std-module/forward_list-dbg-info-content.TestDbgInfoContentForwardListFromStdModule.py import-std-module/list.TestListFromStdModule.py import-std-module/list-dbg-info-content.TestDbgInfoContentListFromStdModule.py import-std-module/queue.TestQueueFromStdModule.py import-std-module/stack.TestStackFromStdModule.py import-std-module/vector.TestVectorFromStdModule.py import-std-module/vector-bool.TestVectorBoolFromStdModule.py import-std-module/vector-dbg-info-content.TestDbgInfoContentVectorFromStdModule.py import-std-module/vector-of-vectors.TestVectorOfVectorsFromStdModule.py https://green.lab.llvm.org/green/view/LLDB/job/lldb-cmake/45301/
112 lines
2.6 KiB
C++
112 lines
2.6 KiB
C++
// 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}}
|
|
public:
|
|
void foo() const;
|
|
};
|
|
|
|
class NonConstCopy {
|
|
public:
|
|
NonConstCopy(NonConstCopy&); // expected-note{{would lose const}}
|
|
};
|
|
|
|
void capture_by_copy(NonCopyable nc, NonCopyable &ncr, const NonConstCopy nco) {
|
|
(void)[nc] { }; // expected-error{{capture of variable 'nc' as type 'NonCopyable' calls private copy constructor}}
|
|
(void)[=] { // expected-error{{capture of variable 'ncr' as type 'NonCopyable' calls private copy constructor}}
|
|
ncr.foo();
|
|
}();
|
|
|
|
[nco] {}(); // expected-error{{no matching constructor for initialization of 'const NonConstCopy'}}
|
|
}
|
|
|
|
struct NonTrivial {
|
|
NonTrivial();
|
|
NonTrivial(const NonTrivial &);
|
|
~NonTrivial();
|
|
};
|
|
|
|
struct CopyCtorDefault {
|
|
CopyCtorDefault();
|
|
CopyCtorDefault(const CopyCtorDefault&, NonTrivial nt = NonTrivial());
|
|
|
|
void foo() const;
|
|
};
|
|
|
|
void capture_with_default_args(CopyCtorDefault cct) {
|
|
(void)[=] () -> void { cct.foo(); };
|
|
}
|
|
|
|
struct ExpectedArrayLayout {
|
|
CopyCtorDefault array[3];
|
|
};
|
|
|
|
void capture_array() {
|
|
CopyCtorDefault array[3];
|
|
auto x = [=]() -> void {
|
|
capture(array[0]);
|
|
};
|
|
static_assert(sizeof(x) == sizeof(ExpectedArrayLayout), "layout mismatch");
|
|
}
|
|
|
|
// Check for the expected non-static data members.
|
|
|
|
struct ExpectedLayout {
|
|
char a;
|
|
short b;
|
|
};
|
|
|
|
void test_layout(char a, short b) {
|
|
auto x = [=] () -> void {
|
|
capture(a);
|
|
capture(b);
|
|
};
|
|
static_assert(sizeof(x) == sizeof(ExpectedLayout), "Layout mismatch!");
|
|
}
|
|
|
|
struct ExpectedThisLayout {
|
|
ExpectedThisLayout* a;
|
|
void f() {
|
|
auto x = [this]() -> void {};
|
|
static_assert(sizeof(x) == sizeof(ExpectedThisLayout), "Layout mismatch!");
|
|
}
|
|
};
|
|
|
|
struct CaptureArrayAndThis {
|
|
int value;
|
|
|
|
void f() {
|
|
int array[3];
|
|
[=]() -> int {
|
|
int result = value;
|
|
for (unsigned i = 0; i < 3; ++i)
|
|
result += array[i];
|
|
return result;
|
|
}();
|
|
}
|
|
};
|
|
|
|
namespace rdar14468891 {
|
|
class X {
|
|
public:
|
|
virtual ~X() = 0; // expected-note{{unimplemented pure virtual method '~X' in 'X'}}
|
|
};
|
|
|
|
class Y : public X { };
|
|
|
|
void capture(X &x) {
|
|
[x]() {}(); // expected-error{{by-copy capture of value of abstract type 'rdar14468891::X'}}
|
|
}
|
|
}
|
|
|
|
namespace rdar15560464 {
|
|
struct X; // expected-note{{forward declaration of 'rdar15560464::X'}}
|
|
void foo(const X& param) {
|
|
auto x = ([=]() {
|
|
auto& y = param; // expected-error{{by-copy capture of variable 'param' with incomplete type 'const rdar15560464::X'}}
|
|
});
|
|
}
|
|
}
|