// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fsyntax-only -fobjc-arc -fblocks -verify -Wno-objc-root-class %s
// rdar://9535237

typedef struct dispatch_queue_s *dispatch_queue_t;

typedef void (^dispatch_block_t)(void);

void dispatch_async(dispatch_queue_t queue, dispatch_block_t block);

extern __attribute__((visibility("default"))) struct dispatch_queue_s _dispatch_main_q;

@interface SwitchBlockCrashAppDelegate
- (void)pageLeft;
- (void)pageRight;;
@end

@implementation SwitchBlockCrashAppDelegate

- (void)choose:(int)button {
    switch (button) {
    case 0:
        dispatch_async((&_dispatch_main_q), ^{ [self pageLeft]; }); // expected-note 3 {{jump enters lifetime of block which strongly captures a variable}}
        break;
    case 2:  // expected-error {{cannot jump}}
        dispatch_async((&_dispatch_main_q), ^{ [self pageRight]; }); // expected-note 2 {{jump enters lifetime of block which strongly captures a variable}}
        break;
    case 3: // expected-error {{cannot jump}}
        {
          dispatch_async((&_dispatch_main_q), ^{ [self pageRight]; });
          break;
        }
    case 4: // expected-error {{cannot jump}}
        break;
    }

    __block SwitchBlockCrashAppDelegate *captured_block_obj;
    switch (button) {
    case 10:
      {
        dispatch_async((&_dispatch_main_q), ^{ [self pageLeft]; });
        break;
      }
    case 12:
        if (button)
          dispatch_async((&_dispatch_main_q), ^{ [captured_block_obj pageRight]; });
        break;
    case 13:
        while (button)
          dispatch_async((&_dispatch_main_q), ^{ [self pageRight]; });
        break;
    case 14:
        break;
    }

    switch (button) {
    case 10:
      {
        dispatch_async((&_dispatch_main_q), ^{ [self pageLeft]; });
        break;
      }
    case 12:
        if (button)
          dispatch_async((&_dispatch_main_q), ^{ [self pageRight]; });
        switch (button) {
          case 0:
            {
              dispatch_async((&_dispatch_main_q), ^{ [self pageLeft]; });
              break;
            }
         case 4: 
          break;
        }
        break;
    case 13:
        while (button)
          dispatch_async((&_dispatch_main_q), ^{ [self pageRight]; });
        break;
    case 14:
        break;
    }
}
- (void)pageLeft {}
- (void)pageRight {}
@end

// Test 2.  rdar://problem/11150919
int test2(id obj, int state) { // expected-note {{jump enters lifetime of block}} FIXME: weird location
  switch (state) {
  case 0:
    (void) ^{ (void) obj; };
    return 0;

  default: // expected-error {{cannot jump}}
    return 1;
  }
}

