• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
main(int argc,const char * argv[])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 {
foo()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