brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · 64bf193 Raw
96 lines · plain
1// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fsyntax-only -fobjc-arc -fblocks -verify -Wno-objc-root-class %s2 3typedef struct dispatch_queue_s *dispatch_queue_t;4 5typedef void (^dispatch_block_t)(void);6 7void dispatch_async(dispatch_queue_t queue, dispatch_block_t block);8 9extern __attribute__((visibility("default"))) struct dispatch_queue_s _dispatch_main_q;10 11@interface SwitchBlockCrashAppDelegate12- (void)pageLeft;13- (void)pageRight;;14@end15 16@implementation SwitchBlockCrashAppDelegate17 18- (void)choose:(int)button {19    switch (button) {20    case 0:21        dispatch_async((&_dispatch_main_q), ^{ [self pageLeft]; }); // expected-note 3 {{jump enters lifetime of block which strongly captures a variable}}22        break;23    case 2:  // expected-error {{cannot jump}}24        dispatch_async((&_dispatch_main_q), ^{ [self pageRight]; }); // expected-note 2 {{jump enters lifetime of block which strongly captures a variable}}25        break;26    case 3: // expected-error {{cannot jump}}27        {28          dispatch_async((&_dispatch_main_q), ^{ [self pageRight]; });29          break;30        }31    case 4: // expected-error {{cannot jump}}32        break;33    }34 35    __block SwitchBlockCrashAppDelegate *captured_block_obj;36    switch (button) {37    case 10:38      {39        dispatch_async((&_dispatch_main_q), ^{ [self pageLeft]; });40        break;41      }42    case 12:43        if (button)44          dispatch_async((&_dispatch_main_q), ^{ [captured_block_obj pageRight]; });45        break;46    case 13:47        while (button)48          dispatch_async((&_dispatch_main_q), ^{ [self pageRight]; });49        break;50    case 14:51        break;52    }53 54    switch (button) {55    case 10:56      {57        dispatch_async((&_dispatch_main_q), ^{ [self pageLeft]; });58        break;59      }60    case 12:61        if (button)62          dispatch_async((&_dispatch_main_q), ^{ [self pageRight]; });63        switch (button) {64          case 0:65            {66              dispatch_async((&_dispatch_main_q), ^{ [self pageLeft]; });67              break;68            }69         case 4: 70          break;71        }72        break;73    case 13:74        while (button)75          dispatch_async((&_dispatch_main_q), ^{ [self pageRight]; });76        break;77    case 14:78        break;79    }80}81- (void)pageLeft {}82- (void)pageRight {}83@end84 85int test2(id obj, int state) { // expected-note {{jump enters lifetime of block}} FIXME: weird location86  switch (state) {87  case 0:88    (void) ^{ (void) obj; };89    return 0;90 91  default: // expected-error {{cannot jump}}92    return 1;93  }94}95 96