77 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
// RUN: %clang_cc1 -std=c++11 -verify %s
 | 
						|
 | 
						|
// rdar://12240916 stack overflow.
 | 
						|
namespace rdar12240916 {
 | 
						|
 | 
						|
struct S2 {
 | 
						|
  S2(const S2&);
 | 
						|
  S2();
 | 
						|
};
 | 
						|
 | 
						|
struct S { // expected-note {{not complete}}
 | 
						|
  S x; // expected-error {{incomplete type}}
 | 
						|
  S2 y;
 | 
						|
};
 | 
						|
 | 
						|
S foo() {
 | 
						|
  S s;
 | 
						|
  return s;
 | 
						|
}
 | 
						|
 | 
						|
struct S3; // expected-note {{forward declaration}}
 | 
						|
 | 
						|
struct S4 {
 | 
						|
  S3 x; // expected-error {{incomplete type}}
 | 
						|
  S2 y;
 | 
						|
};
 | 
						|
 | 
						|
struct S3 {
 | 
						|
  S4 x;
 | 
						|
  S2 y;
 | 
						|
};
 | 
						|
 | 
						|
S4 foo2() {
 | 
						|
  S4 s;
 | 
						|
  return s;
 | 
						|
}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
// rdar://12542261 stack overflow.
 | 
						|
namespace rdar12542261 {
 | 
						|
 | 
						|
template <class _Tp>
 | 
						|
struct check_complete
 | 
						|
{
 | 
						|
  static_assert(sizeof(_Tp) > 0, "Type must be complete.");
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
template<class _Rp>
 | 
						|
class function // expected-note 2 {{candidate}}
 | 
						|
{
 | 
						|
public:
 | 
						|
  template<class _Fp>
 | 
						|
  function(_Fp, typename check_complete<_Fp>::type* = 0);  // expected-note {{candidate}}
 | 
						|
};
 | 
						|
 | 
						|
void foobar()
 | 
						|
{
 | 
						|
  auto LeftCanvas = new Canvas(); // expected-error {{unknown type name}}
 | 
						|
  function<void()> m_OnChange = [&, LeftCanvas]() { }; // expected-error {{no viable conversion}}
 | 
						|
}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
namespace b6981007 {
 | 
						|
  struct S {}; // expected-note 3{{candidate}}
 | 
						|
  void f() {
 | 
						|
    S s(1, 2, 3); // expected-error {{no matching}}
 | 
						|
    for (auto x : s) {
 | 
						|
      // We used to attempt to evaluate the initializer of this variable,
 | 
						|
      // and crash because it has an undeduced type.
 | 
						|
      const int &n(x);
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |