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