1 #include "analyzer-decls.h"
2
3 #define NULL ((void *)0)
4
5 void * __attribute__((noinline))
6 hide (void *ptr)
7 {
8 return ptr;
9 }
10
11 void test_1 (void)
12 {
13 int a;
14 __analyzer_eval (hide (&a) == NULL); /* { dg-warning "FALSE" } */
15 __analyzer_eval (hide (&a) + 1 != NULL); /* { dg-warning "TRUE" } */
16 __analyzer_eval (hide (&a) + 1 == NULL); /* { dg-warning "FALSE" } */
17 __analyzer_eval (hide (&a) - 1 != NULL); /* { dg-warning "TRUE" } */
18 __analyzer_eval (hide (&a) - 1 == NULL); /* { dg-warning "FALSE" } */
19 }
20
21 void test_2 (void)
22 {
23 __analyzer_eval (hide (NULL) == NULL); /* { dg-warning "TRUE" } */
24 __analyzer_eval (hide (NULL) - 1 == NULL); /* { dg-warning "FALSE" } */
25 __analyzer_eval (hide (NULL) + 1 == NULL); /* { dg-warning "FALSE" } */
26 }
27
28 void test_3 (void *p)
29 {
30 if (!p)
31 return;
32 __analyzer_eval (hide (p) == NULL); /* { dg-warning "FALSE" } */
33 __analyzer_eval (hide (p) + 1 != NULL); /* { dg-warning "TRUE" } */
34 __analyzer_eval (hide (p) + 1 == NULL); /* { dg-warning "FALSE" } */
35 __analyzer_eval (hide (p) - 1 != NULL); /* { dg-warning "TRUE" } */
36 __analyzer_eval (hide (p) - 1 == NULL); /* { dg-warning "FALSE" } */
37 }