|
|
|
/*
|
|
|
|
* Copyright (c) 2014 - present Facebook, Inc.
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* This source code is licensed under the BSD style license found in the
|
|
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#import "BlockVar.h"
|
|
|
|
|
|
|
|
@implementation BlockVar
|
|
|
|
|
|
|
|
+ (int)test {
|
|
|
|
return 5;
|
|
|
|
}
|
|
|
|
|
|
|
|
+ (int)navigateToURLInBackground {
|
|
|
|
int (^addBlock)(int a, int b) = ^(int a, int b) {
|
|
|
|
int res = [self test];
|
|
|
|
return a + b + res;
|
|
|
|
};
|
|
|
|
int x = addBlock(1, 2);
|
|
|
|
int* p = 0;
|
|
|
|
if (x == 8)
|
|
|
|
return *p;
|
|
|
|
else
|
|
|
|
return x;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (int)blockPostBad {
|
|
|
|
int* x = NULL;
|
|
|
|
int* (^my_block)(void) = ^() {
|
|
|
|
return x;
|
|
|
|
};
|
|
|
|
return *my_block(); // should report null deref here
|
|
|
|
}
|
|
|
|
|
|
|
|
- (int)blockPostOk {
|
|
|
|
int i = 7;
|
|
|
|
int* x = &i;
|
|
|
|
int* (^my_block)(void) = ^() {
|
|
|
|
return x;
|
|
|
|
};
|
|
|
|
return *my_block(); // should not report null deref here
|
|
|
|
}
|
|
|
|
|
|
|
|
- (int)capturedNullDeref {
|
|
|
|
int* x = NULL;
|
|
|
|
int (^my_block)(void) = ^() {
|
|
|
|
return *x;
|
|
|
|
};
|
|
|
|
return my_block(); // should report null deref here
|
|
|
|
}
|
|
|
|
|
|
|
|
- (int)capturedNoNullDeref {
|
|
|
|
int i = 5;
|
|
|
|
int* x = &i;
|
|
|
|
int (^my_block)(void) = ^() {
|
|
|
|
return *x;
|
|
|
|
};
|
|
|
|
x = NULL;
|
|
|
|
return my_block(); // should not report null deref here
|
|
|
|
}
|
|
|
|
|
|
|
|
@end
|