// RUN: %clang_analyze_cc1 -fblocks -verify %s 2>&1 \ // RUN: -analyzer-display-progress \ // RUN: -analyzer-checker=debug.ExprInspection \ // RUN: -analyzer-output=text \ // RUN: | FileCheck %s #include "Inputs/system-header-simulator-objc.h" void clang_analyzer_warnIfReached(); // expected-note@+2 {{[debug] analyzing from f}} // expected-warning@+1 {{REACHABLE}} expected-note@+1 {{REACHABLE}} static void f(void) { clang_analyzer_warnIfReached(); } @interface I: NSObject -(void)instanceMethod:(int)arg1 with:(int)arg2; +(void)classMethod; @end @implementation I // expected-warning@+1 {{REACHABLE}} expected-note@+1 {{REACHABLE}} -(void)instanceMethod:(int)arg1 with:(int)arg2 { clang_analyzer_warnIfReached(); } // expected-warning@+1 {{REACHABLE}} expected-note@+1 {{REACHABLE}} +(void)classMethod { clang_analyzer_warnIfReached(); } @end // expected-note@+1 3 {{[debug] analyzing from g}} void g(I *i, int x, int y) { [I classMethod]; // expected-note {{Calling 'classMethod'}} [i instanceMethod: x with: y]; // expected-note {{Calling 'instanceMethod:with:'}} void (^block)(void); // expected-warning@+1 {{REACHABLE}} expected-note@+1 {{REACHABLE}} block = ^{ clang_analyzer_warnIfReached(); }; block(); // expected-note {{Calling anonymous block}} } // CHECK: analyzer-display-progress.m f // CHECK: analyzer-display-progress.m -[I instanceMethod:with:] // CHECK: analyzer-display-progress.m +[I classMethod] // CHECK: analyzer-display-progress.m g // CHECK: analyzer-display-progress.m block (line: 35, col: 11)