1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s -fblocks -std=c++1y 2*67e74705SXin Li 3*67e74705SXin Li extern "C" int exit(int); 4*67e74705SXin Li 5*67e74705SXin Li typedef struct { 6*67e74705SXin Li unsigned long ps[30]; 7*67e74705SXin Li int qs[30]; 8*67e74705SXin Li } BobTheStruct; 9*67e74705SXin Li main(int argc,const char * argv[])10*67e74705SXin Liint main (int argc, const char * argv[]) { 11*67e74705SXin Li BobTheStruct inny; 12*67e74705SXin Li BobTheStruct outty; 13*67e74705SXin Li BobTheStruct (^copyStruct)(BobTheStruct); 14*67e74705SXin Li int i; 15*67e74705SXin Li 16*67e74705SXin Li for(i=0; i<30; i++) { 17*67e74705SXin Li inny.ps[i] = i * i * i; 18*67e74705SXin Li inny.qs[i] = -i * i * i; 19*67e74705SXin Li } 20*67e74705SXin Li 21*67e74705SXin Li copyStruct = ^(BobTheStruct aBigStruct){ return aBigStruct; }; // pass-by-value intrinsically copies the argument 22*67e74705SXin Li 23*67e74705SXin Li outty = copyStruct(inny); 24*67e74705SXin Li 25*67e74705SXin Li if ( &inny == &outty ) { 26*67e74705SXin Li exit(1); 27*67e74705SXin Li } 28*67e74705SXin Li for(i=0; i<30; i++) { 29*67e74705SXin Li if ( (inny.ps[i] != outty.ps[i]) || (inny.qs[i] != outty.qs[i]) ) { 30*67e74705SXin Li exit(1); 31*67e74705SXin Li } 32*67e74705SXin Li } 33*67e74705SXin Li 34*67e74705SXin Li return 0; 35*67e74705SXin Li } 36*67e74705SXin Li 37*67e74705SXin Li namespace rdar8134521 { foo()38*67e74705SXin Li void foo() { 39*67e74705SXin Li int (^P)(int) = reinterpret_cast<int(^)(int)>(1); 40*67e74705SXin Li P = (int(^)(int))(1); 41*67e74705SXin Li 42*67e74705SXin Li P = reinterpret_cast<int(^)(int)>((void*)1); 43*67e74705SXin Li P = (int(^)(int))((void*)1); 44*67e74705SXin Li } 45*67e74705SXin Li } 46*67e74705SXin Li 47*67e74705SXin Li namespace rdar11055105 { 48*67e74705SXin Li struct A { 49*67e74705SXin Li void foo(); 50*67e74705SXin Li }; 51*67e74705SXin Li 52*67e74705SXin Li template <class T> void foo(T &x) noexcept(noexcept(x.foo())); 53*67e74705SXin Li 54*67e74705SXin Li void (^block)() = ^{ 55*67e74705SXin Li A a; 56*67e74705SXin Li foo(a); 57*67e74705SXin Li }; 58*67e74705SXin Li } 59*67e74705SXin Li 60*67e74705SXin Li namespace LocalDecls { f()61*67e74705SXin Li void f() { 62*67e74705SXin Li (void) ^{ 63*67e74705SXin Li extern int a; // expected-note {{previous}} 64*67e74705SXin Li extern int b(); // expected-note {{previous}} 65*67e74705SXin Li }; 66*67e74705SXin Li } g()67*67e74705SXin Li void g() { 68*67e74705SXin Li (void) ^{ 69*67e74705SXin Li extern float a; // expected-error {{different type}} 70*67e74705SXin Li extern float b(); // expected-error {{cannot be overloaded}} 71*67e74705SXin Li }; 72*67e74705SXin Li } 73*67e74705SXin Li } 74