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