1 /* See e.g. https://en.cppreference.com/w/c/string/byte/strstr */
3 /* { dg-additional-options "-fpermissive" { target c++ } } */
5 #include "../../gcc.dg/analyzer/analyzer-decls.h"
7 extern char *strstr (const char* str
, const char* substr
);
10 test_passthrough (const char* str
, const char* substr
)
12 return strstr (str
, substr
);
16 test_NULL_str (const char *substr
)
18 return strstr (NULL
, substr
); /* { dg-warning "use of NULL where non-null expected" } */
22 test_unterminated_str (const char *substr
)
24 char str
[3] = "abc"; /* { dg-warning "initializer-string for '\[^\n\]*' is too long" "" { target c++ } } */
25 return strstr (str
, substr
); /* { dg-warning "stack-based buffer over-read" } */
26 /* { dg-message "while looking for null terminator for argument 1" "note" { target *-*-* } .-1 } */
30 test_uninitialized_str (const char *substr
)
33 return strstr (str
, substr
); /* { dg-warning "use of uninitialized value 'str\\\[0\\\]'" } */
37 test_NULL_substr (const char *str
)
39 return strstr (str
, NULL
); /* { dg-warning "use of NULL where non-null expected" } */
43 test_unterminated_substr (const char *str
)
45 char substr
[3] = "abc"; /* { dg-warning "initializer-string for '\[^\n\]*' is too long" "" { target c++ } } */
46 return strstr (str
, substr
); /* { dg-warning "stack-based buffer over-read" } */
47 /* { dg-message "while looking for null terminator for argument 2" "note" { target *-*-* } .-1 } */
50 char *test_uninitialized_substr (const char *str
)
53 return strstr (str
, substr
); /* { dg-warning "use of uninitialized value 'substr\\\[0\\\]'" } */