1// RUN: %clang_cc1 -std=c++11 -verify %s
2
3// rdar://12240916 stack overflow.
4namespace rdar12240916 {
5
6struct S2 {
7  S2(const S2&);
8  S2();
9};
10
11struct S { // expected-note {{not complete}}
12  S x; // expected-error {{incomplete type}}
13  S2 y;
14};
15
16S foo() {
17  S s;
18  return s;
19}
20
21struct S3; // expected-note {{forward declaration}}
22
23struct S4 {
24  S3 x; // expected-error {{incomplete type}}
25  S2 y;
26};
27
28struct S3 {
29  S4 x;
30  S2 y;
31};
32
33S4 foo2() {
34  S4 s;
35  return s;
36}
37
38}
39
40// rdar://12542261 stack overflow.
41namespace rdar12542261 {
42
43template <class _Tp>
44struct check_complete
45{
46  static_assert(sizeof(_Tp) > 0, "Type must be complete.");
47};
48
49
50template<class _Rp>
51class function // expected-note 2 {{candidate}}
52{
53public:
54  template<class _Fp>
55  function(_Fp, typename check_complete<_Fp>::type* = 0);  // expected-note {{candidate}}
56};
57
58void foobar()
59{
60  auto LeftCanvas = new Canvas(); // expected-error {{unknown type name}}
61  function<void()> m_OnChange = [&, LeftCanvas]() { }; // expected-error {{no viable conversion}}
62}
63
64}
65
66namespace b6981007 {
67  struct S {}; // expected-note 3{{candidate}}
68  void f() {
69    S s(1, 2, 3); // expected-error {{no matching}}
70    for (auto x : s) {
71      // We used to attempt to evaluate the initializer of this variable,
72      // and crash because it has an undeduced type.
73      const int &n(x);
74    }
75  }
76}
77