text: // RUN: %clang_cc1 -fsyntax-only %s -verify -fblocks
  
  void I( void (^)(void));
  void (^noop)(void);
  
  void nothing(void);
  int printf(const char*, ...);
  
  typedef void (^T) (void);
  
  void takeblock(T);
  int takeintint(int (^C)(int)) { return C(4); }
  
  T somefunction(void) {
    if (^{ })
      nothing();
  
    noop = ^{};
  
    noop = ^{printf("\nClosure\n"); };
  
    I(^{ });
  
    return ^{printf("\nClosure\n"); };
  }
  void test2(void) {
    int x = 4;
  
    takeblock(^{ printf("%d\n", x); });
  
    while (1) {
      takeblock(^{
          break;  // expected-error {{'break' statement not in loop or switch statement}}
          continue; // expected-error {{'continue' statement not in loop statement}}
          while(1) break;  // ok
          goto foo; // expected-error {{use of undeclared label 'foo'}}
          a: goto a;       // ok
        });
      break;
    }
  
    foo:
    takeblock(^{ x = 4; });  // expected-error {{variable is not assignable (missing __block type specifier)}}
    __block y = 7;    // expected-error {{type specifier missing, defaults to 'int'}}
    takeblock(^{ y = 8; });
  }
  
  
  void (^test3(void))(void) {
    return ^{};
  }
  
  void test4(void) {
    void (^noop)(void) = ^{};
    void (*noop2)(void) = 0;
  }
  
  void myfunc(int (^block)(int)) {}
  
  void myfunc3(const int *x);
  
  void test5(void) {
    int a;
  
    myfunc(^(int abcd) {
        myfunc3(&a);
        return 1;
      });
  }
  
  void *X;
  
  void test_arguments(void) {
    int y;
    int (^c)(char);
    (1 ? c : 0)('x');
    (1 ? 0 : c)('x');
  
    (1 ? c : c)('x');
  }
  
  static int global_x = 10;
  void (^global_block)(void) = ^{ printf("global x is %d\n", global_x); };
  
  typedef void (^void_block_t)(void);
  
  static const void_block_t myBlock = ^{ };
  
  static const void_block_t myBlock2 = ^ void(void) { };
  