9 int test_1 (struct st
*p
)
11 fprintf (stderr
, "str: %s\n", p
->str
); /* { dg-message "pointer 'p' is dereferenced here" } */
12 if (!p
) /* { dg-warning "check of 'p' for NULL after already dereferencing it" } */
17 int test_2 (int flag_a
, int flag_b
, struct st
*p
)
21 int j
= p
->i
; /* { dg-message "pointer 'p' is dereferenced here" } */
22 if (flag_b
&& p
) /* { dg-warning "check of 'p' for NULL after already dereferencing it" } */
29 int test_3 (struct st
*a
, struct st
*b
)
38 int test_4 (struct st
*p
)
46 void test_check_after_strlen (const char *str
)
48 size_t len_a
= __builtin_strlen (str
); /* { dg-message "pointer 'str' is dereferenced here" } */
49 size_t len_b
= str
? __builtin_strlen (str
) : 0; /* { dg-warning "check of 'str' for NULL after already dereferencing it" } */
52 void test_6 (struct st
*a
, struct st
*b
)
54 int diff
= a
->i
- b
->i
; /* { dg-message "pointer 'b' is dereferenced here" } */
58 if (b
) /* { dg-warning "check of 'b' for NULL after already dereferencing it" } */
59 fprintf (stderr
, "str: %s\n", b
->str
);
62 void test_check_after_strcmp (const char *s1
, const char *s2
)
64 if (!__builtin_strcmp (s1
, s2
)) /* { dg-message "pointer 's1' is dereferenced here" } */
69 if (s1
) /* { dg-warning "check of 's1' for NULL after already dereferencing it" } */
73 void test_more_than_one_deref (struct st
*p
)
75 char *str
= p
->str
; /* { dg-message "pointer 'p' is dereferenced here" } */
80 if (p
) /* { dg-warning "check of 'p' for NULL after already dereferencing it" } */
86 void test_deref_under_another_name (struct st
*p
)
89 int i
= q
->i
; /* { dg-message "pointer 'p' is dereferenced here" } */
93 if (p
) /* { dg-warning "check of 'p' for NULL after already dereferencing it" } */
99 void test_check_after_memcpy_src (struct st
*dst
, struct st
*src
)
101 __builtin_memcpy (dst
, src
, sizeof (struct st
)); /* { dg-message "pointer 'src' is dereferenced here" } */
105 if (!src
) /* { dg-warning "check of 'src' for NULL after already dereferencing it" } */
111 void test_check_after_memcpy_dst (struct st
*dst
, struct st
*src
)
113 __builtin_memcpy (dst
, src
, sizeof (struct st
)); /* { dg-message "pointer 'dst' is dereferenced here" } */
117 if (!dst
) /* { dg-warning "check of 'dst' for NULL after already dereferencing it" } */
123 void test_merger (int *p
, int flag
)
129 __builtin_free (p
); /* { dg-bogus "double-'free'" } */