74 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify %s -fblocks -std=c++1y2 3extern "C" int exit(int);4 5typedef struct {6 unsigned long ps[30];7 int qs[30];8} BobTheStruct;9 10int 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 argument22 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 37namespace 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 47namespace 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 60namespace 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