blob: 6ed39451a8bc3e33ec49b837faea41ad09e0d472 [file] [log] [blame]
Aleksei Sidorine1beaf12016-09-01 12:25:16 +00001// RUN: %clang_cc1 -analyze -analyzer-checker=debug.ExprInspection -analyzer-output=plist-multi-file %s -o %t.plist
2// RUN: FileCheck --input-file=%t.plist %s
3
4#include "Inputs/include/plist-diagnostics-include-check-macro.h"
5
6void foo() {
7 PlistCheckMacro()
8#define PLIST_DEF_MACRO .run();
9#include "Inputs/include/plist-diagnostics-include-check-macro.def"
10}
11
12// CHECK: <key>diagnostics</key>
13// CHECK-NEXT: <array>
14// CHECK-NEXT: <dict>
15// CHECK-NEXT: <key>path</key>
16// CHECK-NEXT: <array>
17// CHECK-NEXT: <dict>
18// CHECK-NEXT: <key>kind</key><string>event</string>
19// CHECK-NEXT: <key>location</key>
20// CHECK-NEXT: <dict>
21// CHECK-NEXT: <key>line</key><integer>7</integer>
22// CHECK-NEXT: <key>col</key><integer>3</integer>
23// CHECK-NEXT: <key>file</key><integer>0</integer>
24// CHECK-NEXT: </dict>
25// CHECK-NEXT: <key>ranges</key>
26// CHECK-NEXT: <array>
27// CHECK-NEXT: <array>
28// CHECK-NEXT: <dict>
29// CHECK-NEXT: <key>line</key><integer>7</integer>
30// CHECK-NEXT: <key>col</key><integer>3</integer>
31// CHECK-NEXT: <key>file</key><integer>0</integer>
32// CHECK-NEXT: </dict>
33// CHECK-NEXT: <dict>
34// CHECK-NEXT: <key>line</key><integer>1</integer>
35// CHECK-NEXT: <key>col</key><integer>15</integer>
36// CHECK-NEXT: <key>file</key><integer>2</integer>
37// CHECK-NEXT: </dict>
38// CHECK-NEXT: </array>
39// CHECK-NEXT: </array>
40// CHECK-NEXT: <key>depth</key><integer>0</integer>
41// CHECK-NEXT: <key>extended_message</key>
42// CHECK-NEXT: <string>Calling &apos;PlistCheckMacro::run&apos;</string>
43// CHECK-NEXT: <key>message</key>
44// CHECK-NEXT: <string>Calling &apos;PlistCheckMacro::run&apos;</string>
45// CHECK-NEXT: </dict>
46// CHECK-NEXT: <dict>
47// CHECK-NEXT: <key>kind</key><string>event</string>
48// CHECK-NEXT: <key>location</key>
49// CHECK-NEXT: <dict>
50// CHECK-NEXT: <key>line</key><integer>6</integer>
51// CHECK-NEXT: <key>col</key><integer>3</integer>
52// CHECK-NEXT: <key>file</key><integer>1</integer>
53// CHECK-NEXT: </dict>
54// CHECK-NEXT: <key>depth</key><integer>1</integer>
55// CHECK-NEXT: <key>extended_message</key>
56// CHECK-NEXT: <string>Entered call from &apos;foo&apos;</string>
57// CHECK-NEXT: <key>message</key>
58// CHECK-NEXT: <string>Entered call from &apos;foo&apos;</string>
59// CHECK-NEXT: </dict>
60// CHECK-NEXT: <dict>
61// CHECK-NEXT: <key>kind</key><string>control</string>
62// CHECK-NEXT: <key>edges</key>
63// CHECK-NEXT: <array>
64// CHECK-NEXT: <dict>
65// CHECK-NEXT: <key>start</key>
66// CHECK-NEXT: <array>
67// CHECK-NEXT: <dict>
68// CHECK-NEXT: <key>line</key><integer>6</integer>
69// CHECK-NEXT: <key>col</key><integer>3</integer>
70// CHECK-NEXT: <key>file</key><integer>1</integer>
71// CHECK-NEXT: </dict>
72// CHECK-NEXT: <dict>
73// CHECK-NEXT: <key>line</key><integer>6</integer>
74// CHECK-NEXT: <key>col</key><integer>6</integer>
75// CHECK-NEXT: <key>file</key><integer>1</integer>
76// CHECK-NEXT: </dict>
77// CHECK-NEXT: </array>
78// CHECK-NEXT: <key>end</key>
79// CHECK-NEXT: <array>
80// CHECK-NEXT: <dict>
81// CHECK-NEXT: <key>line</key><integer>7</integer>
82// CHECK-NEXT: <key>col</key><integer>5</integer>
83// CHECK-NEXT: <key>file</key><integer>1</integer>
84// CHECK-NEXT: </dict>
85// CHECK-NEXT: <dict>
86// CHECK-NEXT: <key>line</key><integer>7</integer>
87// CHECK-NEXT: <key>col</key><integer>32</integer>
88// CHECK-NEXT: <key>file</key><integer>1</integer>
89// CHECK-NEXT: </dict>
90// CHECK-NEXT: </array>
91// CHECK-NEXT: </dict>
92// CHECK-NEXT: </array>
93// CHECK-NEXT: </dict>
94// CHECK-NEXT: <dict>
95// CHECK-NEXT: <key>kind</key><string>event</string>
96// CHECK-NEXT: <key>location</key>
97// CHECK-NEXT: <dict>
98// CHECK-NEXT: <key>line</key><integer>7</integer>
99// CHECK-NEXT: <key>col</key><integer>5</integer>
100// CHECK-NEXT: <key>file</key><integer>1</integer>
101// CHECK-NEXT: </dict>
102// CHECK-NEXT: <key>ranges</key>
103// CHECK-NEXT: <array>
104// CHECK-NEXT: <array>
105// CHECK-NEXT: <dict>
106// CHECK-NEXT: <key>line</key><integer>7</integer>
107// CHECK-NEXT: <key>col</key><integer>5</integer>
108// CHECK-NEXT: <key>file</key><integer>1</integer>
109// CHECK-NEXT: </dict>
110// CHECK-NEXT: <dict>
111// CHECK-NEXT: <key>line</key><integer>7</integer>
112// CHECK-NEXT: <key>col</key><integer>34</integer>
113// CHECK-NEXT: <key>file</key><integer>1</integer>
114// CHECK-NEXT: </dict>
115// CHECK-NEXT: </array>
116// CHECK-NEXT: </array>
117// CHECK-NEXT: <key>depth</key><integer>1</integer>
118// CHECK-NEXT: <key>extended_message</key>
119// CHECK-NEXT: <string>REACHABLE</string>
120// CHECK-NEXT: <key>message</key>
121// CHECK-NEXT: <string>REACHABLE</string>
122// CHECK-NEXT: </dict>
123// CHECK-NEXT: </array>
124// CHECK-NEXT: <key>description</key><string>REACHABLE</string>
125// CHECK-NEXT: <key>category</key><string>debug</string>
126// CHECK-NEXT: <key>type</key><string>Checking analyzer assumptions</string>
127// CHECK-NEXT: <key>check_name</key><string>debug.ExprInspection</string>
128// CHECK-NEXT: <!-- This hash is experimental and going to change! -->
129// CHECK-NEXT: <key>issue_hash_content_of_line_in_context</key><string>93b4eab05b21c892c8e31723e5af3f59</string>
130// CHECK-NEXT: <key>issue_context_kind</key><string>C++ method</string>
131// CHECK-NEXT: <key>issue_context</key><string>run</string>
132// CHECK-NEXT: <key>issue_hash_function_offset</key><string>1</string>
133// CHECK-NEXT: <key>location</key>
134// CHECK-NEXT: <dict>
135// CHECK-NEXT: <key>line</key><integer>7</integer>
136// CHECK-NEXT: <key>col</key><integer>5</integer>
137// CHECK-NEXT: <key>file</key><integer>1</integer>
138// CHECK-NEXT: </dict>
139// CHECK-NEXT: </dict>
140// CHECK-NEXT: </array>