1 // RUN: %clang_cc1 -fsyntax-only -verify %s -fblocks 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