[cfe-dev] [Analyzer] StackAddrEscapeChecker & BugReport::addRange()

Ádám Balogh via cfe-dev cfe-dev at lists.llvm.org
Wed Nov 6 05:31:20 PST 2019


We experienced some strange anomaly between Clang 8.0 and 8.1: when analyzing the same project StackAddrEscapeChecker reported a bug "Address of stack memory associated with local variable '<name of local>' is still referred to by the global variable '<name of global>' upon returning to the caller.  This will be a dangling reference" to the declaration of the stack variable in 8.0 instead of the exit point of the function. In 8.1 the location was correct, thus the end of the function. When checking the source code of the checker, the tests and also BugReporter.h and .cpp I did not find any change between these versions.

However I found something strange in StackAddrEscapeChecker which is still there: the checker adds the source range of the variable declaration to the bugreport which seems to be wrong. The documentation of BugReport::addRange() states that "They should be at the same source code line as the BugReport location." The declaration is definitely not part of the function exit point (return statement or closing bracket).

Should I try to fix this? I thing we should skip adding range in this particular case. Also I think we should add some assertion to BugReport::addRange() to avoid such cases. Do you also think that it is a good idea?



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20191106/49b01803/attachment.html>

More information about the cfe-dev mailing list