void strlen_indirect(char *x) { size_t a = strlen(x); char *p = x; char **p2 = &p; size_t b = strlen(x); if (a == 0) clang_analyzer_eval(b == 0); // expected-warning{{TRUE}} extern void use_string_ptr(char*const*); use_string_ptr(p2); size_t c = strlen(x); if (a == 0) clang_analyzer_eval(c == 0); // expected-warning{{UNKNOWN}} }
void strlen_indirect(char *x) { size_t a = strlen(x); char *p = x; char **p2 = &p; size_t b = strlen(x); if (a == 0 && b != 0) (void)*(char*)0; // expected-warning{{never executed}} extern void use_string_ptr(char*const*); use_string_ptr(p2); size_t c = strlen(x); if (a == 0 && c != 0) (void)*(char*)0; // expected-warning{{null}} }