namespace categories {
extern const char * const CoreFoundationObjectiveC;
extern const char * const LogicError;
- extern const char * const MemoryCoreFoundationObjectiveC;
+ extern const char * const MemoryRefCount;
extern const char * const MemoryError;
extern const char * const UnixAPI;
}
MissingReleaseBugType.reset(
new BugType(this, "Missing ivar release (leak)",
- categories::MemoryCoreFoundationObjectiveC));
+ categories::MemoryRefCount));
ExtraReleaseBugType.reset(
new BugType(this, "Extra ivar release",
- categories::MemoryCoreFoundationObjectiveC));
+ categories::MemoryRefCount));
MistakenDeallocBugType.reset(
new BugType(this, "Mistaken dealloc",
- categories::MemoryCoreFoundationObjectiveC));
+ categories::MemoryRefCount));
}
void ObjCDeallocChecker::initIdentifierInfoAndSelectors(
return State->remove<RefBindings>(Sym);
}
-class UseAfterRelease : public CFRefBug {
+class UseAfterRelease : public RefCountBug {
public:
UseAfterRelease(const CheckerBase *checker)
- : CFRefBug(checker, "Use-after-release") {}
+ : RefCountBug(checker, "Use-after-release") {}
const char *getDescription() const override {
return "Reference-counted object is used after it is released";
}
};
-class BadRelease : public CFRefBug {
+class BadRelease : public RefCountBug {
public:
- BadRelease(const CheckerBase *checker) : CFRefBug(checker, "Bad release") {}
+ BadRelease(const CheckerBase *checker) : RefCountBug(checker, "Bad release") {}
const char *getDescription() const override {
return "Incorrect decrement of the reference count of an object that is "
}
};
-class DeallocNotOwned : public CFRefBug {
+class DeallocNotOwned : public RefCountBug {
public:
DeallocNotOwned(const CheckerBase *checker)
- : CFRefBug(checker, "-dealloc sent to non-exclusively owned object") {}
+ : RefCountBug(checker, "-dealloc sent to non-exclusively owned object") {}
const char *getDescription() const override {
return "-dealloc sent to object that may be referenced elsewhere";
}
};
-class OverAutorelease : public CFRefBug {
+class OverAutorelease : public RefCountBug {
public:
OverAutorelease(const CheckerBase *checker)
- : CFRefBug(checker, "Object autoreleased too many times") {}
+ : RefCountBug(checker, "Object autoreleased too many times") {}
const char *getDescription() const override {
return "Object autoreleased too many times";
}
};
-class ReturnedNotOwnedForOwned : public CFRefBug {
+class ReturnedNotOwnedForOwned : public RefCountBug {
public:
ReturnedNotOwnedForOwned(const CheckerBase *checker)
- : CFRefBug(checker, "Method should return an owned object") {}
+ : RefCountBug(checker, "Method should return an owned object") {}
const char *getDescription() const override {
return "Object with a +0 retain count returned to caller where a +1 "
}
};
-class Leak : public CFRefBug {
+class Leak : public RefCountBug {
public:
- Leak(const CheckerBase *checker, StringRef name) : CFRefBug(checker, name) {
+ Leak(const CheckerBase *checker, StringRef name) : RefCountBug(checker, name) {
// Leaks should not be reported if they are post-dominated by a sink.
setSuppressOnSink(true);
}
checkSummary(*Summ, Call, C);
}
-CFRefBug *
+RefCountBug *
RetainCountChecker::getLeakWithinFunctionBug(const LangOptions &LOpts) const {
if (!leakWithinFunction)
leakWithinFunction.reset(new Leak(this, "Leak"));
return leakWithinFunction.get();
}
-CFRefBug *
+RefCountBug *
RetainCountChecker::getLeakAtReturnBug(const LangOptions &LOpts) const {
if (!leakAtReturn)
leakAtReturn.reset(new Leak(this, "Leak of returned object"));
if (!N)
return;
- CFRefBug *BT;
+ RefCountBug *BT;
switch (ErrorKind) {
default:
llvm_unreachable("Unhandled error.");
}
assert(BT);
- auto report = llvm::make_unique<CFRefReport>(
+ auto report = llvm::make_unique<RefCountReport>(
*BT, C.getASTContext().getLangOpts(), N, Sym);
report->addRange(ErrorRange);
C.emitReport(std::move(report));
ExplodedNode *N = C.addTransition(state, Pred, &ReturnOwnLeakTag);
if (N) {
const LangOptions &LOpts = C.getASTContext().getLangOpts();
- auto R = llvm::make_unique<CFRefLeakReport>(
+ auto R = llvm::make_unique<RefLeakReport>(
*getLeakAtReturnBug(LOpts), LOpts, N, Sym, C);
C.emitReport(std::move(R));
}
if (!returnNotOwnedForOwned)
returnNotOwnedForOwned.reset(new ReturnedNotOwnedForOwned(this));
- auto R = llvm::make_unique<CFRefReport>(
+ auto R = llvm::make_unique<RefCountReport>(
*returnNotOwnedForOwned, C.getASTContext().getLangOpts(), N, Sym);
C.emitReport(std::move(R));
}
overAutorelease.reset(new OverAutorelease(this));
const LangOptions &LOpts = Ctx.getASTContext().getLangOpts();
- auto R = llvm::make_unique<CFRefReport>(*overAutorelease, LOpts, N, Sym,
+ auto R = llvm::make_unique<RefCountReport>(*overAutorelease, LOpts, N, Sym,
os.str());
Ctx.emitReport(std::move(R));
}
I = Leaked.begin(), E = Leaked.end(); I != E; ++I) {
const LangOptions &LOpts = Ctx.getASTContext().getLangOpts();
- CFRefBug *BT = Pred ? getLeakWithinFunctionBug(LOpts)
+ RefCountBug *BT = Pred ? getLeakWithinFunctionBug(LOpts)
: getLeakAtReturnBug(LOpts);
assert(BT && "BugType not initialized.");
Ctx.emitReport(
- llvm::make_unique<CFRefLeakReport>(*BT, LOpts, N, *I, Ctx));
+ llvm::make_unique<RefLeakReport>(*BT, LOpts, N, *I, Ctx));
}
}
check::RegionChanges,
eval::Assume,
eval::Call > {
- mutable std::unique_ptr<CFRefBug> useAfterRelease, releaseNotOwned;
- mutable std::unique_ptr<CFRefBug> deallocNotOwned;
- mutable std::unique_ptr<CFRefBug> overAutorelease, returnNotOwnedForOwned;
- mutable std::unique_ptr<CFRefBug> leakWithinFunction, leakAtReturn;
+ mutable std::unique_ptr<RefCountBug> useAfterRelease, releaseNotOwned;
+ mutable std::unique_ptr<RefCountBug> deallocNotOwned;
+ mutable std::unique_ptr<RefCountBug> overAutorelease, returnNotOwnedForOwned;
+ mutable std::unique_ptr<RefCountBug> leakWithinFunction, leakAtReturn;
mutable std::unique_ptr<RetainSummaryManager> Summaries;
public:
RetainCountChecker() {}
+ RefCountBug *getLeakWithinFunctionBug(const LangOptions &LOpts) const;
- CFRefBug *getLeakWithinFunctionBug(const LangOptions &LOpts) const;
-
- CFRefBug *getLeakAtReturnBug(const LangOptions &LOpts) const;
+ RefCountBug *getLeakAtReturnBug(const LangOptions &LOpts) const;
RetainSummaryManager &getSummaryManager(ASTContext &Ctx) const {
// FIXME: We don't support ARC being turned on and off during one analysis.
namespace ento {
namespace retaincountchecker {
-class CFRefReportVisitor : public BugReporterVisitor {
+class RefCountReportVisitor : public BugReporterVisitor {
protected:
SymbolRef Sym;
public:
- CFRefReportVisitor(SymbolRef sym) : Sym(sym) {}
+ RefCountReportVisitor(SymbolRef sym) : Sym(sym) {}
void Profile(llvm::FoldingSetNodeID &ID) const override {
static int x = 0;
BugReport &BR) override;
};
-class CFRefLeakReportVisitor : public CFRefReportVisitor {
+class RefLeakReportVisitor : public RefCountReportVisitor {
public:
- CFRefLeakReportVisitor(SymbolRef sym) : CFRefReportVisitor(sym) {}
+ RefLeakReportVisitor(SymbolRef sym) : RefCountReportVisitor(sym) {}
std::shared_ptr<PathDiagnosticPiece> getEndPath(BugReporterContext &BRC,
const ExplodedNode *N,
}
std::shared_ptr<PathDiagnosticPiece>
-CFRefReportVisitor::VisitNode(const ExplodedNode *N,
+RefCountReportVisitor::VisitNode(const ExplodedNode *N,
BugReporterContext &BRC, BugReport &BR) {
const SourceManager &SM = BRC.getSourceManager();
}
std::shared_ptr<PathDiagnosticPiece>
-CFRefReportVisitor::getEndPath(BugReporterContext &BRC,
+RefCountReportVisitor::getEndPath(BugReporterContext &BRC,
const ExplodedNode *EndN, BugReport &BR) {
BR.markInteresting(Sym);
return BugReporterVisitor::getDefaultEndPath(BRC, EndN, BR);
}
std::shared_ptr<PathDiagnosticPiece>
-CFRefLeakReportVisitor::getEndPath(BugReporterContext &BRC,
+RefLeakReportVisitor::getEndPath(BugReporterContext &BRC,
const ExplodedNode *EndN, BugReport &BR) {
// Tell the BugReporterContext to report cases when the tracked symbol is
return std::make_shared<PathDiagnosticEventPiece>(L, os.str());
}
-CFRefReport::CFRefReport(CFRefBug &D, const LangOptions &LOpts, ExplodedNode *n,
- SymbolRef sym, bool registerVisitor)
+RefCountReport::RefCountReport(RefCountBug &D, const LangOptions &LOpts,
+ ExplodedNode *n, SymbolRef sym,
+ bool registerVisitor)
: BugReport(D, D.getDescription(), n), Sym(sym) {
if (registerVisitor)
- addVisitor(llvm::make_unique<CFRefReportVisitor>(sym));
+ addVisitor(llvm::make_unique<RefCountReportVisitor>(sym));
}
-CFRefReport::CFRefReport(CFRefBug &D, const LangOptions &LOpts, ExplodedNode *n,
- SymbolRef sym, StringRef endText)
+RefCountReport::RefCountReport(RefCountBug &D, const LangOptions &LOpts,
+ ExplodedNode *n, SymbolRef sym,
+ StringRef endText)
: BugReport(D, D.getDescription(), endText, n) {
- addVisitor(llvm::make_unique<CFRefReportVisitor>(sym));
+ addVisitor(llvm::make_unique<RefCountReportVisitor>(sym));
}
-void CFRefLeakReport::deriveParamLocation(CheckerContext &Ctx, SymbolRef sym) {
+void RefLeakReport::deriveParamLocation(CheckerContext &Ctx, SymbolRef sym) {
const SourceManager& SMgr = Ctx.getSourceManager();
if (!sym->getOriginRegion())
}
}
-void CFRefLeakReport::deriveAllocLocation(CheckerContext &Ctx,
+void RefLeakReport::deriveAllocLocation(CheckerContext &Ctx,
SymbolRef sym) {
// Most bug reports are cached at the location where they occurred.
// With leaks, we want to unique them by the location where they were
UniqueingDecl = AllocNode->getLocationContext()->getDecl();
}
-void CFRefLeakReport::createDescription(CheckerContext &Ctx) {
+void RefLeakReport::createDescription(CheckerContext &Ctx) {
assert(Location.isValid() && UniqueingDecl && UniqueingLocation.isValid());
Description.clear();
llvm::raw_string_ostream os(Description);
}
}
-CFRefLeakReport::CFRefLeakReport(CFRefBug &D, const LangOptions &LOpts,
- ExplodedNode *n, SymbolRef sym,
- CheckerContext &Ctx)
- : CFRefReport(D, LOpts, n, sym, false) {
+RefLeakReport::RefLeakReport(RefCountBug &D, const LangOptions &LOpts,
+ ExplodedNode *n, SymbolRef sym,
+ CheckerContext &Ctx)
+ : RefCountReport(D, LOpts, n, sym, false) {
deriveAllocLocation(Ctx, sym);
if (!AllocBinding)
createDescription(Ctx);
- addVisitor(llvm::make_unique<CFRefLeakReportVisitor>(sym));
+ addVisitor(llvm::make_unique<RefLeakReportVisitor>(sym));
}
namespace ento {
namespace retaincountchecker {
-class CFRefBug : public BugType {
+class RefCountBug : public BugType {
protected:
- CFRefBug(const CheckerBase *checker, StringRef name)
- : BugType(checker, name, categories::MemoryCoreFoundationObjectiveC) {}
+ RefCountBug(const CheckerBase *checker, StringRef name)
+ : BugType(checker, name, categories::MemoryRefCount) {}
public:
-
- // FIXME: Eventually remove.
virtual const char *getDescription() const = 0;
virtual bool isLeak() const { return false; }
};
-class CFRefReport : public BugReport {
+class RefCountReport : public BugReport {
protected:
SymbolRef Sym;
public:
- CFRefReport(CFRefBug &D, const LangOptions &LOpts,
+ RefCountReport(RefCountBug &D, const LangOptions &LOpts,
ExplodedNode *n, SymbolRef sym,
bool registerVisitor = true);
- CFRefReport(CFRefBug &D, const LangOptions &LOpts,
+ RefCountReport(RefCountBug &D, const LangOptions &LOpts,
ExplodedNode *n, SymbolRef sym,
StringRef endText);
llvm::iterator_range<ranges_iterator> getRanges() override {
- const CFRefBug& BugTy = static_cast<CFRefBug&>(getBugType());
+ const RefCountBug& BugTy = static_cast<RefCountBug&>(getBugType());
if (!BugTy.isLeak())
return BugReport::getRanges();
return llvm::make_range(ranges_iterator(), ranges_iterator());
}
};
-class CFRefLeakReport : public CFRefReport {
+class RefLeakReport : public RefCountReport {
const MemRegion* AllocBinding;
const Stmt *AllocStmt;
void createDescription(CheckerContext &Ctx);
public:
- CFRefLeakReport(CFRefBug &D, const LangOptions &LOpts,
- ExplodedNode *n, SymbolRef sym,
- CheckerContext &Ctx);
+ RefLeakReport(RefCountBug &D, const LangOptions &LOpts, ExplodedNode *n,
+ SymbolRef sym, CheckerContext &Ctx);
PathDiagnosticLocation getLocation(const SourceManager &SM) const override {
assert(Location.isValid());
const char * const CoreFoundationObjectiveC = "Core Foundation/Objective-C";
const char * const LogicError = "Logic error";
-const char * const MemoryCoreFoundationObjectiveC =
- "Memory (Core Foundation/Objective-C)";
+const char * const MemoryRefCount =
+ "Memory (Core Foundation/Objective-C/OSObject)";
const char * const MemoryError = "Memory error";
const char * const UnixAPI = "Unix API";
}}}
</dict>
</array>
<key>description</key><string>Potential leak of an object stored into 'value'</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Leak</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Potential leak of an object stored into 'foo'</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Leak</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Potential leak of an object stored into 'foo'</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Leak</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Potential leak of an object stored into 'date'</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Leak</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Potential leak of an object stored into 'obj5'</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Leak</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Potential leak of an object stored into 'obj6'</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Leak</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Potential leak of an object stored into 'date'</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Leak</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Potential leak of an object of type 'CFStringRef'</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Leak</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Potential leak of an object stored into 'o'</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Leak</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Potential leak of an object of type 'NSNumber *'</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Leak</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
<string>/Volumes/Transcend/code/monorepo/llvm-project/clang/test/Analysis/objc-radar17039661.m</string>
</array>
</dict>
-</plist>
\ No newline at end of file
+</plist>
</dict>
</array>
<key>description</key><string>Potential leak of an object stored into 'value'</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Leak</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Potential leak of an object stored into 'foo'</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Leak</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Potential leak of an object stored into 'leaked'</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Leak</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Potential leak of an object stored into 'leaked'</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Leak</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Potential leak of an object stored into 'leaked'</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Leak</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Potential leak of an object stored into 'leaked'</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Leak</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Potential leak of an object stored into 'leaked'</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Leak</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Reference-counted object is used after it is released</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Use-after-release</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Reference-counted object is used after it is released</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Use-after-release</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Object autoreleased too many times</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Object autoreleased too many times</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Object autoreleased too many times</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Object autoreleased too many times</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Potential leak of an object stored into 'leaked'</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Leak</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Method should return an owned object</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Potential leak of an object stored into 'object'</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Leak of returned object</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Method should return an owned object</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Method should return an owned object</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Method should return an owned object</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Potential leak of an object stored into 'result'</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Leak of returned object</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Method should return an owned object</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Incorrect decrement of the reference count of an object that is not owned at this point by the caller</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Bad release</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Incorrect decrement of the reference count of an object that is not owned at this point by the caller</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Bad release</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Incorrect decrement of the reference count of an object that is not owned at this point by the caller</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Bad release</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Incorrect decrement of the reference count of an object that is not owned at this point by the caller</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Bad release</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Incorrect decrement of the reference count of an object that is not owned at this point by the caller</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Bad release</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Potential leak of an object of type 'MyObj *'</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Leak</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Potential leak of an object stored into 'y'</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Leak</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Object autoreleased too many times</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Object autoreleased too many times</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Object autoreleased too many times</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Object autoreleased too many times</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Object autoreleased too many times</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Object autoreleased too many times</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->
</dict>
</array>
<key>description</key><string>Object autoreleased too many times</string>
- <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+ <key>category</key><string>Memory (Core Foundation/Objective-C/OSObject)</string>
<key>type</key><string>Object autoreleased too many times</string>
<key>check_name</key><string>osx.cocoa.RetainCount</string>
<!-- This hash is experimental and going to change! -->