// Test that unused globals are included in the root set. // RUN: %clangxx_lsan -O2 %s -DTEST_LIB -c -o %t.o // RUN: %clangxx_lsan -O2 %s %t.o -o %t // RUN: %env_lsan_opts="use_stacks=0:use_registers=0:use_globals=1" %run %t 2>&1 | FileCheck %s --implicit-check-not=leak // RUN: %env_lsan_opts="" %run %t 2>&1 | FileCheck %s --implicit-check-not=leak // FIXME: This check is not very important and fails on arm7. // %env_lsan_opts="use_stacks=0:use_registers=0:use_globals=0" not %run %t 2>&1 | FileCheck %s --check-prefixes=LEAK #include #include #include #ifdef TEST_LIB void set(char *a) { strcpy(a, "hello"); } #else static void *g; void set(char *a); void foo(void *a) { // Store from a different function to suppress global localization. g = a; } int main() { char a[10]; set(a); char *b = strdup(a); printf("%p %s\n", b, b); g = b; } #endif // LEAK: LeakSanitizer: detected memory leaks