title: ios dispatch_once crash with signal SIGABRT
body: <p>I get crash with GCD once point at </p>
  
  <pre><code>+ (instancetype)sharedInstance {
      static TabBarViewController *_sharedInstance = nil;
      static dispatch_once_t onceToken;
      dispatch_once(&amp;onceToken, ^{
          _sharedInstance = [[TabBarViewController alloc] init];
      });
  
      return _sharedInstance;
  }
  
  _dispatch_once(dispatch_once_t *predicate,
          DISPATCH_NOESCAPE dispatch_block_t block){
      if (DISPATCH_EXPECT(*predicate, ~0l) != ~0l) {
          dispatch_once(predicate, block); &lt;-Crash:Thread 1: signal SIGABRT
      } else {
          dispatch_compiler_barrier();
      }
      DISPATCH_COMPILER_CAN_ASSUME(*predicate == ~0l);
  }
  </code></pre>
  
  <p>strangely is that some code sometimes crash and after a few time it works well. 
  I have no idea why......</p>