brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · e11fd92 Raw
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