1 /* Verify that we clarify the sense of paths involving strcmp. */
2
3 #include <string.h>
4 #include <stdlib.h>
5
test_1(const char * str,char * ptr)6 int test_1 (const char *str, char *ptr)
7 {
8 if (strcmp (str, "VALUE")) /* { dg-message "following 'true' branch \\(when the strings are non-equal\\)\\.\\.\\." } */
9 free (ptr);
10 free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */
11 }
12
test_2(const char * str,char * ptr)13 int test_2 (const char *str, char *ptr)
14 {
15 if (strcmp (str, "VALUE") == 0) /* { dg-message "following 'true' branch \\(when the strings are equal\\)\\.\\.\\." } */
16 free (ptr);
17 free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */
18 }
19
test_3(const char * str,char * ptr)20 int test_3 (const char *str, char *ptr)
21 {
22 if (!strcmp (str, "VALUE")) /* { dg-message "following 'true' branch \\(when the strings are equal\\)\\.\\.\\." } */
23 free (ptr);
24 free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */
25 }
26
test_4(const char * str,char * ptr)27 int test_4 (const char *str, char *ptr)
28 {
29 if (strcmp (str, "VALUE")) /* { dg-message "following 'false' branch \\(when the strings are equal\\)\\.\\.\\." } */
30 {
31 }
32 else
33 free (ptr);
34 free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */
35 }
36