1 // RUN: %clang_cc1 -analyze -analyzer-experimental-internal-checks -analyzer-check-objc-mem -analyzer-store=region -analyzer-constraints=range -fblocks -analyzer-output=plist -o - %s | FileCheck %s
4 void test_null_init(void) {
9 void test_null_assign(void) {
15 void test_null_assign_transitive(void) {
22 void test_null_cond(int *p) {
28 void test_null_cond_transitive(int *q) {
35 void test_null_field(void) {
36 struct s { int *p; } x;
41 // CHECK: <?xml version="1.0" encoding="UTF-8"?>
42 // CHECK: <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
43 // CHECK: <plist version="1.0">
45 // CHECK: <key>files</key>
48 // CHECK: <key>diagnostics</key>
51 // CHECK: <key>path</key>
54 // CHECK: <key>kind</key><string>event</string>
55 // CHECK: <key>location</key>
57 // CHECK: <key>line</key><integer>4</integer>
58 // CHECK: <key>col</key><integer>3</integer>
59 // CHECK: <key>file</key><integer>0</integer>
61 // CHECK: <key>ranges</key>
65 // CHECK: <key>line</key><integer>4</integer>
66 // CHECK: <key>col</key><integer>3</integer>
67 // CHECK: <key>file</key><integer>0</integer>
70 // CHECK: <key>line</key><integer>4</integer>
71 // CHECK: <key>col</key><integer>8</integer>
72 // CHECK: <key>file</key><integer>0</integer>
76 // CHECK: <key>extended_message</key>
77 // CHECK: <string>Variable 'p' initialized to a null pointer value</string>
78 // CHECK: <key>message</key>
79 // CHECK: <string>Variable 'p' initialized to a null pointer value</string>
82 // CHECK: <key>kind</key><string>control</string>
83 // CHECK: <key>edges</key>
86 // CHECK: <key>start</key>
89 // CHECK: <key>line</key><integer>4</integer>
90 // CHECK: <key>col</key><integer>3</integer>
91 // CHECK: <key>file</key><integer>0</integer>
94 // CHECK: <key>line</key><integer>4</integer>
95 // CHECK: <key>col</key><integer>8</integer>
96 // CHECK: <key>file</key><integer>0</integer>
99 // CHECK: <key>end</key>
102 // CHECK: <key>line</key><integer>5</integer>
103 // CHECK: <key>col</key><integer>3</integer>
104 // CHECK: <key>file</key><integer>0</integer>
107 // CHECK: <key>line</key><integer>5</integer>
108 // CHECK: <key>col</key><integer>4</integer>
109 // CHECK: <key>file</key><integer>0</integer>
116 // CHECK: <key>kind</key><string>event</string>
117 // CHECK: <key>location</key>
119 // CHECK: <key>line</key><integer>5</integer>
120 // CHECK: <key>col</key><integer>3</integer>
121 // CHECK: <key>file</key><integer>0</integer>
123 // CHECK: <key>ranges</key>
127 // CHECK: <key>line</key><integer>5</integer>
128 // CHECK: <key>col</key><integer>4</integer>
129 // CHECK: <key>file</key><integer>0</integer>
132 // CHECK: <key>line</key><integer>5</integer>
133 // CHECK: <key>col</key><integer>4</integer>
134 // CHECK: <key>file</key><integer>0</integer>
138 // CHECK: <key>extended_message</key>
139 // CHECK: <string>Dereference of null pointer (loaded from variable 'p')</string>
140 // CHECK: <key>message</key>
141 // CHECK: <string>Dereference of null pointer (loaded from variable 'p')</string>
144 // CHECK: <key>description</key><string>Dereference of null pointer (loaded from variable 'p')</string>
145 // CHECK: <key>category</key><string>Logic error</string>
146 // CHECK: <key>type</key><string>Dereference of null pointer</string>
147 // CHECK: <key>location</key>
149 // CHECK: <key>line</key><integer>5</integer>
150 // CHECK: <key>col</key><integer>3</integer>
151 // CHECK: <key>file</key><integer>0</integer>
155 // CHECK: <key>path</key>
158 // CHECK: <key>kind</key><string>control</string>
159 // CHECK: <key>edges</key>
162 // CHECK: <key>start</key>
165 // CHECK: <key>line</key><integer>9</integer>
166 // CHECK: <key>col</key><integer>3</integer>
167 // CHECK: <key>file</key><integer>0</integer>
170 // CHECK: <key>line</key><integer>9</integer>
171 // CHECK: <key>col</key><integer>3</integer>
172 // CHECK: <key>file</key><integer>0</integer>
175 // CHECK: <key>end</key>
178 // CHECK: <key>line</key><integer>10</integer>
179 // CHECK: <key>col</key><integer>3</integer>
180 // CHECK: <key>file</key><integer>0</integer>
183 // CHECK: <key>line</key><integer>10</integer>
184 // CHECK: <key>col</key><integer>3</integer>
185 // CHECK: <key>file</key><integer>0</integer>
192 // CHECK: <key>kind</key><string>event</string>
193 // CHECK: <key>location</key>
195 // CHECK: <key>line</key><integer>10</integer>
196 // CHECK: <key>col</key><integer>3</integer>
197 // CHECK: <key>file</key><integer>0</integer>
199 // CHECK: <key>ranges</key>
203 // CHECK: <key>line</key><integer>10</integer>
204 // CHECK: <key>col</key><integer>3</integer>
205 // CHECK: <key>file</key><integer>0</integer>
208 // CHECK: <key>line</key><integer>10</integer>
209 // CHECK: <key>col</key><integer>7</integer>
210 // CHECK: <key>file</key><integer>0</integer>
214 // CHECK: <key>extended_message</key>
215 // CHECK: <string>Null pointer value stored to 'p'</string>
216 // CHECK: <key>message</key>
217 // CHECK: <string>Null pointer value stored to 'p'</string>
220 // CHECK: <key>kind</key><string>control</string>
221 // CHECK: <key>edges</key>
224 // CHECK: <key>start</key>
227 // CHECK: <key>line</key><integer>10</integer>
228 // CHECK: <key>col</key><integer>3</integer>
229 // CHECK: <key>file</key><integer>0</integer>
232 // CHECK: <key>line</key><integer>10</integer>
233 // CHECK: <key>col</key><integer>3</integer>
234 // CHECK: <key>file</key><integer>0</integer>
237 // CHECK: <key>end</key>
240 // CHECK: <key>line</key><integer>11</integer>
241 // CHECK: <key>col</key><integer>3</integer>
242 // CHECK: <key>file</key><integer>0</integer>
245 // CHECK: <key>line</key><integer>11</integer>
246 // CHECK: <key>col</key><integer>4</integer>
247 // CHECK: <key>file</key><integer>0</integer>
254 // CHECK: <key>kind</key><string>event</string>
255 // CHECK: <key>location</key>
257 // CHECK: <key>line</key><integer>11</integer>
258 // CHECK: <key>col</key><integer>3</integer>
259 // CHECK: <key>file</key><integer>0</integer>
261 // CHECK: <key>ranges</key>
265 // CHECK: <key>line</key><integer>11</integer>
266 // CHECK: <key>col</key><integer>4</integer>
267 // CHECK: <key>file</key><integer>0</integer>
270 // CHECK: <key>line</key><integer>11</integer>
271 // CHECK: <key>col</key><integer>4</integer>
272 // CHECK: <key>file</key><integer>0</integer>
276 // CHECK: <key>extended_message</key>
277 // CHECK: <string>Dereference of null pointer (loaded from variable 'p')</string>
278 // CHECK: <key>message</key>
279 // CHECK: <string>Dereference of null pointer (loaded from variable 'p')</string>
282 // CHECK: <key>description</key><string>Dereference of null pointer (loaded from variable 'p')</string>
283 // CHECK: <key>category</key><string>Logic error</string>
284 // CHECK: <key>type</key><string>Dereference of null pointer</string>
285 // CHECK: <key>location</key>
287 // CHECK: <key>line</key><integer>11</integer>
288 // CHECK: <key>col</key><integer>3</integer>
289 // CHECK: <key>file</key><integer>0</integer>
293 // CHECK: <key>path</key>
296 // CHECK: <key>kind</key><string>control</string>
297 // CHECK: <key>edges</key>
300 // CHECK: <key>start</key>
303 // CHECK: <key>line</key><integer>15</integer>
304 // CHECK: <key>col</key><integer>3</integer>
305 // CHECK: <key>file</key><integer>0</integer>
308 // CHECK: <key>line</key><integer>15</integer>
309 // CHECK: <key>col</key><integer>3</integer>
310 // CHECK: <key>file</key><integer>0</integer>
313 // CHECK: <key>end</key>
316 // CHECK: <key>line</key><integer>17</integer>
317 // CHECK: <key>col</key><integer>3</integer>
318 // CHECK: <key>file</key><integer>0</integer>
321 // CHECK: <key>line</key><integer>17</integer>
322 // CHECK: <key>col</key><integer>8</integer>
323 // CHECK: <key>file</key><integer>0</integer>
330 // CHECK: <key>kind</key><string>event</string>
331 // CHECK: <key>location</key>
333 // CHECK: <key>line</key><integer>17</integer>
334 // CHECK: <key>col</key><integer>3</integer>
335 // CHECK: <key>file</key><integer>0</integer>
337 // CHECK: <key>ranges</key>
341 // CHECK: <key>line</key><integer>17</integer>
342 // CHECK: <key>col</key><integer>3</integer>
343 // CHECK: <key>file</key><integer>0</integer>
346 // CHECK: <key>line</key><integer>17</integer>
347 // CHECK: <key>col</key><integer>8</integer>
348 // CHECK: <key>file</key><integer>0</integer>
352 // CHECK: <key>extended_message</key>
353 // CHECK: <string>Variable 'q' initialized to a null pointer value</string>
354 // CHECK: <key>message</key>
355 // CHECK: <string>Variable 'q' initialized to a null pointer value</string>
358 // CHECK: <key>kind</key><string>control</string>
359 // CHECK: <key>edges</key>
362 // CHECK: <key>start</key>
365 // CHECK: <key>line</key><integer>17</integer>
366 // CHECK: <key>col</key><integer>3</integer>
367 // CHECK: <key>file</key><integer>0</integer>
370 // CHECK: <key>line</key><integer>17</integer>
371 // CHECK: <key>col</key><integer>8</integer>
372 // CHECK: <key>file</key><integer>0</integer>
375 // CHECK: <key>end</key>
378 // CHECK: <key>line</key><integer>18</integer>
379 // CHECK: <key>col</key><integer>3</integer>
380 // CHECK: <key>file</key><integer>0</integer>
383 // CHECK: <key>line</key><integer>18</integer>
384 // CHECK: <key>col</key><integer>4</integer>
385 // CHECK: <key>file</key><integer>0</integer>
392 // CHECK: <key>kind</key><string>event</string>
393 // CHECK: <key>location</key>
395 // CHECK: <key>line</key><integer>18</integer>
396 // CHECK: <key>col</key><integer>3</integer>
397 // CHECK: <key>file</key><integer>0</integer>
399 // CHECK: <key>ranges</key>
403 // CHECK: <key>line</key><integer>18</integer>
404 // CHECK: <key>col</key><integer>4</integer>
405 // CHECK: <key>file</key><integer>0</integer>
408 // CHECK: <key>line</key><integer>18</integer>
409 // CHECK: <key>col</key><integer>4</integer>
410 // CHECK: <key>file</key><integer>0</integer>
414 // CHECK: <key>extended_message</key>
415 // CHECK: <string>Dereference of null pointer (loaded from variable 'q')</string>
416 // CHECK: <key>message</key>
417 // CHECK: <string>Dereference of null pointer (loaded from variable 'q')</string>
420 // CHECK: <key>description</key><string>Dereference of null pointer (loaded from variable 'q')</string>
421 // CHECK: <key>category</key><string>Logic error</string>
422 // CHECK: <key>type</key><string>Dereference of null pointer</string>
423 // CHECK: <key>location</key>
425 // CHECK: <key>line</key><integer>18</integer>
426 // CHECK: <key>col</key><integer>3</integer>
427 // CHECK: <key>file</key><integer>0</integer>
431 // CHECK: <key>path</key>
434 // CHECK: <key>kind</key><string>control</string>
435 // CHECK: <key>edges</key>
438 // CHECK: <key>start</key>
441 // CHECK: <key>line</key><integer>22</integer>
442 // CHECK: <key>col</key><integer>3</integer>
443 // CHECK: <key>file</key><integer>0</integer>
446 // CHECK: <key>line</key><integer>22</integer>
447 // CHECK: <key>col</key><integer>3</integer>
448 // CHECK: <key>file</key><integer>0</integer>
451 // CHECK: <key>end</key>
454 // CHECK: <key>line</key><integer>22</integer>
455 // CHECK: <key>col</key><integer>7</integer>
456 // CHECK: <key>file</key><integer>0</integer>
459 // CHECK: <key>line</key><integer>22</integer>
460 // CHECK: <key>col</key><integer>8</integer>
461 // CHECK: <key>file</key><integer>0</integer>
468 // CHECK: <key>kind</key><string>event</string>
469 // CHECK: <key>location</key>
471 // CHECK: <key>line</key><integer>22</integer>
472 // CHECK: <key>col</key><integer>7</integer>
473 // CHECK: <key>file</key><integer>0</integer>
475 // CHECK: <key>ranges</key>
479 // CHECK: <key>line</key><integer>22</integer>
480 // CHECK: <key>col</key><integer>7</integer>
481 // CHECK: <key>file</key><integer>0</integer>
484 // CHECK: <key>line</key><integer>22</integer>
485 // CHECK: <key>col</key><integer>8</integer>
486 // CHECK: <key>file</key><integer>0</integer>
490 // CHECK: <key>extended_message</key>
491 // CHECK: <string>Assuming pointer value is null</string>
492 // CHECK: <key>message</key>
493 // CHECK: <string>Assuming pointer value is null</string>
496 // CHECK: <key>kind</key><string>control</string>
497 // CHECK: <key>edges</key>
500 // CHECK: <key>start</key>
503 // CHECK: <key>line</key><integer>22</integer>
504 // CHECK: <key>col</key><integer>7</integer>
505 // CHECK: <key>file</key><integer>0</integer>
508 // CHECK: <key>line</key><integer>22</integer>
509 // CHECK: <key>col</key><integer>8</integer>
510 // CHECK: <key>file</key><integer>0</integer>
513 // CHECK: <key>end</key>
516 // CHECK: <key>line</key><integer>23</integer>
517 // CHECK: <key>col</key><integer>5</integer>
518 // CHECK: <key>file</key><integer>0</integer>
521 // CHECK: <key>line</key><integer>23</integer>
522 // CHECK: <key>col</key><integer>6</integer>
523 // CHECK: <key>file</key><integer>0</integer>
530 // CHECK: <key>kind</key><string>event</string>
531 // CHECK: <key>location</key>
533 // CHECK: <key>line</key><integer>23</integer>
534 // CHECK: <key>col</key><integer>5</integer>
535 // CHECK: <key>file</key><integer>0</integer>
537 // CHECK: <key>ranges</key>
541 // CHECK: <key>line</key><integer>23</integer>
542 // CHECK: <key>col</key><integer>6</integer>
543 // CHECK: <key>file</key><integer>0</integer>
546 // CHECK: <key>line</key><integer>23</integer>
547 // CHECK: <key>col</key><integer>6</integer>
548 // CHECK: <key>file</key><integer>0</integer>
552 // CHECK: <key>extended_message</key>
553 // CHECK: <string>Dereference of null pointer (loaded from variable 'p')</string>
554 // CHECK: <key>message</key>
555 // CHECK: <string>Dereference of null pointer (loaded from variable 'p')</string>
558 // CHECK: <key>description</key><string>Dereference of null pointer (loaded from variable 'p')</string>
559 // CHECK: <key>category</key><string>Logic error</string>
560 // CHECK: <key>type</key><string>Dereference of null pointer</string>
561 // CHECK: <key>location</key>
563 // CHECK: <key>line</key><integer>23</integer>
564 // CHECK: <key>col</key><integer>5</integer>
565 // CHECK: <key>file</key><integer>0</integer>
569 // CHECK: <key>path</key>
572 // CHECK: <key>kind</key><string>control</string>
573 // CHECK: <key>edges</key>
576 // CHECK: <key>start</key>
579 // CHECK: <key>line</key><integer>28</integer>
580 // CHECK: <key>col</key><integer>3</integer>
581 // CHECK: <key>file</key><integer>0</integer>
584 // CHECK: <key>line</key><integer>28</integer>
585 // CHECK: <key>col</key><integer>3</integer>
586 // CHECK: <key>file</key><integer>0</integer>
589 // CHECK: <key>end</key>
592 // CHECK: <key>line</key><integer>28</integer>
593 // CHECK: <key>col</key><integer>7</integer>
594 // CHECK: <key>file</key><integer>0</integer>
597 // CHECK: <key>line</key><integer>28</integer>
598 // CHECK: <key>col</key><integer>8</integer>
599 // CHECK: <key>file</key><integer>0</integer>
606 // CHECK: <key>kind</key><string>event</string>
607 // CHECK: <key>location</key>
609 // CHECK: <key>line</key><integer>28</integer>
610 // CHECK: <key>col</key><integer>7</integer>
611 // CHECK: <key>file</key><integer>0</integer>
613 // CHECK: <key>ranges</key>
617 // CHECK: <key>line</key><integer>28</integer>
618 // CHECK: <key>col</key><integer>7</integer>
619 // CHECK: <key>file</key><integer>0</integer>
622 // CHECK: <key>line</key><integer>28</integer>
623 // CHECK: <key>col</key><integer>8</integer>
624 // CHECK: <key>file</key><integer>0</integer>
628 // CHECK: <key>extended_message</key>
629 // CHECK: <string>Assuming pointer value is null</string>
630 // CHECK: <key>message</key>
631 // CHECK: <string>Assuming pointer value is null</string>
634 // CHECK: <key>kind</key><string>control</string>
635 // CHECK: <key>edges</key>
638 // CHECK: <key>start</key>
641 // CHECK: <key>line</key><integer>28</integer>
642 // CHECK: <key>col</key><integer>7</integer>
643 // CHECK: <key>file</key><integer>0</integer>
646 // CHECK: <key>line</key><integer>28</integer>
647 // CHECK: <key>col</key><integer>8</integer>
648 // CHECK: <key>file</key><integer>0</integer>
651 // CHECK: <key>end</key>
654 // CHECK: <key>line</key><integer>29</integer>
655 // CHECK: <key>col</key><integer>5</integer>
656 // CHECK: <key>file</key><integer>0</integer>
659 // CHECK: <key>line</key><integer>29</integer>
660 // CHECK: <key>col</key><integer>5</integer>
661 // CHECK: <key>file</key><integer>0</integer>
668 // CHECK: <key>kind</key><string>control</string>
669 // CHECK: <key>edges</key>
672 // CHECK: <key>start</key>
675 // CHECK: <key>line</key><integer>29</integer>
676 // CHECK: <key>col</key><integer>5</integer>
677 // CHECK: <key>file</key><integer>0</integer>
680 // CHECK: <key>line</key><integer>29</integer>
681 // CHECK: <key>col</key><integer>5</integer>
682 // CHECK: <key>file</key><integer>0</integer>
685 // CHECK: <key>end</key>
688 // CHECK: <key>line</key><integer>30</integer>
689 // CHECK: <key>col</key><integer>5</integer>
690 // CHECK: <key>file</key><integer>0</integer>
693 // CHECK: <key>line</key><integer>30</integer>
694 // CHECK: <key>col</key><integer>6</integer>
695 // CHECK: <key>file</key><integer>0</integer>
702 // CHECK: <key>kind</key><string>event</string>
703 // CHECK: <key>location</key>
705 // CHECK: <key>line</key><integer>30</integer>
706 // CHECK: <key>col</key><integer>5</integer>
707 // CHECK: <key>file</key><integer>0</integer>
709 // CHECK: <key>ranges</key>
713 // CHECK: <key>line</key><integer>30</integer>
714 // CHECK: <key>col</key><integer>6</integer>
715 // CHECK: <key>file</key><integer>0</integer>
718 // CHECK: <key>line</key><integer>30</integer>
719 // CHECK: <key>col</key><integer>6</integer>
720 // CHECK: <key>file</key><integer>0</integer>
724 // CHECK: <key>extended_message</key>
725 // CHECK: <string>Dereference of null pointer (loaded from variable 'p')</string>
726 // CHECK: <key>message</key>
727 // CHECK: <string>Dereference of null pointer (loaded from variable 'p')</string>
730 // CHECK: <key>description</key><string>Dereference of null pointer (loaded from variable 'p')</string>
731 // CHECK: <key>category</key><string>Logic error</string>
732 // CHECK: <key>type</key><string>Dereference of null pointer</string>
733 // CHECK: <key>location</key>
735 // CHECK: <key>line</key><integer>30</integer>
736 // CHECK: <key>col</key><integer>5</integer>
737 // CHECK: <key>file</key><integer>0</integer>
741 // CHECK: <key>path</key>
744 // CHECK: <key>kind</key><string>control</string>
745 // CHECK: <key>edges</key>
748 // CHECK: <key>start</key>
751 // CHECK: <key>line</key><integer>35</integer>
752 // CHECK: <key>col</key><integer>3</integer>
753 // CHECK: <key>file</key><integer>0</integer>
756 // CHECK: <key>line</key><integer>35</integer>
757 // CHECK: <key>col</key><integer>8</integer>
758 // CHECK: <key>file</key><integer>0</integer>
761 // CHECK: <key>end</key>
764 // CHECK: <key>line</key><integer>35</integer>
765 // CHECK: <key>col</key><integer>10</integer>
766 // CHECK: <key>file</key><integer>0</integer>
769 // CHECK: <key>line</key><integer>35</integer>
770 // CHECK: <key>col</key><integer>10</integer>
771 // CHECK: <key>file</key><integer>0</integer>
778 // CHECK: <key>kind</key><string>control</string>
779 // CHECK: <key>edges</key>
782 // CHECK: <key>start</key>
785 // CHECK: <key>line</key><integer>35</integer>
786 // CHECK: <key>col</key><integer>10</integer>
787 // CHECK: <key>file</key><integer>0</integer>
790 // CHECK: <key>line</key><integer>35</integer>
791 // CHECK: <key>col</key><integer>10</integer>
792 // CHECK: <key>file</key><integer>0</integer>
795 // CHECK: <key>end</key>
798 // CHECK: <key>line</key><integer>37</integer>
799 // CHECK: <key>col</key><integer>3</integer>
800 // CHECK: <key>file</key><integer>0</integer>
803 // CHECK: <key>line</key><integer>37</integer>
804 // CHECK: <key>col</key><integer>8</integer>
805 // CHECK: <key>file</key><integer>0</integer>
812 // CHECK: <key>kind</key><string>event</string>
813 // CHECK: <key>location</key>
815 // CHECK: <key>line</key><integer>37</integer>
816 // CHECK: <key>col</key><integer>3</integer>
817 // CHECK: <key>file</key><integer>0</integer>
819 // CHECK: <key>ranges</key>
823 // CHECK: <key>line</key><integer>37</integer>
824 // CHECK: <key>col</key><integer>3</integer>
825 // CHECK: <key>file</key><integer>0</integer>
828 // CHECK: <key>line</key><integer>37</integer>
829 // CHECK: <key>col</key><integer>8</integer>
830 // CHECK: <key>file</key><integer>0</integer>
834 // CHECK: <key>extended_message</key>
835 // CHECK: <string>Dereference of null pointer</string>
836 // CHECK: <key>message</key>
837 // CHECK: <string>Dereference of null pointer</string>
840 // CHECK: <key>description</key><string>Dereference of null pointer</string>
841 // CHECK: <key>category</key><string>Logic error</string>
842 // CHECK: <key>type</key><string>Dereference of null pointer</string>
843 // CHECK: <key>location</key>
845 // CHECK: <key>line</key><integer>37</integer>
846 // CHECK: <key>col</key><integer>3</integer>
847 // CHECK: <key>file</key><integer>0</integer>