NSOrCFErrorDerefChecker: Don't leak bug type. Similar to r208110/r208155. Found by LSan.

llvm-svn: 208251
This commit is contained in:
Nico Weber 2014-05-07 21:28:03 +00:00
parent 2fccdfbe70
commit 1fa575dcc6
1 changed files with 12 additions and 4 deletions

View File

@ -153,6 +153,8 @@ class NSOrCFErrorDerefChecker
: public Checker< check::Location,
check::Event<ImplicitNullDerefEvent> > {
mutable IdentifierInfo *NSErrorII, *CFErrorII;
mutable std::unique_ptr<NSErrorDerefBug> NSBT;
mutable std::unique_ptr<CFErrorDerefBug> CFBT;
public:
bool ShouldCheckNSError, ShouldCheckCFError;
NSOrCFErrorDerefChecker() : NSErrorII(0), CFErrorII(0),
@ -263,10 +265,16 @@ void NSOrCFErrorDerefChecker::checkEvent(ImplicitNullDerefEvent event) const {
os << " may be null";
BugType *bug = 0;
if (isNSError)
bug = new NSErrorDerefBug(this);
else
bug = new CFErrorDerefBug(this);
if (isNSError) {
if (!NSBT)
NSBT.reset(new NSErrorDerefBug(this));
bug = NSBT.get();
}
else {
if (!CFBT)
CFBT.reset(new CFErrorDerefBug(this));
bug = CFBT.get();
}
BugReport *report = new BugReport(*bug, os.str(), event.SinkNode);
BR.emitReport(report);
}