As shown in https://github.com/llvm/llvm-project/issues/42932 dead pointers might be overlapped by a new stack frame inside CheckForLeaks, which does not use bytes with pointers.
This leads to false negatives.
It's not a full solution for the problem as it does not solve "overlapping" new/old frames for frames below the CheckForLeaks and in other threads.
It should improve leaks found in direct callers of __lsan_do_leak_check.
why do we need noinline? I guess to avoid "i" to move too far
With __builtin_frame_address it should not be needed.