Jeff King <peff@xxxxxxxx> writes: > Subject: Makefile: force -O0 when compiling with SANITIZE=leak > > Compiling with -O2 can interact badly with LSan's leak-checker, causing > false positives. Imagine a simplified example like: > > char *str = allocate_some_string(); > if (some_func(str) < 0) > die("bad str"); > free(str); > > The compiler may eliminate "str" as a stack variable, and just leave it > in a register. The register is preserved through most of the function, > including across the call to some_func(), since we'd eventually need to > free it. But because die() is marked with NORETURN, the compiler knows > that it doesn't need to save registers, and just clobbers it. Yup, this is one weak point in the runtime checker in that it must see the pointer held in the stack or register to ignore a still reachable cruft that does not matter upon program exit, which cannot work well with certain optimizations. Theoretically there may be no guarantee that -O0 would disable all optimizations that are potentially problematic to what LSan expects to see, but I fully agree with you that this is the right direction. Will queue. Thanks.