analyzer: implement kf_strstr [PR105899]
[official-gcc.git] / gcc / testsuite / c-c++-common / analyzer / strstr-1.c
blob469e6a817d0d7cd8ebbb55ba380c7c1637b1e4f7
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);
9 char *
10 test_passthrough (const char* str, const char* substr)
12 return strstr (str, substr);
15 char *
16 test_NULL_str (const char *substr)
18 return strstr (NULL, substr); /* { dg-warning "use of NULL where non-null expected" } */
21 char *
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 } */
29 char *
30 test_uninitialized_str (const char *substr)
32 char str[16];
33 return strstr (str, substr); /* { dg-warning "use of uninitialized value 'str\\\[0\\\]'" } */
36 char *
37 test_NULL_substr (const char *str)
39 return strstr (str, NULL); /* { dg-warning "use of NULL where non-null expected" } */
42 char *
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)
52 char substr[16];
53 return strstr (str, substr); /* { dg-warning "use of uninitialized value 'substr\\\[0\\\]'" } */