xref: /llvm-project/clang/test/Analysis/objc-string.mm (revision 184c6242faca0be0188611d45b41235e68ef282a)
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