1*184c6242SDominic Chen// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection -verify -Wno-objc-literal-conversion %s 289bbd1fbSJordan Rose 389bbd1fbSJordan Rosevoid clang_analyzer_eval(bool); 489bbd1fbSJordan Rose@class NSString; 589bbd1fbSJordan Rose 689bbd1fbSJordan Rosevoid sanity() { 789bbd1fbSJordan Rose clang_analyzer_eval(@""); // expected-warning{{TRUE}} 889bbd1fbSJordan Rose clang_analyzer_eval(@"abc"); // expected-warning{{TRUE}} 989bbd1fbSJordan Rose} 1089bbd1fbSJordan Rose 1189bbd1fbSJordan Rosenamespace rdar13773117 { 1289bbd1fbSJordan Rose NSString *const kConstantGlobalString = @"foo"; 1389bbd1fbSJordan Rose NSString *globalString = @"bar"; 1489bbd1fbSJordan Rose 1589bbd1fbSJordan Rose extern void invalidateGlobals(); 1689bbd1fbSJordan Rose 1789bbd1fbSJordan Rose void testGlobals() { 1889bbd1fbSJordan Rose clang_analyzer_eval(kConstantGlobalString); // expected-warning{{TRUE}} 1989bbd1fbSJordan Rose clang_analyzer_eval(globalString); // expected-warning{{UNKNOWN}} 2089bbd1fbSJordan Rose 2189bbd1fbSJordan Rose globalString = @"baz"; 2289bbd1fbSJordan Rose clang_analyzer_eval(globalString); // expected-warning{{TRUE}} 2389bbd1fbSJordan Rose 2489bbd1fbSJordan Rose invalidateGlobals(); 2589bbd1fbSJordan Rose 2689bbd1fbSJordan Rose clang_analyzer_eval(kConstantGlobalString); // expected-warning{{TRUE}} 2789bbd1fbSJordan Rose clang_analyzer_eval(globalString); // expected-warning{{UNKNOWN}} 2889bbd1fbSJordan Rose } 2989bbd1fbSJordan Rose 3089bbd1fbSJordan Rose NSString *returnString(NSString *input = @"garply") { 3189bbd1fbSJordan Rose return input; 3289bbd1fbSJordan Rose } 3389bbd1fbSJordan Rose 3489bbd1fbSJordan Rose void testDefaultArg() { 3589bbd1fbSJordan Rose clang_analyzer_eval(returnString(@"")); // expected-warning{{TRUE}} 3689bbd1fbSJordan Rose clang_analyzer_eval(returnString(0)); // expected-warning{{FALSE}} 3789bbd1fbSJordan Rose clang_analyzer_eval(returnString()); // expected-warning{{TRUE}} 3889bbd1fbSJordan Rose } 3989bbd1fbSJordan Rose} 40