void strlen_argument(char *x) { size_t a = strlen(x); size_t b = strlen(x); if (a == 0) clang_analyzer_eval(b == 0); // expected-warning{{TRUE}} use_string(x); size_t c = strlen(x); if (a == 0) clang_analyzer_eval(c == 0); // expected-warning{{UNKNOWN}} }
void strlen_argument(char *x) { size_t a = strlen(x); size_t b = strlen(x); if (a == 0 && b != 0) (void)*(char*)0; // expected-warning{{never executed}} use_string(x); size_t c = strlen(x); if (a == 0 && c != 0) (void)*(char*)0; // expected-warning{{null}} }
void strlen_global() { size_t a = strlen(global_str); size_t b = strlen(global_str); if (a == 0 && b != 0) (void)*(char*)0; // expected-warning{{never executed}} // Call a function with unknown effects, which should invalidate globals. use_string(0); size_t c = strlen(global_str); if (a == 0 && c != 0) (void)*(char*)0; // expected-warning{{null}} }
void strlen_global() { size_t a = strlen(global_str); size_t b = strlen(global_str); if (a == 0) { clang_analyzer_eval(b == 0); // expected-warning{{TRUE}} // Make sure clang_analyzer_eval does not invalidate globals. clang_analyzer_eval(strlen(global_str) == 0); // expected-warning{{TRUE}} } // Call a function with unknown effects, which should invalidate globals. use_string(0); size_t c = strlen(global_str); if (a == 0) clang_analyzer_eval(c == 0); // expected-warning{{UNKNOWN}} }