1*67e74705SXin Li// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -verify -Wno-objc-literal-conversion %s 2*67e74705SXin Li 3*67e74705SXin Livoid clang_analyzer_eval(bool); 4*67e74705SXin Li@class NSString; 5*67e74705SXin Li 6*67e74705SXin Livoid sanity() { 7*67e74705SXin Li clang_analyzer_eval(@""); // expected-warning{{TRUE}} 8*67e74705SXin Li clang_analyzer_eval(@"abc"); // expected-warning{{TRUE}} 9*67e74705SXin Li} 10*67e74705SXin Li 11*67e74705SXin Linamespace rdar13773117 { 12*67e74705SXin Li NSString *const kConstantGlobalString = @"foo"; 13*67e74705SXin Li NSString *globalString = @"bar"; 14*67e74705SXin Li 15*67e74705SXin Li extern void invalidateGlobals(); 16*67e74705SXin Li 17*67e74705SXin Li void testGlobals() { 18*67e74705SXin Li clang_analyzer_eval(kConstantGlobalString); // expected-warning{{TRUE}} 19*67e74705SXin Li clang_analyzer_eval(globalString); // expected-warning{{UNKNOWN}} 20*67e74705SXin Li 21*67e74705SXin Li globalString = @"baz"; 22*67e74705SXin Li clang_analyzer_eval(globalString); // expected-warning{{TRUE}} 23*67e74705SXin Li 24*67e74705SXin Li invalidateGlobals(); 25*67e74705SXin Li 26*67e74705SXin Li clang_analyzer_eval(kConstantGlobalString); // expected-warning{{TRUE}} 27*67e74705SXin Li clang_analyzer_eval(globalString); // expected-warning{{UNKNOWN}} 28*67e74705SXin Li } 29*67e74705SXin Li 30*67e74705SXin Li NSString *returnString(NSString *input = @"garply") { 31*67e74705SXin Li return input; 32*67e74705SXin Li } 33*67e74705SXin Li 34*67e74705SXin Li void testDefaultArg() { 35*67e74705SXin Li clang_analyzer_eval(returnString(@"")); // expected-warning{{TRUE}} 36*67e74705SXin Li clang_analyzer_eval(returnString(0)); // expected-warning{{FALSE}} 37*67e74705SXin Li clang_analyzer_eval(returnString()); // expected-warning{{TRUE}} 38*67e74705SXin Li } 39*67e74705SXin Li} 40