72 lines · plain
1// RUN: %clang_analyze_cc1 -w -triple i386-apple-darwin10 -fblocks -verify %s \2// RUN: -analyzer-checker=core.builtin \3// RUN: -analyzer-checker=debug.ExprInspection \4// RUN: -analyzer-config display-checker-name=false5 6#include "Inputs/system-header-simulator-objc.h"7 8void clang_analyzer_explain(void *);9 10@interface Object : NSObject {11@public12 Object *x;13}14@end15 16void test_1(Object *p) {17 clang_analyzer_explain(p); // expected-warning-re{{{{^argument 'p'$}}}}18 clang_analyzer_explain(p->x); // expected-warning-re{{{{^initial value of instance variable 'x' of object at argument 'p'$}}}}19 Object *q = [[Object alloc] init];20 clang_analyzer_explain(q); // expected-warning-re{{{{^symbol of type 'Object \*' conjured at CFG element '\[\[Object alloc\] init\]'$}}}}21 clang_analyzer_explain(q->x); // expected-warning-re{{{{^initial value of instance variable 'x' of object at symbol of type 'Object \*' conjured at CFG element '\[\[Object alloc\] init\]'$}}}}22}23 24void test_2(void) {25 __block int x;26 ^{27 clang_analyzer_explain(&x); // expected-warning-re{{{{^pointer to block variable 'x'$}}}}28 };29 clang_analyzer_explain(&x); // expected-warning-re{{{{^pointer to block variable 'x'$}}}}30}31 32@interface O33+ (instancetype)top_level_class_method:(int)param;34+ (instancetype)non_top_level_class_method:(int)param;35- top_level_instance_method:(int)param;36- non_top_level_instance_method:(int)param;37@end38 39@implementation O40+ (instancetype)top_level_class_method:(int)param {41 clang_analyzer_explain(¶m); // expected-warning-re{{{{^pointer to parameter 'param'$}}}}42}43 44+ (instancetype)non_top_level_class_method:(int)param {45 clang_analyzer_explain(¶m); // expected-warning-re{{{{^pointer to parameter 'param'$}}}}46}47 48- top_level_instance_method:(int)param {49 clang_analyzer_explain(¶m); // expected-warning-re{{{{^pointer to parameter 'param'$}}}}50}51 52- non_top_level_instance_method:(int)param {53 clang_analyzer_explain(¶m); // expected-warning-re{{{{^pointer to parameter 'param'$}}}}54}55@end56 57void test_3(int n, int m) {58 O *o = [O non_top_level_class_method:n];59 [o non_top_level_instance_method:m];60 61 void (^block_top_level)(int) = ^(int param) {62 clang_analyzer_explain(¶m); // expected-warning-re{{{{^pointer to parameter 'param'$}}}}63 clang_analyzer_explain(&n); // expected-warning-re{{{{^pointer to parameter 'n'$}}}}64 };65 void (^block_non_top_level)(int) = ^(int param) {66 clang_analyzer_explain(¶m); // expected-warning-re{{{{^pointer to parameter 'param'$}}}}67 clang_analyzer_explain(&n); // expected-warning-re{{{{^pointer to parameter 'n'$}}}}68 };69 70 block_non_top_level(n);71}72