[analyzer] Fixup for r185609: actually do suppress warnings coming out of std::list.
list is the name of a class, not a namespace. Change the test as well - the previous version did not test properly. Fixes radar://14317928. llvm-svn: 185898
This commit is contained in:
parent
999af7bf6e
commit
e0ad10404d
|
@ -1541,15 +1541,15 @@ LikelyFalsePositiveSuppressionBRVisitor::getEndPath(BugReporterContext &BRC,
|
|||
// The analyzer issues a false use-after-free when std::list::pop_front
|
||||
// or std::list::pop_back are called multiple times because we cannot
|
||||
// reason about the internal invariants of the datastructure.
|
||||
const DeclContext *DC =
|
||||
D->getDeclContext()->getEnclosingNamespaceContext();
|
||||
const NamespaceDecl *ND = dyn_cast<NamespaceDecl>(DC);
|
||||
if (ND && ND->getName() == "list") {
|
||||
if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D)) {
|
||||
const CXXRecordDecl *CD = MD->getParent();
|
||||
if (CD->getName() == "list") {
|
||||
BR.markInvalid(getTag(), 0);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Skip reports within the sys/queue.h macros as we do not have the ability to
|
||||
// reason about data structure shapes.
|
||||
|
|
|
@ -99,7 +99,13 @@ namespace std {
|
|||
: private __list_imp<_Tp, _Alloc>
|
||||
{
|
||||
public:
|
||||
void pop_front();
|
||||
void pop_front() {
|
||||
// Fake use-after-free.
|
||||
// No warning is expected as we are suppressing warning comming
|
||||
// out of std::list.
|
||||
int z = 0;
|
||||
z = 5/z;
|
||||
}
|
||||
bool empty() const;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue