diff options
-rw-r--r-- | clang/include/clang/StaticAnalyzer/Checkers/ObjCRetainCount.h | 4 | ||||
-rw-r--r-- | clang/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp | 385 | ||||
-rw-r--r-- | clang/test/Analysis/CFDateGC.m | 85 | ||||
-rw-r--r-- | clang/test/Analysis/Inputs/expected-plists/retain-release-path-notes-gc.m.plist | 1172 | ||||
-rw-r--r-- | clang/test/Analysis/Inputs/expected-plists/retain-release-path-notes.m.plist | 1298 | ||||
-rw-r--r-- | clang/test/Analysis/PR2599.m | 63 | ||||
-rw-r--r-- | clang/test/Analysis/retain-release-gc-only.m | 434 | ||||
-rw-r--r-- | clang/test/Analysis/retain-release-path-notes-gc.m | 75 | ||||
-rw-r--r-- | clang/test/Analysis/retain-release-path-notes.m | 10 | ||||
-rw-r--r-- | clang/test/Analysis/retain-release.m | 14 |
10 files changed, 579 insertions, 2961 deletions
diff --git a/clang/include/clang/StaticAnalyzer/Checkers/ObjCRetainCount.h b/clang/include/clang/StaticAnalyzer/Checkers/ObjCRetainCount.h index f5a06394b18..9f5f249db84 100644 --- a/clang/include/clang/StaticAnalyzer/Checkers/ObjCRetainCount.h +++ b/clang/include/clang/StaticAnalyzer/Checkers/ObjCRetainCount.h @@ -65,10 +65,6 @@ enum ArgEffect { /// if CFRetain has been called on the argument. IncRef, - /// The argument acts as if has been passed to CFMakeCollectable, which - /// transfers the object to the Garbage Collector under GC. - MakeCollectable, - /// The argument is a pointer to a retain-counted object; on exit, the new /// value of the pointer is a +0 value or NULL. UnretainedOutParameter, diff --git a/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp index 1d773c31cd8..127f20bee71 100644 --- a/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp @@ -83,14 +83,12 @@ public: ReturnedNotOwned, // Return object does not pass ownership to caller. ERROR_START, ErrorDeallocNotOwned, // -dealloc called on non-owned object. - ErrorDeallocGC, // Calling -dealloc with GC enabled. ErrorUseAfterRelease, // Object used after released. ErrorReleaseNotOwned, // Release of an object that was not owned. ERROR_LEAK_START, ErrorLeak, // A memory leak due to excessive reference counts. ErrorLeakReturned, // A memory leak due to the returning method not having // the correct naming conventions. - ErrorGCLeakReturned, ErrorOverAutorelease, ErrorReturnedNotOwned }; @@ -303,10 +301,6 @@ void RefVal::print(raw_ostream &Out) const { Out << "Released"; break; - case ErrorDeallocGC: - Out << "-dealloc (GC)"; - break; - case ErrorDeallocNotOwned: Out << "-dealloc (not-owned)"; break; @@ -319,10 +313,6 @@ void RefVal::print(raw_ostream &Out) const { Out << "Leaked (Bad naming)"; break; - case ErrorGCLeakReturned: - Out << "Leaked (GC-ed at return)"; - break; - case ErrorUseAfterRelease: Out << "Use-After-Release [ERROR]"; break; @@ -600,9 +590,6 @@ class RetainSummaryManager { /// Ctx - The ASTContext object for the analyzed ASTs. ASTContext &Ctx; - /// GCEnabled - Records whether or not the analyzed code runs in GC mode. - const bool GCEnabled; - /// Records whether or not the analyzed code runs in ARC mode. const bool ARCEnabled; @@ -646,7 +633,7 @@ class RetainSummaryManager { /// data in ScratchArgs. ArgEffects getArgEffects(); - enum UnaryFuncKind { cfretain, cfrelease, cfautorelease, cfmakecollectable }; + enum UnaryFuncKind { cfretain, cfrelease, cfautorelease }; const RetainSummary *getUnarySummary(const FunctionType* FT, UnaryFuncKind func); @@ -732,19 +719,14 @@ private: public: - RetainSummaryManager(ASTContext &ctx, bool gcenabled, bool usesARC) + RetainSummaryManager(ASTContext &ctx, bool usesARC) : Ctx(ctx), - GCEnabled(gcenabled), ARCEnabled(usesARC), AF(BPAlloc), ScratchArgs(AF.getEmptyMap()), - ObjCAllocRetE(gcenabled - ? RetEffect::MakeGCNotOwned() - : (usesARC ? RetEffect::MakeNotOwned(RetEffect::ObjC) - : RetEffect::MakeOwned(RetEffect::ObjC))), - ObjCInitRetE(gcenabled - ? RetEffect::MakeGCNotOwned() - : (usesARC ? RetEffect::MakeNotOwned(RetEffect::ObjC) - : RetEffect::MakeOwnedWhenTrackedReceiver())) { + ObjCAllocRetE(usesARC ? RetEffect::MakeNotOwned(RetEffect::ObjC) + : RetEffect::MakeOwned(RetEffect::ObjC)), + ObjCInitRetE(usesARC ? RetEffect::MakeNotOwned(RetEffect::ObjC) + : RetEffect::MakeOwnedWhenTrackedReceiver()) { InitializeClassMethodSummaries(); InitializeMethodSummaries(); } @@ -802,12 +784,8 @@ public: void updateSummaryForCall(const RetainSummary *&Summ, const CallEvent &Call); - bool isGCEnabled() const { return GCEnabled; } - bool isARCEnabled() const { return ARCEnabled; } - bool isARCorGCEnabled() const { return GCEnabled || ARCEnabled; } - RetEffect getObjAllocRetEffect() const { return ObjCAllocRetE; } friend class RetainSummaryTemplate; @@ -895,12 +873,6 @@ static bool isAutorelease(const FunctionDecl *FD, StringRef FName) { FName.endswith_lower("autorelease"); } -static bool isMakeCollectable(const FunctionDecl *FD, StringRef FName) { - // FIXME: Remove FunctionDecl parameter. - // FIXME: Is it really okay if MakeCollectable isn't a suffix? - return FName.find_lower("MakeCollectable") != StringRef::npos; -} - static ArgEffect getStopTrackingHardEquivalent(ArgEffect E) { switch (E) { case DoNothing: @@ -908,7 +880,6 @@ static ArgEffect getStopTrackingHardEquivalent(ArgEffect E) { case DecRefBridgedTransferred: case IncRef: case IncRefMsg: - case MakeCollectable: case UnretainedOutParameter: case RetainedOutParameter: case MayEscape: @@ -1073,14 +1044,6 @@ RetainSummaryManager::getFunctionSummary(const FunctionDecl *FD) { // Part of: <rdar://problem/7299394> and <rdar://problem/11282706>. // This will be addressed better with IPA. S = getPersistentStopSummary(); - } else if (FName == "NSMakeCollectable") { - // Handle: id NSMakeCollectable(CFTypeRef) - S = (RetTy->isObjCIdType()) - ? getUnarySummary(FT, cfmakecollectable) - : getPersistentStopSummary(); - // The headers on OS X 10.8 use cf_consumed/ns_returns_retained, - // but we can fully model NSMakeCollectable ourselves. - AllowAnnotations = false; } else if (FName == "CFPlugInInstanceCreate") { S = getPersistentSummary(RetEffect::MakeNoRet()); } else if (FName == "IORegistryEntrySearchCFProperty" @@ -1181,9 +1144,6 @@ RetainSummaryManager::getFunctionSummary(const FunctionDecl *FD) { // The headers use cf_consumed, but we can fully model CFAutorelease // ourselves. AllowAnnotations = false; - } else if (isMakeCollectable(FD, FName)) { - S = getUnarySummary(FT, cfmakecollectable); - AllowAnnotations = false; } else { S = getCFCreateGetRuleSummary(FD); } @@ -1294,7 +1254,6 @@ RetainSummaryManager::getUnarySummary(const FunctionType* FT, case cfretain: Effect = IncRef; break; case cfrelease: Effect = DecRef; break; case cfautorelease: Effect = Autorelease; break; - case cfmakecollectable: Effect = MakeCollectable; break; } ScratchArgs = AF.add(ScratchArgs, 0, Effect); @@ -1732,16 +1691,6 @@ namespace { } }; - class DeallocGC : public CFRefBug { - public: - DeallocGC(const CheckerBase *checker) - : CFRefBug(checker, "-dealloc called while using garbage collection") {} - - const char *getDescription() const override { - return "-dealloc called while using garbage collection"; - } - }; - class DeallocNotOwned : public CFRefBug { public: DeallocNotOwned(const CheckerBase *checker) @@ -1792,11 +1741,10 @@ namespace { protected: SymbolRef Sym; const SummaryLogTy &SummaryLog; - bool GCEnabled; public: - CFRefReportVisitor(SymbolRef sym, bool gcEnabled, const SummaryLogTy &log) - : Sym(sym), SummaryLog(log), GCEnabled(gcEnabled) {} + CFRefReportVisitor(SymbolRef sym, const SummaryLogTy &log) + : Sym(sym), SummaryLog(log) {} void Profile(llvm::FoldingSetNodeID &ID) const override { static int x = 0; @@ -1816,9 +1764,9 @@ namespace { class CFRefLeakReportVisitor : public CFRefReportVisitor { public: - CFRefLeakReportVisitor(SymbolRef sym, bool GCEnabled, + CFRefLeakReportVisitor(SymbolRef sym, const SummaryLogTy &log) - : CFRefReportVisitor(sym, GCEnabled, log) {} + : CFRefReportVisitor(sym, log) {} std::shared_ptr<PathDiagnosticPiece> getEndPath(BugReporterContext &BRC, const ExplodedNode *N, @@ -1826,24 +1774,21 @@ namespace { }; class CFRefReport : public BugReport { - void addGCModeDescription(const LangOptions &LOpts, bool GCEnabled); public: - CFRefReport(CFRefBug &D, const LangOptions &LOpts, bool GCEnabled, + CFRefReport(CFRefBug &D, const LangOptions &LOpts, const SummaryLogTy &Log, ExplodedNode *n, SymbolRef sym, bool registerVisitor = true) : BugReport(D, D.getDescription(), n) { if (registerVisitor) - addVisitor(llvm::make_unique<CFRefReportVisitor>(sym, GCEnabled, Log)); - addGCModeDescription(LOpts, GCEnabled); + addVisitor(llvm::make_unique<CFRefReportVisitor>(sym, Log)); } - CFRefReport(CFRefBug &D, const LangOptions &LOpts, bool GCEnabled, + CFRefReport(CFRefBug &D, const LangOptions &LOpts, const SummaryLogTy &Log, ExplodedNode *n, SymbolRef sym, StringRef endText) : BugReport(D, D.getDescription(), endText, n) { - addVisitor(llvm::make_unique<CFRefReportVisitor>(sym, GCEnabled, Log)); - addGCModeDescription(LOpts, GCEnabled); + addVisitor(llvm::make_unique<CFRefReportVisitor>(sym, Log)); } llvm::iterator_range<ranges_iterator> getRanges() override { @@ -1863,10 +1808,10 @@ namespace { // Finds the location where a leak warning for 'sym' should be raised. void deriveAllocLocation(CheckerContext &Ctx, SymbolRef sym); // Produces description of a leak warning which is printed on the console. - void createDescription(CheckerContext &Ctx, bool GCEnabled, bool IncludeAllocationLine); + void createDescription(CheckerContext &Ctx, bool IncludeAllocationLine); public: - CFRefLeakReport(CFRefBug &D, const LangOptions &LOpts, bool GCEnabled, + CFRefLeakReport(CFRefBug &D, const LangOptions &LOpts, const SummaryLogTy &Log, ExplodedNode *n, SymbolRef sym, CheckerContext &Ctx, bool IncludeAllocationLine); @@ -1878,39 +1823,6 @@ namespace { }; } // end anonymous namespace -void CFRefReport::addGCModeDescription(const LangOptions &LOpts, - bool GCEnabled) { - const char *GCModeDescription = nullptr; - - switch (LOpts.getGC()) { - case LangOptions::GCOnly: - assert(GCEnabled); - GCModeDescription = "Code is compiled to only use garbage collection"; - break; - - case LangOptions::NonGC: - assert(!GCEnabled); - GCModeDescription = "Code is compiled to use reference counts"; - break; - - case LangOptions::HybridGC: - if (GCEnabled) { - GCModeDescription = "Code is compiled to use either garbage collection " - "(GC) or reference counts (non-GC). The bug occurs " - "with GC enabled"; - break; - } else { - GCModeDescription = "Code is compiled to use either garbage collection " - "(GC) or reference counts (non-GC). The bug occurs " - "in non-GC mode"; - break; - } - } - - assert(GCModeDescription && "invalid/unknown GC mode"); - addExtraText(GCModeDescription); -} - static bool isNumericLiteralExpression(const Expr *E) { // FIXME: This set of cases was copied from SemaExprObjC. return isa<IntegerLiteral>(E) || @@ -2047,14 +1959,7 @@ CFRefReportVisitor::VisitNode(const ExplodedNode *N, const ExplodedNode *PrevN, if (CurrV.isOwned()) { os << "+1 retain count"; - - if (GCEnabled) { - assert(CurrV.getObjKind() == RetEffect::CF); - os << ". " - "Core Foundation objects are not automatically garbage collected."; - } - } - else { + } else { assert (CurrV.isNotOwned()); os << "+0 retain count"; } @@ -2091,14 +1996,14 @@ CFRefReportVisitor::VisitNode(const ExplodedNode *N, const ExplodedNode *PrevN, // We have an argument. Get the effect! AEffects.push_back(Summ->getArg(i)); } - } - else if (const ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(S)) { - if (const Expr *receiver = ME->getInstanceReceiver()) + } else if (const ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(S)) { + if (const Expr *receiver = ME->getInstanceReceiver()) { if (CurrSt->getSValAsScalarOrLoc(receiver, LCtx) .getAsLocSymbol() == Sym) { // The symbol we are tracking is the receiver. AEffects.push_back(Summ->getReceiverEffect()); } + } } } @@ -2107,7 +2012,7 @@ CFRefReportVisitor::VisitNode(const ExplodedNode *N, const ExplodedNode *PrevN, RefVal PrevV = *PrevT; // Specially handle -dealloc. - if (!GCEnabled && std::find(AEffects.begin(), AEffects.end(), Dealloc) != + if (std::find(AEffects.begin(), AEffects.end(), Dealloc) != AEffects.end()) { // Determine if the object's reference count was pushed to zero. assert(!PrevV.hasSameState(CurrV) && "The state should have changed."); @@ -2120,41 +2025,6 @@ CFRefReportVisitor::VisitNode(const ExplodedNode *N, const ExplodedNode *PrevN, } } - // Specially handle CFMakeCollectable and friends. - if (std::find(AEffects.begin(), AEffects.end(), MakeCollectable) != - AEffects.end()) { - // Get the name of the function. - const Stmt *S = N->getLocation().castAs<StmtPoint>().getStmt(); - SVal X = - CurrSt->getSValAsScalarOrLoc(cast<CallExpr>(S)->getCallee(), LCtx); - const FunctionDecl *FD = X.getAsFunctionDecl(); - - if (GCEnabled) { - // Determine if the object's reference count was pushed to zero. - assert(!PrevV.hasSameState(CurrV) && "The state should have changed."); - - os << "In GC mode a call to '" << *FD - << "' decrements an object's retain count and registers the " - "object with the garbage collector. "; - - if (CurrV.getKind() == RefVal::Released) { - assert(CurrV.getCount() == 0); - os << "Since it now has a 0 retain count the object can be " - "automatically collected by the garbage collector."; - } - else - os << "An object must have a 0 retain count to be garbage collected. " - "After this call its retain count is +" << CurrV.getCount() - << '.'; - } - else - os << "When GC is not enabled a call to '" << *FD - << "' has no effect on its argument."; - - // Nothing more to say. - break; - } - // Determine if the typestate has changed. if (!PrevV.hasSameState(CurrV)) switch (CurrV.getKind()) { @@ -2178,12 +2048,6 @@ CFRefReportVisitor::VisitNode(const ExplodedNode *N, const ExplodedNode *PrevN, if (unsigned Count = CurrV.getCount()) os << " The object now has a +" << Count << " retain count."; - if (PrevV.getKind() == RefVal::Released) { - assert(GCEnabled && CurrV.getCount() > 0); - os << " The object is not eligible for garbage collection until " - "the retain count reaches 0 again."; - } - break; case RefVal::Released: @@ -2211,26 +2075,6 @@ CFRefReportVisitor::VisitNode(const ExplodedNode *N, const ExplodedNode *PrevN, default: return nullptr; } - - // Emit any remaining diagnostics for the argument effects (if any). - for (SmallVectorImpl<ArgEffect>::iterator I=AEffects.begin(), - E=AEffects.end(); I != E; ++I) { - - // A bunch of things have alternate behavior under GC. - if (GCEnabled) - switch (*I) { - default: break; - case Autorelease: - os << "In GC mode an 'autorelease' has no effect."; - continue; - case IncRefMsg: - os << "In GC mode the 'retain' message has no effect."; - continue; - case DecRefMsg: - os << "In GC mode the 'release' message has no effect."; - continue; - } - } } while (0); if (os.str().empty()) @@ -2437,14 +2281,6 @@ CFRefLeakReportVisitor::getEndPath(BugReporterContext &BRC, } } } - else if (RV->getKind() == RefVal::ErrorGCLeakReturned) { - const ObjCMethodDecl &MD = cast<ObjCMethodDecl>(EndN->getCodeDecl()); - os << " and returned from method '" << MD.getSelector().getAsString() - << "' is potentially leaked when using garbage collection. Callers " - "of this method do not expect a returned object with a +1 retain " - "count since they expect the object to be managed by the garbage " - "collector"; - } else os << " is not referenced later in this execution path and has a retain " "count of +" << RV->getCount(); @@ -2512,15 +2348,12 @@ void CFRefLeakReport::deriveAllocLocation(CheckerContext &Ctx,SymbolRef sym) { UniqueingDecl = AllocNode->getLocationContext()->getDecl(); } -void CFRefLeakReport::createDescription(CheckerContext &Ctx, bool GCEnabled, +void CFRefLeakReport::createDescription(CheckerContext &Ctx, bool IncludeAllocationLine) { assert(Location.isValid() && UniqueingDecl && UniqueingLocation.isValid()); Description.clear(); llvm::raw_string_ostream os(Description); - os << "Potential leak "; - if (GCEnabled) - os << "(when using garbage collection) "; - os << "of an object"; + os << "Potential leak of an object"; Optional<std::string> RegionDescription = describeRegion(AllocBinding); if (RegionDescription) { @@ -2533,19 +2366,19 @@ void CFRefLeakReport::createDescription(CheckerContext &Ctx, bool GCEnabled, } CFRefLeakReport::CFRefLeakReport(CFRefBug &D, const LangOptions &LOpts, - bool GCEnabled, const SummaryLogTy &Log, + const SummaryLogTy &Log, ExplodedNode *n, SymbolRef sym, CheckerContext &Ctx, bool IncludeAllocationLine) - : CFRefReport(D, LOpts, GCEnabled, Log, n, sym, false) { + : CFRefReport(D, LOpts, Log, n, sym, false) { deriveAllocLocation(Ctx, sym); if (!AllocBinding) deriveParamLocation(Ctx, sym); - createDescription(Ctx, GCEnabled, IncludeAllocationLine); + createDescription(Ctx, IncludeAllocationLine); - addVisitor(llvm::make_unique<CFRefLeakReportVisitor>(sym, GCEnabled, Log)); + addVisitor(llvm::make_unique<CFRefLeakReportVisitor>(sym, Log)); } //===----------------------------------------------------------------------===// @@ -2571,10 +2404,9 @@ class RetainCountChecker eval::Assume, eval::Call > { mutable std::unique_ptr<CFRefBug> useAfterRelease, releaseNotOwned; - mutable std::unique_ptr<CFRefBug> deallocGC, deallocNotOwned; + mutable std::unique_ptr<CFRefBug> deallocNotOwned; mutable std::unique_ptr<CFRefBug> overAutorelease, returnNotOwnedForOwned; mutable std::unique_ptr<CFRefBug> leakWithinFunction, leakAtReturn; - mutable std::unique_ptr<CFRefBug> leakWithinFunctionGC, leakAtReturnGC; typedef llvm::DenseMap<SymbolRef, const CheckerProgramPointTag *> SymbolTagMap; @@ -2582,7 +2414,6 @@ class RetainCountChecker mutable SymbolTagMap DeadSymbolTags; mutable std::unique_ptr<RetainSummaryManager> Summaries; - mutable std::unique_ptr<RetainSummaryManager> SummariesGC; mutable SummaryLogTy SummaryLog; mutable bool ShouldResetSummaryLog; @@ -2633,72 +2464,31 @@ public: ShouldResetSummaryLog = !SummaryLog.empty(); } - CFRefBug *getLeakWithinFunctionBug(const LangOptions &LOpts, - bool GCEnabled) const { - if (GCEnabled) { - if (!leakWithinFunctionGC) - leakWithinFunctionGC.reset(new Leak(this, "Leak of object when using " - "garbage collection")); - return leakWithinFunctionGC.get(); - } else { - if (!leakWithinFunction) { - if (LOpts.getGC() == LangOptions::HybridGC) { - leakWithinFunction.reset(new Leak(this, - "Leak of object when not using " - "garbage collection (GC) in " - "dual GC/non-GC code")); - } else { - leakWithinFunction.reset(new Leak(this, "Leak")); - } - } - return leakWithinFunction.get(); - } + CFRefBug *getLeakWithinFunctionBug(const LangOptions &LOpts) const { + if (!leakWithinFunction) + leakWithinFunction.reset(new Leak(this, "Leak")); + return leakWithinFunction.get(); } - CFRefBug *getLeakAtReturnBug(const LangOptions &LOpts, bool GCEnabled) const { - if (GCEnabled) { - if (!leakAtReturnGC) - leakAtReturnGC.reset(new Leak(this, - "Leak of returned object when using " - "garbage collection")); - return leakAtReturnGC.get(); - } else { - if (!leakAtReturn) { - if (LOpts.getGC() == LangOptions::HybridGC) { - leakAtReturn.reset(new Leak(this, - "Leak of returned object when not using " - "garbage collection (GC) in dual " - "GC/non-GC code")); - } else { - leakAtReturn.reset(new Leak(this, "Leak of returned object")); - } - } + CFRefBug *getLeakAtReturnBug(const LangOptions &LOpts) const { + if (!leakAtReturn) + leakAtReturn.reset(new Leak(this, "Leak of returned object")); return leakAtReturn.get(); - } } - RetainSummaryManager &getSummaryManager(ASTContext &Ctx, - bool GCEnabled) const { + RetainSummaryManager &getSummaryManager(ASTContext &Ctx) const { // FIXME: We don't support ARC being turned on and off during one analysis. // (nor, for that matter, do we support changing ASTContexts) bool ARCEnabled = (bool)Ctx.getLangOpts().ObjCAutoRefCount; - if (GCEnabled) { - if (!SummariesGC) - SummariesGC.reset(new RetainSummaryManager(Ctx, true, ARCEnabled)); - else - assert(SummariesGC->isARCEnabled() == ARCEnabled); - return *SummariesGC; - } else { - if (!Summaries) - Summaries.reset(new RetainSummaryManager(Ctx, false, ARCEnabled)); - else - assert(Summaries->isARCEnabled() == ARCEnabled); - return *Summaries; - } + if (!Summaries) + Summaries.reset(new RetainSummaryManager(Ctx, ARCEnabled)); + else + assert(Summaries->isARCEnabled() == ARCEnabled); + return *Summaries; } RetainSummaryManager &getSummaryManager(CheckerContext &C) const { - return getSummaryManager(C.getASTContext(), C.isObjCGCEnabled()); + return getSummaryManager(C.getASTContext()); } void printState(raw_ostream &Out, ProgramStateRef State, @@ -3177,7 +2967,6 @@ void RetainCountChecker::checkSummary(const RetainSummary &Summ, break; } - case RetEffect::GCNotOwnedSymbol: case RetEffect::NotOwnedSymbol: { const Expr *Ex = CallOrMsg.getOriginExpr(); SymbolRef Sym = CallOrMsg.getReturnValue().getAsSymbol(); @@ -3217,12 +3006,7 @@ ProgramStateRef RetainCountChecker::updateSymbol(ProgramStateRef state, SymbolRef sym, RefVal V, ArgEffect E, RefVal::Kind &hasErr, CheckerContext &C) const { - // In GC mode [... release] and [... retain] do nothing. - // In ARC mode they shouldn't exist at all, but we just ignore them. - bool IgnoreRetainMsg = C.isObjCGCEnabled(); - if (!IgnoreRetainMsg) - IgnoreRetainMsg = (bool)C.getASTContext().getLangOpts().ObjCAutoRefCount; - + bool IgnoreRetainMsg = (bool)C.getASTContext().getLangOpts().ObjCAutoRefCount; switch (E) { default: break; @@ -3230,18 +3014,15 @@ RetainCountChecker::updateSymbol(ProgramStateRef state, SymbolRef sym, E = IgnoreRetainMsg ? DoNothing : IncRef; break; case DecRefMsg: - E = IgnoreRetainMsg ? DoNothing : DecRef; + E = IgnoreRetainMsg ? DoNothing: DecRef; break; case DecRefMsgAndStopTrackingHard: E = IgnoreRetainMsg ? StopTracking : DecRefAndStopTrackingHard; break; - case MakeCollectable: - E = C.isObjCGCEnabled() ? DecRef : DoNothing; - break; } // Handle all use-after-releases. - if (!C.isObjCGCEnabled() && V.getKind() == RefVal::Released) { + if (V.getKind() == RefVal::Released) { V = V ^ RefVal::ErrorUseAfterRelease; hasErr = V.getKind(); return setRefBinding(state, sym, V); @@ -3250,9 +3031,8 @@ RetainCountChecker::updateSymbol(ProgramStateRef state, SymbolRef sym, switch (E) { case DecRefMsg: case IncRefMsg: - case MakeCollectable: case DecRefMsgAndStopTrackingHard: - llvm_unreachable("DecRefMsg/IncRefMsg/MakeCollectable already converted"); + llvm_unreachable("DecRefMsg/IncRefMsg already converted"); case UnretainedOutParameter: case RetainedOutParameter: @@ -3260,13 +3040,6 @@ RetainCountChecker::updateSymbol(ProgramStateRef state, SymbolRef sym, "not have ref state."); case Dealloc: - // Any use of -dealloc in GC is *bad*. - if (C.isObjCGCEnabled()) { - V = V ^ RefVal::ErrorDeallocGC; - hasErr = V.getKind(); - break; - } - switch (V.getKind()) { default: llvm_unreachable("Invalid RefVal state for an explicit dealloc."); @@ -3294,8 +3067,6 @@ RetainCountChecker::updateSymbol(ProgramStateRef state, SymbolRef sym, return state; case Autorelease: - if (C.isObjCGCEnabled()) - return state; // Update the autorelease counts. V = V.autorelease(); break; @@ -3312,11 +3083,6 @@ RetainCountChecker::updateSymbol(ProgramStateRef state, SymbolRef sym, case RefVal::NotOwned: V = V + 1; break; - case RefVal::Released: - // Non-GC cases are handled above. - assert(C.isObjCGCEnabled()); - V = (V ^ RefVal::Owned) + 1; - break; } break; @@ -3361,13 +3127,6 @@ RetainCountChecker::updateSymbol(ProgramStateRef state, SymbolRef sym, hasErr = V.getKind(); } break; - - case RefVal::Released: - // Non-GC cases are handled above. - assert(C.isObjCGCEnabled()); - V = V ^ RefVal::ErrorUseAfterRelease; - hasErr = V.getKind(); - break; } break; } @@ -3407,11 +3166,6 @@ void RetainCountChecker::processNonLeakError(ProgramStateRef St, releaseNotOwned.reset(new BadRelease(this)); BT = releaseNotOwned.get(); break; - case RefVal::ErrorDeallocGC: - if (!deallocGC) - deallocGC.reset(new DeallocGC(this)); - BT = deallocGC.get(); - break; case RefVal::ErrorDeallocNotOwned: if (!deallocNotOwned) deallocNotOwned.reset(new DeallocNotOwned(this)); @@ -3421,7 +3175,7 @@ void RetainCountChecker::processNonLeakError(ProgramStateRef St, assert(BT); auto report = std::unique_ptr<BugReport>( - new CFRefReport(*BT, C.getASTContext().getLangOpts(), C.isObjCGCEnabled(), + new CFRefReport(*BT, C.getASTContext().getLangOpts(), SummaryLog, N, Sym)); report->addRange(ErrorRange); C.emitReport(std::move(report)); @@ -3443,7 +3197,7 @@ bool RetainCountChecker::evalCall(const CallExpr *CE, CheckerContext &C) const { return false; // For now, we're only handling the functions that return aliases of their - // arguments: CFRetain and CFMakeCollectable (and their families). + // arguments: CFRetain (and its families). // Eventually we should add other functions we can model entirely, // such as CFRelease, which don't invalidate their arguments or globals. if (CE->getNumArgs() != 1) @@ -3460,19 +3214,14 @@ bool RetainCountChecker::evalCall(const CallExpr *CE, CheckerContext &C) const { bool hasTrustedImplementationAnnotation = false; QualType ResultTy = CE->getCallReturnType(C.getASTContext()); - if (ResultTy->isObjCIdType()) { - // Handle: id NSMakeCollectable(CFTypeRef) - canEval = II->isStr("NSMakeCollectable"); - } else if (ResultTy->isPointerType()) { + if (ResultTy->isPointerType()) { // Handle: (CF|CG|CV)Retain // CFAutorelease - // CFMakeCollectable - // It's okay to be a little sloppy here (CGMakeCollectable doesn't exist). + // It's okay to be a little sloppy here. if (cocoa::isRefType(ResultTy, "CF", FName) || cocoa::isRefType(ResultTy, "CG", FName) || cocoa::isRefType(ResultTy, "CV", FName)) { - canEval = isRetain(FD, FName) || isAutorelease(FD, FName) || - isMakeCollectable(FD, FName); + canEval = isRetain(FD, FName) || isAutorelease(FD, FName); } else { if (FD->getDefinition()) { canEval = isTrustedReferenceCountImplementation(FD->getDefinition()); @@ -3641,18 +3390,9 @@ void RetainCountChecker::checkReturnWithRetEffect(const ReturnStmt *S, if (X.isReturnedOwned() && X.getCount() == 0) { if (RE.getKind() != RetEffect::NoRet) { bool hasError = false; - if (C.isObjCGCEnabled() && RE.getObjKind() == RetEffect::ObjC) { - // Things are more complicated with garbage collection. If the - // returned object is suppose to be an Objective-C object, we have - // a leak (as the caller expects a GC'ed object) because no - // method should return ownership unless it returns a CF object. - hasError = true; - X = X ^ RefVal::ErrorGCLeakReturned; - } - else if (!RE.isOwned()) { - // Either we are using GC and the returned object is a CF type - // or we aren't using GC. In either case, we expect that the - // enclosing method is expected to return ownership. + if (!RE.isOwned()) { + // The returning type is a CF, we expect the enclosing method should + // return ownership. hasError = true; X = X ^ RefVal::ErrorLeakReturned; } @@ -3665,9 +3405,8 @@ void RetainCountChecker::checkReturnWithRetEffect(const ReturnStmt *S, ExplodedNode *N = C.addTransition(state, Pred, &ReturnOwnLeakTag); if (N) { const LangOptions &LOpts = C.getASTContext().getLangOpts(); - bool GCEnabled = C.isObjCGCEnabled(); C.emitReport(std::unique_ptr<BugReport>(new CFRefLeakReport( - *getLeakAtReturnBug(LOpts, GCEnabled), LOpts, GCEnabled, + *getLeakAtReturnBug(LOpts), LOpts, SummaryLog, N, Sym, C, IncludeAllocationLine))); } } @@ -3695,7 +3434,7 @@ void RetainCountChecker::checkReturnWithRetEffect(const ReturnStmt *S, C.emitReport(std::unique_ptr<BugReport>(new CFRefReport( *returnNotOwnedForOwned, C.getASTContext().getLangOpts(), - C.isObjCGCEnabled(), SummaryLog, N, Sym))); + SummaryLog, N, Sym))); } } } @@ -3839,7 +3578,6 @@ RetainCountChecker::handleAutoreleaseCounts(ProgramStateRef state, if (!ACnt) return state; - assert(!Ctx.isObjCGCEnabled() && "Autorelease counts in GC mode?"); unsigned Cnt = V.getCount(); // FIXME: Handle sending 'autorelease' to already released object. @@ -3899,7 +3637,7 @@ RetainCountChecker::handleAutoreleaseCounts(ProgramStateRef state, const LangOptions &LOpts = Ctx.getASTContext().getLangOpts(); Ctx.emitReport(std::unique_ptr<BugReport>( - new CFRefReport(*overAutorelease, LOpts, /* GCEnabled = */ false, + new CFRefReport(*overAutorelease, LOpts, SummaryLog, N, Sym, os.str()))); } @@ -3947,13 +3685,12 @@ RetainCountChecker::processLeaks(ProgramStateRef state, I = Leaked.begin(), E = Leaked.end(); I != E; ++I) { const LangOptions &LOpts = Ctx.getASTContext().getLangOpts(); - bool GCEnabled = Ctx.isObjCGCEnabled(); - CFRefBug *BT = Pred ? getLeakWithinFunctionBug(LOpts, GCEnabled) - : getLeakAtReturnBug(LOpts, GCEnabled); + CFRefBug *BT = Pred ? getLeakWithinFunctionBug(LOpts) + : getLeakAtReturnBug(LOpts); assert(BT && "BugType not initialized."); Ctx.emitReport(std::unique_ptr<BugReport>( - new CFRefLeakReport(*BT, LOpts, GCEnabled, SummaryLog, N, *I, Ctx, + new CFRefLeakReport(*BT, LOpts, SummaryLog, N, *I, Ctx, IncludeAllocationLine))); } } @@ -4130,7 +3867,7 @@ namespace objc_retain { #define createCallEffect(D, KIND)\ ASTContext &Ctx = D->getASTContext();\ LangOptions L = Ctx.getLangOpts();\ - RetainSummaryManager M(Ctx, L.GCOnly, L.ObjCAutoRefCount);\ + RetainSummaryManager M(Ctx, L.ObjCAutoRefCount);\ const RetainSummary *S = M.get ## KIND ## Summary(D);\ CallEffects CE(S->getRetEffect());\ CE.Receiver = S->getReceiverEffect();\ diff --git a/clang/test/Analysis/CFDateGC.m b/clang/test/Analysis/CFDateGC.m deleted file mode 100644 index 714e213f957..00000000000 --- a/clang/test/Analysis/CFDateGC.m +++ /dev/null @@ -1,85 +0,0 @@ -// RUN: %clang_analyze_cc1 -analyzer-checker=core,osx.cocoa.RetainCount -analyzer-store=region -verify -fobjc-gc %s -Wno-implicit-function-declaration - -//===----------------------------------------------------------------------===// -// The following code is reduced using delta-debugging from -// Foundation.h and CoreFoundation.h (Mac OS X). -// -// It includes the basic definitions for the test cases below. -// Not directly including [Core]Foundation.h directly makes this test case -// both svelte and portable to non-Mac platforms. -//===----------------------------------------------------------------------===// - -typedef const void * CFTypeRef; -void CFRelease(CFTypeRef cf); -CFTypeRef CFRetain(CFTypeRef cf); -CFTypeRef CFMakeCollectable(CFTypeRef cf); -typedef const struct __CFAllocator * CFAllocatorRef; -typedef double CFTimeInterval; -typedef CFTimeInterval CFAbsoluteTime; -typedef const struct __CFDate * CFDateRef; -extern CFDateRef CFDateCreate(CFAllocatorRef allocator, CFAbsoluteTime at); -extern CFAbsoluteTime CFDateGetAbsoluteTime(CFDateRef theDate); -typedef struct objc_object {} *id; -typedef signed char BOOL; -static __inline__ __attribute__((always_inline)) id NSMakeCollectable(CFTypeRef cf) { return 0; } -@protocol NSObject - (BOOL)isEqual:(id)object; -- (oneway void)release; -- (id)retain; -@end -@class NSArray; - -//===----------------------------------------------------------------------===// -// Test cases. -//===----------------------------------------------------------------------===// - -CFAbsoluteTime CFAbsoluteTimeGetCurrent(); - -CFAbsoluteTime f1_use_after_release() { - CFAbsoluteTime t = CFAbsoluteTimeGetCurrent(); - CFDateRef date = CFDateCreate(0, t); - CFRetain(date); - [NSMakeCollectable(date) release]; - CFDateGetAbsoluteTime(date); // no-warning - CFRelease(date); - t = CFDateGetAbsoluteTime(date); // expected-warning{{Reference-counted object is used after it is released}} - return t; -} - -// The following two test cases verifies that CFMakeCollectable is a no-op -// in non-GC mode and a "release" in GC mode. -CFAbsoluteTime f2_use_after_release() { - CFAbsoluteTime t = CFAbsoluteTimeGetCurrent(); - CFDateRef date = CFDateCreate(0, t); - CFRetain(date); - [(id) CFMakeCollectable(date) release]; - CFDateGetAbsoluteTime(date); // no-warning - CFRelease(date); - t = CFDateGetAbsoluteTime(date); // expected-warning{{Reference-counted object is used after it is released}} - return t; -} - -CFAbsoluteTime f2_noleak() { - CFAbsoluteTime t = CFAbsoluteTimeGetCurrent(); - CFDateRef date = CFDateCreate(0, t); - CFRetain(date); - [(id) CFMakeCollectable(date) release]; - CFDateGetAbsoluteTime(date); // no-warning - t = CFDateGetAbsoluteTime(date); // no-warning - CFRelease(date); // no-warning - return t; -} - -void f3_leak_with_gc() { - CFDateRef date = CFDateCreate(0, CFAbsoluteTimeGetCurrent()); // expected-warning 2 {{leak}} - [[(id) date retain] release]; -} - -// The following test case verifies that we "stop tracking" a retained object -// when it is passed as an argument to an implicitly defined function. -CFAbsoluteTime f4() { - CFAbsoluteTime t = CFAbsoluteTimeGetCurrent(); - CFDateRef date = CFDateCreate(0, t); - CFRetain(date); - some_implicitly_defined_function_stop_tracking(date); // no-warning - return t; -} diff --git a/clang/test/Analysis/Inputs/expected-plists/retain-release-path-notes-gc.m.plist b/clang/test/Analysis/Inputs/expected-plists/retain-release-path-notes-gc.m.plist deleted file mode 100644 index fde520d08aa..00000000000 --- a/clang/test/Analysis/Inputs/expected-plists/retain-release-path-notes-gc.m.plist +++ /dev/null @@ -1,1172 +0,0 @@ - <key>diagnostics</key> - <array> - <dict> - <key>path</key> - <array> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>43</integer> - <key>col</key><integer>22</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>43</integer> - <key>col</key><integer>22</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>43</integer> - <key>col</key><integer>40</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>Call to function 'CFCreateSomething' returns a Core Foundation object of type CFTypeRef with a +1 retain count. Core Foundation objects are not automatically garbage collected</string> - <key>message</key> - <string>Call to function 'CFCreateSomething' returns a Core Foundation object of type CFTypeRef with a +1 retain count. Core Foundation objects are not automatically garbage collected</string> - </dict> - <dict> - <key>kind</key><string>control</string> - <key>edges</key> - <array> - <dict> - <key>start</key> - <array> - <dict> - <key>line</key><integer>43</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>43</integer> - <key>col</key><integer>11</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <key>end</key> - <array> - <dict> - <key>line</key><integer>44</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>44</integer> - <key>col</key><integer>8</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </dict> - </array> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>44</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>44</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>44</integer> - <key>col</key><integer>8</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1</string> - <key>message</key> - <string>Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1</string> - </dict> - </array> - <key>description</key><string>Potential leak (when using garbage collection) of an object stored into 'leaked'</string> - <key>category</key><string>Memory (Core Foundation/Objective-C)</string> - <key>type</key><string>Leak of object when using garbage collection</string> - <key>check_name</key><string>osx.cocoa.RetainCount</string> - <!-- This hash is experimental and going to change! --> - <key>issue_hash_content_of_line_in_context</key><string>487197d1f3d333a1fb4d7610b6d852df</string> - <key>issue_context_kind</key><string>function</string> - <key>issue_context</key><string>creationViaCFCreate</string> - <key>issue_hash_function_offset</key><string>1</string> - <key>location</key> - <dict> - <key>line</key><integer>44</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - </dict> - <dict> - <key>path</key> - <array> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>48</integer> - <key>col</key><integer>22</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>48</integer> - <key>col</key><integer>22</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>48</integer> - <key>col</key><integer>40</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>Call to function 'CFCreateSomething' returns a Core Foundation object of type CFTypeRef with a +1 retain count. Core Foundation objects are not automatically garbage collected</string> - <key>message</key> - <string>Call to function 'CFCreateSomething' returns a Core Foundation object of type CFTypeRef with a +1 retain count. Core Foundation objects are not automatically garbage collected</string> - </dict> - <dict> - <key>kind</key><string>control</string> - <key>edges</key> - <array> - <dict> - <key>start</key> - <array> - <dict> - <key>line</key><integer>48</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>48</integer> - <key>col</key><integer>11</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <key>end</key> - <array> - <dict> - <key>line</key><integer>49</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>49</integer> - <key>col</key><integer>10</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </dict> - </array> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>49</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>49</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>49</integer> - <key>col</key><integer>18</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <array> - <dict> - <key>line</key><integer>49</integer> - <key>col</key><integer>12</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>49</integer> - <key>col</key><integer>17</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>Reference count incremented. The object now has a +2 retain count</string> - <key>message</key> - <string>Reference count incremented. The object now has a +2 retain count</string> - </dict> - <dict> - <key>kind</key><string>control</string> - <key>edges</key> - <array> - <dict> - <key>start</key> - <array> - <dict> - <key>line</key><integer>49</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>49</integer> - <key>col</key><integer>10</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <key>end</key> - <array> - <dict> - <key>line</key><integer>50</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>50</integer> - <key>col</key><integer>19</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </dict> - </array> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>50</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>50</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>50</integer> - <key>col</key><integer>27</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <array> - <dict> - <key>line</key><integer>50</integer> - <key>col</key><integer>21</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>50</integer> - <key>col</key><integer>26</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>In GC mode a call to 'CFMakeCollectable' decrements an object's retain count and registers the object with the garbage collector. An object must have a 0 retain count to be garbage collected. After this call its retain count is +1</string> - <key>message</key> - <string>In GC mode a call to 'CFMakeCollectable' decrements an object's retain count and registers the object with the garbage collector. An object must have a 0 retain count to be garbage collected. After this call its retain count is +1</string> - </dict> - <dict> - <key>kind</key><string>control</string> - <key>edges</key> - <array> - <dict> - <key>start</key> - <array> - <dict> - <key>line</key><integer>50</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>50</integer> - <key>col</key><integer>19</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <key>end</key> - <array> - <dict> - <key>line</key><integer>51</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>51</integer> - <key>col</key><integer>19</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </dict> - </array> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>51</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>51</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>51</integer> - <key>col</key><integer>27</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <array> - <dict> - <key>line</key><integer>51</integer> - <key>col</key><integer>21</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>51</integer> - <key>col</key><integer>26</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>In GC mode a call to 'NSMakeCollectable' decrements an object's retain count and registers the object with the garbage collector. Since it now has a 0 retain count the object can be automatically collected by the garbage collector</string> - <key>message</key> - <string>In GC mode a call to 'NSMakeCollectable' decrements an object's retain count and registers the object with the garbage collector. Since it now has a 0 retain count the object can be automatically collected by the garbage collector</string> - </dict> - <dict> - <key>kind</key><string>control</string> - <key>edges</key> - <array> - <dict> - <key>start</key> - <array> - <dict> - <key>line</key><integer>51</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>51</integer> - <key>col</key><integer>19</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <key>end</key> - <array> - <dict> - <key>line</key><integer>52</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>52</integer> - <key>col</key><integer>10</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </dict> - </array> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>52</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>52</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>52</integer> - <key>col</key><integer>18</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <array> - <dict> - <key>line</key><integer>52</integer> - <key>col</key><integer>12</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>52</integer> - <key>col</key><integer>17</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>Reference count incremented. The object now has a +1 retain count. The object is not eligible for garbage collection until the retain count reaches 0 again</string> - <key>message</key> - <string>Reference count incremented. The object now has a +1 retain count. The object is not eligible for garbage collection until the retain count reaches 0 again</string> - </dict> - <dict> - <key>kind</key><string>control</string> - <key>edges</key> - <array> - <dict> - <key>start</key> - <array> - <dict> - <key>line</key><integer>52</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>52</integer> - <key>col</key><integer>10</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <key>end</key> - <array> - <dict> - <key>line</key><integer>53</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>53</integer> - <key>col</key><integer>8</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </dict> - </array> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>53</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>53</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>53</integer> - <key>col</key><integer>8</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1</string> - <key>message</key> - <string>Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1</string> - </dict> - </array> - <key>description</key><string>Potential leak (when using garbage collection) of an object stored into 'leaked'</string> - <key>category</key><string>Memory (Core Foundation/Objective-C)</string> - <key>type</key><string>Leak of object when using garbage collection</string> - <key>check_name</key><string>osx.cocoa.RetainCount</string> - <!-- This hash is experimental and going to change! --> - <key>issue_hash_content_of_line_in_context</key><string>4f71073d5e7f2546564c1614dfc95420</string> - <key>issue_context_kind</key><string>function</string> - <key>issue_context</key><string>makeCollectable</string> - <key>issue_hash_function_offset</key><string>1</string> - <key>location</key> - <dict> - <key>line</key><integer>53</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - </dict> - <dict> - <key>path</key> - <array> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>57</integer> - <key>col</key><integer>15</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>57</integer> - <key>col</key><integer>15</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>57</integer> - <key>col</key><integer>37</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>Method returns an instance of NSObject with a +0 retain count</string> - <key>message</key> - <string>Method returns an instance of NSObject with a +0 retain count</string> - </dict> - <dict> - <key>kind</key><string>control</string> - <key>edges</key> - <array> - <dict> - <key>start</key> - <array> - <dict> - <key>line</key><integer>57</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>57</integer> - <key>col</key><integer>4</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <key>end</key> - <array> - <dict> - <key>line</key><integer>58</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>58</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </dict> - </array> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>58</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>58</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>58</integer> - <key>col</key><integer>17</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <array> - <dict> - <key>line</key><integer>58</integer> - <key>col</key><integer>4</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>58</integer> - <key>col</key><integer>9</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>In GC mode the 'retain' message has no effect</string> - <key>message</key> - <string>In GC mode the 'retain' message has no effect</string> - </dict> - <dict> - <key>kind</key><string>control</string> - <key>edges</key> - <array> - <dict> - <key>start</key> - <array> - <dict> - <key>line</key><integer>58</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>58</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <key>end</key> - <array> - <dict> - <key>line</key><integer>59</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>59</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </dict> - </array> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>59</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>59</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>59</integer> - <key>col</key><integer>18</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <array> - <dict> - <key>line</key><integer>59</integer> - <key>col</key><integer>4</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>59</integer> - <key>col</key><integer>9</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>In GC mode the 'release' message has no effect</string> - <key>message</key> - <string>In GC mode the 'release' message has no effect</string> - </dict> - <dict> - <key>kind</key><string>control</string> - <key>edges</key> - <array> - <dict> - <key>start</key> - <array> - <dict> - <key>line</key><integer>59</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>59</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <key>end</key> - <array> - <dict> - <key>line</key><integer>60</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>60</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </dict> - </array> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>60</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>60</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>60</integer> - <key>col</key><integer>22</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <array> - <dict> - <key>line</key><integer>60</integer> - <key>col</key><integer>4</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>60</integer> - <key>col</key><integer>9</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>In GC mode an 'autorelease' has no effect</string> - <key>message</key> - <string>In GC mode an 'autorelease' has no effect</string> - </dict> - <dict> - <key>kind</key><string>control</string> - <key>edges</key> - <array> - <dict> - <key>start</key> - <array> - <dict> - <key>line</key><integer>60</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>60</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <key>end</key> - <array> - <dict> - <key>line</key><integer>61</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>61</integer> - <key>col</key><integer>11</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </dict> - </array> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>61</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>61</integer> - <key>col</key><integer>13</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>61</integer> - <key>col</key><integer>29</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>Incorrect decrement of the reference count of an object that is not owned at this point by the caller</string> - <key>message</key> - <string>Incorrect decrement of the reference count of an object that is not owned at this point by the caller</string> - </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>type</key><string>Bad release</string> - <key>check_name</key><string>osx.cocoa.RetainCount</string> - <!-- This hash is experimental and going to change! --> - <key>issue_hash_content_of_line_in_context</key><string>3d18c66bf99e8cd2938e8c63c345f6ea</string> - <key>issue_context_kind</key><string>function</string> - <key>issue_context</key><string>retainReleaseIgnored</string> - <key>issue_hash_function_offset</key><string>5</string> - <key>location</key> - <dict> - <key>line</key><integer>61</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - </dict> - <dict> - <key>path</key> - <array> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>66</integer> - <key>col</key><integer>20</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>66</integer> - <key>col</key><integer>20</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>66</integer> - <key>col</key><integer>38</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>Call to function 'CFCreateSomething' returns a Core Foundation object of type CFTypeRef with a +1 retain count. Core Foundation objects are not automatically garbage collected</string> - <key>message</key> - <string>Call to function 'CFCreateSomething' returns a Core Foundation object of type CFTypeRef with a +1 retain count. Core Foundation objects are not automatically garbage collected</string> - </dict> - <dict> - <key>kind</key><string>control</string> - <key>edges</key> - <array> - <dict> - <key>start</key> - <array> - <dict> - <key>line</key><integer>66</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>66</integer> - <key>col</key><integer>4</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <key>end</key> - <array> - <dict> - <key>line</key><integer>67</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>67</integer> - <key>col</key><integer>8</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </dict> - </array> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>67</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>67</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>67</integer> - <key>col</key><integer>15</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <array> - <dict> - <key>line</key><integer>67</integer> - <key>col</key><integer>10</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>67</integer> - <key>col</key><integer>15</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>Object returned to caller as an owning reference (single retain count transferred to caller)</string> - <key>message</key> - <string>Object returned to caller as an owning reference (single retain count transferred to caller)</string> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>67</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>67</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>67</integer> - <key>col</key><integer>15</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>Object leaked: object allocated and stored into 'object' and returned from method 'getViolation' is potentially leaked when using garbage collection. Callers of this method do not expect a returned object with a +1 retain count since they expect the object to be managed by the garbage collector</string> - <key>message</key> - <string>Object leaked: object allocated and stored into 'object' and returned from method 'getViolation' is potentially leaked when using garbage collection. Callers of this method do not expect a returned object with a +1 retain count since they expect the object to be managed by the garbage collector</string> - </dict> - </array> - <key>description</key><string>Potential leak (when using garbage collection) of an object stored into 'object'</string> - <key>category</key><string>Memory (Core Foundation/Objective-C)</string> - <key>type</key><string>Leak of returned object when using garbage collection</string> - <key>check_name</key><string>osx.cocoa.RetainCount</string> - <!-- This hash is experimental and going to change! --> - <key>issue_hash_content_of_line_in_context</key><string>d012b4dfd7d763f06cdb53f8b5708275</string> - <key>issue_context_kind</key><string>Objective-C method</string> - <key>issue_context</key><string>getViolation</string> - <key>issue_hash_function_offset</key><string>1</string> - <key>location</key> - <dict> - <key>line</key><integer>67</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - </dict> - <dict> - <key>path</key> - <array> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>71</integer> - <key>col</key><integer>20</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>71</integer> - <key>col</key><integer>20</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>71</integer> - <key>col</key><integer>38</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>Call to function 'CFCreateSomething' returns a Core Foundation object of type CFTypeRef with a +1 retain count. Core Foundation objects are not automatically garbage collected</string> - <key>message</key> - <string>Call to function 'CFCreateSomething' returns a Core Foundation object of type CFTypeRef with a +1 retain count. Core Foundation objects are not automatically garbage collected</string> - </dict> - <dict> - <key>kind</key><string>control</string> - <key>edges</key> - <array> - <dict> - <key>start</key> - <array> - <dict> - <key>line</key><integer>71</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>71</integer> - <key>col</key><integer>4</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <key>end</key> - <array> - <dict> - <key>line</key><integer>72</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>72</integer> - <key>col</key><integer>8</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </dict> - </array> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>72</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>72</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>72</integer> - <key>col</key><integer>15</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <array> - <dict> - <key>line</key><integer>72</integer> - <key>col</key><integer>10</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>72</integer> - <key>col</key><integer>15</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>Object returned to caller as an owning reference (single retain count transferred to caller)</string> - <key>message</key> - <string>Object returned to caller as an owning reference (single retain count transferred to caller)</string> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>72</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>72</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>72</integer> - <key>col</key><integer>15</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>Object leaked: object allocated and stored into 'object' and returned from method 'copyViolation' is potentially leaked when using garbage collection. Callers of this method do not expect a returned object with a +1 retain count since they expect the object to be managed by the garbage collector</string> - <key>message</key> - <string>Object leaked: object allocated and stored into 'object' and returned from method 'copyViolation' is potentially leaked when using garbage collection. Callers of this method do not expect a returned object with a +1 retain count since they expect the object to be managed by the garbage collector</string> - </dict> - </array> - <key>description</key><string>Potential leak (when using garbage collection) of an object stored into 'object'</string> - <key>category</key><string>Memory (Core Foundation/Objective-C)</string> - <key>type</key><string>Leak of returned object when using garbage collection</string> - <key>check_name</key><string>osx.cocoa.RetainCount</string> - <!-- This hash is experimental and going to change! --> - <key>issue_hash_content_of_line_in_context</key><string>b241509266f9d666b8335e0ee2f45adf</string> - <key>issue_context_kind</key><string>Objective-C method</string> - <key>issue_context</key><string>copyViolation</string> - <key>issue_hash_function_offset</key><string>1</string> - <key>location</key> - <dict> - <key>line</key><integer>72</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - </dict> - </array> -</dict> -</plist> diff --git a/clang/test/Analysis/Inputs/expected-plists/retain-release-path-notes.m.plist b/clang/test/Analysis/Inputs/expected-plists/retain-release-path-notes.m.plist index 62321805bf4..d102e3b45a9 100644 --- a/clang/test/Analysis/Inputs/expected-plists/retain-release-path-notes.m.plist +++ b/clang/test/Analysis/Inputs/expected-plists/retain-release-path-notes.m.plist @@ -7,7 +7,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>47</integer> + <key>line</key><integer>44</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -15,12 +15,12 @@ <array> <array> <dict> - <key>line</key><integer>47</integer> + <key>line</key><integer>44</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>47</integer> + <key>line</key><integer>44</integer> <key>col</key><integer>37</integer> <key>file</key><integer>0</integer> </dict> @@ -40,12 +40,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>47</integer> + <key>line</key><integer>44</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>47</integer> + <key>line</key><integer>44</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -53,12 +53,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>48</integer> + <key>line</key><integer>45</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>48</integer> + <key>line</key><integer>45</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -70,7 +70,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>48</integer> + <key>line</key><integer>45</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -78,12 +78,12 @@ <array> <array> <dict> - <key>line</key><integer>48</integer> + <key>line</key><integer>45</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>48</integer> + <key>line</key><integer>45</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -107,7 +107,7 @@ <key>issue_hash_function_offset</key><string>1</string> <key>location</key> <dict> - <key>line</key><integer>48</integer> + <key>line</key><integer>45</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -119,7 +119,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>52</integer> + <key>line</key><integer>49</integer> <key>col</key><integer>22</integer> <key>file</key><integer>0</integer> </dict> @@ -127,12 +127,12 @@ <array> <array> <dict> - <key>line</key><integer>52</integer> + <key>line</key><integer>49</integer> <key>col</key><integer>22</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>52</integer> + <key>line</key><integer>49</integer> <key>col</key><integer>40</integer> <key>file</key><integer>0</integer> </dict> @@ -152,12 +152,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>52</integer> + <key>line</key><integer>49</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>52</integer> + <key>line</key><integer>49</integer> <key>col</key><integer>11</integer> <key>file</key><integer>0</integer> </dict> @@ -165,12 +165,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>53</integer> + <key>line</key><integer>50</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>53</integer> + <key>line</key><integer>50</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -182,7 +182,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>53</integer> + <key>line</key><integer>50</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -190,12 +190,12 @@ <array> <array> <dict> - <key>line</key><integer>53</integer> + <key>line</key><integer>50</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>53</integer> + <key>line</key><integer>50</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -219,7 +219,7 @@ <key>issue_hash_function_offset</key><string>1</string> <key>location</key> <dict> - <key>line</key><integer>53</integer> + <key>line</key><integer>50</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -231,7 +231,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>57</integer> + <key>line</key><integer>54</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -239,12 +239,12 @@ <array> <array> <dict> - <key>line</key><integer>57</integer> + <key>line</key><integer>54</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>57</integer> + <key>line</key><integer>54</integer> <key>col</key><integer>35</integer> <key>file</key><integer>0</integer> </dict> @@ -264,12 +264,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>57</integer> + <key>line</key><integer>54</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>57</integer> + <key>line</key><integer>54</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -277,12 +277,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>58</integer> + <key>line</key><integer>55</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>58</integer> + <key>line</key><integer>55</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -294,7 +294,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>58</integer> + <key>line</key><integer>55</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -302,24 +302,24 @@ <array> <array> <dict> - <key>line</key><integer>58</integer> + <key>line</key><integer>55</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>58</integer> + <key>line</key><integer>55</integer> <key>col</key><integer>17</integer> <key>file</key><integer>0</integer> </dict> </array> <array> <dict> - <key>line</key><integer>58</integer> + <key>line</key><integer>55</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>58</integer> + <key>line</key><integer>55</integer> <key>col</key><integer>9</integer> <key>file</key><integer>0</integer> </dict> @@ -339,12 +339,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>58</integer> + <key>line</key><integer>55</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>58</integer> + <key>line</key><integer>55</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -352,12 +352,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>59</integer> + <key>line</key><integer>56</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>59</integer> + <key>line</key><integer>56</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -369,7 +369,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>59</integer> + <key>line</key><integer>56</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -377,24 +377,24 @@ <array> <array> <dict> - <key>line</key><integer>59</integer> + <key>line</key><integer>56</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>59</integer> + <key>line</key><integer>56</integer> <key>col</key><integer>17</integer> <key>file</key><integer>0</integer> </dict> </array> <array> <dict> - <key>line</key><integer>59</integer> + <key>line</key><integer>56</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>59</integer> + <key>line</key><integer>56</integer> <key>col</key><integer>9</integer> <key>file</key><integer>0</integer> </dict> @@ -414,12 +414,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>59</integer> + <key>line</key><integer>56</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>59</integer> + <key>line</key><integer>56</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -427,12 +427,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>60</integer> + <key>line</key><integer>57</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>60</integer> + <key>line</key><integer>57</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -444,7 +444,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>60</integer> + <key>line</key><integer>57</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -452,24 +452,24 @@ <array> <array> <dict> - <key>line</key><integer>60</integer> + <key>line</key><integer>57</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>60</integer> + <key>line</key><integer>57</integer> <key>col</key><integer>18</integer> <key>file</key><integer>0</integer> </dict> </array> <array> <dict> - <key>line</key><integer>60</integer> + <key>line</key><integer>57</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>60</integer> + <key>line</key><integer>57</integer> <key>col</key><integer>9</integer> <key>file</key><integer>0</integer> </dict> @@ -489,12 +489,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>60</integer> + <key>line</key><integer>57</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>60</integer> + <key>line</key><integer>57</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -502,12 +502,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>61</integer> + <key>line</key><integer>58</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>61</integer> + <key>line</key><integer>58</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -519,7 +519,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>61</integer> + <key>line</key><integer>58</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -527,12 +527,12 @@ <array> <array> <dict> - <key>line</key><integer>61</integer> + <key>line</key><integer>58</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>61</integer> + <key>line</key><integer>58</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -556,7 +556,7 @@ <key>issue_hash_function_offset</key><string>1</string> <key>location</key> <dict> - <key>line</key><integer>61</integer> + <key>line</key><integer>58</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -568,7 +568,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>65</integer> + <key>line</key><integer>62</integer> <key>col</key><integer>19</integer> <key>file</key><integer>0</integer> </dict> @@ -576,12 +576,12 @@ <array> <array> <dict> - <key>line</key><integer>65</integer> + <key>line</key><integer>62</integer> <key>col</key><integer>19</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>65</integer> + <key>line</key><integer>62</integer> <key>col</key><integer>31</integer> <key>file</key><integer>0</integer> </dict> @@ -601,12 +601,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>65</integer> + <key>line</key><integer>62</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>65</integer> + <key>line</key><integer>62</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -614,12 +614,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>63</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>63</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -631,7 +631,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>63</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -639,24 +639,24 @@ <array> <array> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>63</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>63</integer> <key>col</key><integer>17</integer> <key>file</key><integer>0</integer> </dict> </array> <array> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>63</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>63</integer> <key>col</key><integer>9</integer> <key>file</key><integer>0</integer> </dict> @@ -676,12 +676,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>63</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>63</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -689,12 +689,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>67</integer> + <key>line</key><integer>64</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>67</integer> + <key>line</key><integer>64</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -706,7 +706,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>67</integer> + <key>line</key><integer>64</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -714,12 +714,12 @@ <array> <array> <dict> - <key>line</key><integer>67</integer> + <key>line</key><integer>64</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>67</integer> + <key>line</key><integer>64</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -743,7 +743,7 @@ <key>issue_hash_function_offset</key><string>1</string> <key>location</key> <dict> - <key>line</key><integer>67</integer> + <key>line</key><integer>64</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -755,7 +755,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>71</integer> + <key>line</key><integer>68</integer> <key>col</key><integer>22</integer> <key>file</key><integer>0</integer> </dict> @@ -763,12 +763,12 @@ <array> <array> <dict> - <key>line</key><integer>71</integer> + <key>line</key><integer>68</integer> <key>col</key><integer>22</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>71</integer> + <key>line</key><integer>68</integer> <key>col</key><integer>37</integer> <key>file</key><integer>0</integer> </dict> @@ -788,12 +788,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>71</integer> + <key>line</key><integer>68</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>71</integer> + <key>line</key><integer>68</integer> <key>col</key><integer>11</integer> <key>file</key><integer>0</integer> </dict> @@ -801,12 +801,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>72</integer> + <key>line</key><integer>69</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>72</integer> + <key>line</key><integer>69</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> @@ -818,7 +818,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>72</integer> + <key>line</key><integer>69</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -826,24 +826,24 @@ <array> <array> <dict> - <key>line</key><integer>72</integer> + <key>line</key><integer>69</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>72</integer> + <key>line</key><integer>69</integer> <key>col</key><integer>18</integer> <key>file</key><integer>0</integer> </dict> </array> <array> <dict> - <key>line</key><integer>72</integer> + <key>line</key><integer>69</integer> <key>col</key><integer>12</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>72</integer> + <key>line</key><integer>69</integer> <key>col</key><integer>17</integer> <key>file</key><integer>0</integer> </dict> @@ -863,12 +863,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>72</integer> + <key>line</key><integer>69</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>72</integer> + <key>line</key><integer>69</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> @@ -876,12 +876,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>73</integer> + <key>line</key><integer>70</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>73</integer> + <key>line</key><integer>70</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -893,7 +893,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>73</integer> + <key>line</key><integer>70</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -901,12 +901,12 @@ <array> <array> <dict> - <key>line</key><integer>73</integer> + <key>line</key><integer>70</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>73</integer> + <key>line</key><integer>70</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -930,7 +930,7 @@ <key>issue_hash_function_offset</key><string>1</string> <key>location</key> <dict> - <key>line</key><integer>73</integer> + <key>line</key><integer>70</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -942,7 +942,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>77</integer> + <key>line</key><integer>74</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -950,12 +950,12 @@ <array> <array> <dict> - <key>line</key><integer>77</integer> + <key>line</key><integer>74</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>77</integer> + <key>line</key><integer>74</integer> <key>col</key><integer>37</integer> <key>file</key><integer>0</integer> </dict> @@ -975,12 +975,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>77</integer> + <key>line</key><integer>74</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>77</integer> + <key>line</key><integer>74</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -988,12 +988,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>78</integer> + <key>line</key><integer>75</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>78</integer> + <key>line</key><integer>75</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1005,7 +1005,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>78</integer> + <key>line</key><integer>75</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1013,24 +1013,24 @@ <array> <array> <dict> - <key>line</key><integer>78</integer> + <key>line</key><integer>75</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>78</integer> + <key>line</key><integer>75</integer> <key>col</key><integer>18</integer> <key>file</key><integer>0</integer> </dict> </array> <array> <dict> - <key>line</key><integer>78</integer> + <key>line</key><integer>75</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>78</integer> + <key>line</key><integer>75</integer> <key>col</key><integer>9</integer> <key>file</key><integer>0</integer> </dict> @@ -1050,12 +1050,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>78</integer> + <key>line</key><integer>75</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>78</integer> + <key>line</key><integer>75</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1063,12 +1063,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>79</integer> + <key>line</key><integer>76</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>79</integer> + <key>line</key><integer>76</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1080,7 +1080,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>79</integer> + <key>line</key><integer>76</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1088,12 +1088,12 @@ <array> <array> <dict> - <key>line</key><integer>79</integer> + <key>line</key><integer>76</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>79</integer> + <key>line</key><integer>76</integer> <key>col</key><integer>9</integer> <key>file</key><integer>0</integer> </dict> @@ -1117,7 +1117,7 @@ <key>issue_hash_function_offset</key><string>3</string> <key>location</key> <dict> - <key>line</key><integer>79</integer> + <key>line</key><integer>76</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1129,7 +1129,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>83</integer> + <key>line</key><integer>80</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -1137,12 +1137,12 @@ <array> <array> <dict> - <key>line</key><integer>83</integer> + <key>line</key><integer>80</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>83</integer> + <key>line</key><integer>80</integer> <key>col</key><integer>37</integer> <key>file</key><integer>0</integer> </dict> @@ -1162,12 +1162,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>83</integer> + <key>line</key><integer>80</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>83</integer> + <key>line</key><integer>80</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -1175,12 +1175,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>84</integer> + <key>line</key><integer>81</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>84</integer> + <key>line</key><integer>81</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1192,7 +1192,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>84</integer> + <key>line</key><integer>81</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1200,24 +1200,24 @@ <array> <array> <dict> - <key>line</key><integer>84</integer> + <key>line</key><integer>81</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>84</integer> + <key>line</key><integer>81</integer> <key>col</key><integer>18</integer> <key>file</key><integer>0</integer> </dict> </array> <array> <dict> - <key>line</key><integer>84</integer> + <key>line</key><integer>81</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>84</integer> + <key>line</key><integer>81</integer> <key>col</key><integer>9</integer> <key>file</key><integer>0</integer> </dict> @@ -1237,12 +1237,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>84</integer> + <key>line</key><integer>81</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>84</integer> + <key>line</key><integer>81</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1250,12 +1250,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>85</integer> + <key>line</key><integer>82</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>85</integer> + <key>line</key><integer>82</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1267,7 +1267,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>85</integer> + <key>line</key><integer>82</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1275,12 +1275,12 @@ <array> <array> <dict> - <key>line</key><integer>85</integer> + <key>line</key><integer>82</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>85</integer> + <key>line</key><integer>82</integer> <key>col</key><integer>9</integer> <key>file</key><integer>0</integer> </dict> @@ -1304,7 +1304,7 @@ <key>issue_hash_function_offset</key><string>3</string> <key>location</key> <dict> - <key>line</key><integer>85</integer> + <key>line</key><integer>82</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1316,7 +1316,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>89</integer> + <key>line</key><integer>86</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -1324,12 +1324,12 @@ <array> <array> <dict> - <key>line</key><integer>89</integer> + <key>line</key><integer>86</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>89</integer> + <key>line</key><integer>86</integer> <key>col</key><integer>37</integer> <key>file</key><integer>0</integer> </dict> @@ -1349,12 +1349,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>89</integer> + <key>line</key><integer>86</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>89</integer> + <key>line</key><integer>86</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -1362,12 +1362,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>90</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>90</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1379,7 +1379,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>90</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1387,24 +1387,24 @@ <array> <array> <dict> - <key>line</key><integer>90</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>90</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>22</integer> <key>file</key><integer>0</integer> </dict> </array> <array> <dict> - <key>line</key><integer>90</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>90</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>9</integer> <key>file</key><integer>0</integer> </dict> @@ -1424,12 +1424,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>90</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>90</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1437,12 +1437,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>91</integer> + <key>line</key><integer>88</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>91</integer> + <key>line</key><integer>88</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1454,7 +1454,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>91</integer> + <key>line</key><integer>88</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1462,24 +1462,24 @@ <array> <array> <dict> - <key>line</key><integer>91</integer> + <key>line</key><integer>88</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>91</integer> + <key>line</key><integer>88</integer> <key>col</key><integer>22</integer> <key>file</key><integer>0</integer> </dict> </array> <array> <dict> - <key>line</key><integer>91</integer> + <key>line</key><integer>88</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>91</integer> + <key>line</key><integer>88</integer> <key>col</key><integer>9</integer> <key>file</key><integer>0</integer> </dict> @@ -1499,12 +1499,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>91</integer> + <key>line</key><integer>88</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>91</integer> + <key>line</key><integer>88</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1512,12 +1512,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>92</integer> + <key>line</key><integer>89</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>92</integer> + <key>line</key><integer>89</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -1529,7 +1529,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>92</integer> + <key>line</key><integer>89</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1537,12 +1537,12 @@ <array> <array> <dict> - <key>line</key><integer>92</integer> + <key>line</key><integer>89</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>92</integer> + <key>line</key><integer>89</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -1566,7 +1566,7 @@ <key>issue_hash_function_offset</key><string>4</string> <key>location</key> <dict> - <key>line</key><integer>92</integer> + <key>line</key><integer>89</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1578,7 +1578,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>96</integer> + <key>line</key><integer>93</integer> <key>col</key><integer>19</integer> <key>file</key><integer>0</integer> </dict> @@ -1586,12 +1586,12 @@ <array> <array> <dict> - <key>line</key><integer>96</integer> + <key>line</key><integer>93</integer> <key>col</key><integer>19</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>96</integer> + <key>line</key><integer>93</integer> <key>col</key><integer>31</integer> <key>file</key><integer>0</integer> </dict> @@ -1611,12 +1611,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>96</integer> + <key>line</key><integer>93</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>96</integer> + <key>line</key><integer>93</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -1624,12 +1624,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>97</integer> + <key>line</key><integer>94</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>97</integer> + <key>line</key><integer>94</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1641,7 +1641,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>97</integer> + <key>line</key><integer>94</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1649,24 +1649,24 @@ <array> <array> <dict> - <key>line</key><integer>97</integer> + <key>line</key><integer>94</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>97</integer> + <key>line</key><integer>94</integer> <key>col</key><integer>22</integer> <key>file</key><integer>0</integer> </dict> </array> <array> <dict> - <key>line</key><integer>97</integer> + <key>line</key><integer>94</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>97</integer> + <key>line</key><integer>94</integer> <key>col</key><integer>9</integer> <key>file</key><integer>0</integer> </dict> @@ -1686,12 +1686,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>97</integer> + <key>line</key><integer>94</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>97</integer> + <key>line</key><integer>94</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1699,12 +1699,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>98</integer> + <key>line</key><integer>95</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>98</integer> + <key>line</key><integer>95</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -1716,7 +1716,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>98</integer> + <key>line</key><integer>95</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1724,12 +1724,12 @@ <array> <array> <dict> - <key>line</key><integer>98</integer> + <key>line</key><integer>95</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>98</integer> + <key>line</key><integer>95</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -1753,7 +1753,7 @@ <key>issue_hash_function_offset</key><string>3</string> <key>location</key> <dict> - <key>line</key><integer>98</integer> + <key>line</key><integer>95</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1765,7 +1765,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>102</integer> + <key>line</key><integer>99</integer> <key>col</key><integer>22</integer> <key>file</key><integer>0</integer> </dict> @@ -1773,274 +1773,12 @@ <array> <array> <dict> - <key>line</key><integer>102</integer> + <key>line</key><integer>99</integer> <key>col</key><integer>22</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>102</integer> - <key>col</key><integer>40</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>Call to function 'CFCreateSomething' returns a Core Foundation object of type CFTypeRef with a +1 retain count</string> - <key>message</key> - <string>Call to function 'CFCreateSomething' returns a Core Foundation object of type CFTypeRef with a +1 retain count</string> - </dict> - <dict> - <key>kind</key><string>control</string> - <key>edges</key> - <array> - <dict> - <key>start</key> - <array> - <dict> - <key>line</key><integer>102</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>102</integer> - <key>col</key><integer>11</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <key>end</key> - <array> - <dict> - <key>line</key><integer>103</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>103</integer> - <key>col</key><integer>19</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </dict> - </array> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>103</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>103</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>103</integer> - <key>col</key><integer>27</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <array> - <dict> - <key>line</key><integer>103</integer> - <key>col</key><integer>21</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>103</integer> - <key>col</key><integer>26</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>When GC is not enabled a call to 'CFMakeCollectable' has no effect on its argument</string> - <key>message</key> - <string>When GC is not enabled a call to 'CFMakeCollectable' has no effect on its argument</string> - </dict> - <dict> - <key>kind</key><string>control</string> - <key>edges</key> - <array> - <dict> - <key>start</key> - <array> - <dict> - <key>line</key><integer>103</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>103</integer> - <key>col</key><integer>19</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <key>end</key> - <array> - <dict> - <key>line</key><integer>104</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>104</integer> - <key>col</key><integer>19</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </dict> - </array> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>104</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>104</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>104</integer> - <key>col</key><integer>27</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <array> - <dict> - <key>line</key><integer>104</integer> - <key>col</key><integer>21</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>104</integer> - <key>col</key><integer>26</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>When GC is not enabled a call to 'NSMakeCollectable' has no effect on its argument</string> - <key>message</key> - <string>When GC is not enabled a call to 'NSMakeCollectable' has no effect on its argument</string> - </dict> - <dict> - <key>kind</key><string>control</string> - <key>edges</key> - <array> - <dict> - <key>start</key> - <array> - <dict> - <key>line</key><integer>104</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>104</integer> - <key>col</key><integer>19</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <key>end</key> - <array> - <dict> - <key>line</key><integer>105</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>105</integer> - <key>col</key><integer>8</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </dict> - </array> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>105</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>105</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>105</integer> - <key>col</key><integer>8</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1</string> - <key>message</key> - <string>Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1</string> - </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>type</key><string>Leak</string> - <key>check_name</key><string>osx.cocoa.RetainCount</string> - <!-- This hash is experimental and going to change! --> - <key>issue_hash_content_of_line_in_context</key><string>3f08690fae9687c29bb23b7a7cb7995b</string> - <key>issue_context_kind</key><string>function</string> - <key>issue_context</key><string>makeCollectableIgnored</string> - <key>issue_hash_function_offset</key><string>1</string> - <key>location</key> - <dict> - <key>line</key><integer>105</integer> - <key>col</key><integer>3</integer> - <key>file</key><integer>0</integer> - </dict> - </dict> - <dict> - <key>path</key> - <array> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>109</integer> - <key>col</key><integer>22</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>109</integer> - <key>col</key><integer>22</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>109</integer> + <key>line</key><integer>99</integer> <key>col</key><integer>37</integer> <key>file</key><integer>0</integer> </dict> @@ -2060,12 +1798,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>109</integer> + <key>line</key><integer>99</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>109</integer> + <key>line</key><integer>99</integer> <key>col</key><integer>11</integer> <key>file</key><integer>0</integer> </dict> @@ -2073,12 +1811,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>110</integer> + <key>line</key><integer>100</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>110</integer> + <key>line</key><integer>100</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -2090,7 +1828,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>110</integer> + <key>line</key><integer>100</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -2098,24 +1836,24 @@ <array> <array> <dict> - <key>line</key><integer>110</integer> + <key>line</key><integer>100</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>110</integer> + <key>line</key><integer>100</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> </array> <array> <dict> - <key>line</key><integer>110</integer> + <key>line</key><integer>100</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>110</integer> + <key>line</key><integer>100</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -2131,7 +1869,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>110</integer> + <key>line</key><integer>100</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -2139,12 +1877,12 @@ <array> <array> <dict> - <key>line</key><integer>110</integer> + <key>line</key><integer>100</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>110</integer> + <key>line</key><integer>100</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -2168,7 +1906,7 @@ <key>issue_hash_function_offset</key><string>2</string> <key>location</key> <dict> - <key>line</key><integer>110</integer> + <key>line</key><integer>100</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -2180,7 +1918,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>114</integer> + <key>line</key><integer>104</integer> <key>col</key><integer>22</integer> <key>file</key><integer>0</integer> </dict> @@ -2188,12 +1926,12 @@ <array> <array> <dict> - <key>line</key><integer>114</integer> + <key>line</key><integer>104</integer> <key>col</key><integer>22</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>114</integer> + <key>line</key><integer>104</integer> <key>col</key><integer>40</integer> <key>file</key><integer>0</integer> </dict> @@ -2213,12 +1951,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>114</integer> + <key>line</key><integer>104</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>114</integer> + <key>line</key><integer>104</integer> <key>col</key><integer>11</integer> <key>file</key><integer>0</integer> </dict> @@ -2226,12 +1964,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>115</integer> + <key>line</key><integer>105</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>115</integer> + <key>line</key><integer>105</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -2243,7 +1981,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>115</integer> + <key>line</key><integer>105</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -2251,24 +1989,24 @@ <array> <array> <dict> - <key>line</key><integer>115</integer> + <key>line</key><integer>105</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>115</integer> + <key>line</key><integer>105</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> </array> <array> <dict> - <key>line</key><integer>115</integer> + <key>line</key><integer>105</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>115</integer> + <key>line</key><integer>105</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -2284,7 +2022,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>115</integer> + <key>line</key><integer>105</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -2292,12 +2030,12 @@ <array> <array> <dict> - <key>line</key><integer>115</integer> + <key>line</key><integer>105</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>115</integer> + <key>line</key><integer>105</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -2321,7 +2059,7 @@ <key>issue_hash_function_offset</key><string>1</string> <key>location</key> <dict> - <key>line</key><integer>115</integer> + <key>line</key><integer>105</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -2333,7 +2071,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>120</integer> + <key>line</key><integer>110</integer> <key>col</key><integer>20</integer> <key>file</key><integer>0</integer> </dict> @@ -2341,12 +2079,12 @@ <array> <array> <dict> - <key>line</key><integer>120</integer> + <key>line</key><integer>110</integer> <key>col</key><integer>20</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>120</integer> + <key>line</key><integer>110</integer> <key>col</key><integer>32</integer> <key>file</key><integer>0</integer> </dict> @@ -2366,12 +2104,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>120</integer> + <key>line</key><integer>110</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>120</integer> + <key>line</key><integer>110</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -2379,12 +2117,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>121</integer> + <key>line</key><integer>111</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>121</integer> + <key>line</key><integer>111</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -2396,7 +2134,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>121</integer> + <key>line</key><integer>111</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -2404,24 +2142,24 @@ <array> <array> <dict> - <key>line</key><integer>121</integer> + <key>line</key><integer>111</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>121</integer> + <key>line</key><integer>111</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> </array> <array> <dict> - <key>line</key><integer>121</integer> + <key>line</key><integer>111</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>121</integer> + <key>line</key><integer>111</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -2437,7 +2175,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>121</integer> + <key>line</key><integer>111</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -2445,12 +2183,12 @@ <array> <array> <dict> - <key>line</key><integer>121</integer> + <key>line</key><integer>111</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>121</integer> + <key>line</key><integer>111</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -2474,7 +2212,7 @@ <key>issue_hash_function_offset</key><string>2</string> <key>location</key> <dict> - <key>line</key><integer>121</integer> + <key>line</key><integer>111</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -2486,7 +2224,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>125</integer> + <key>line</key><integer>115</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -2494,12 +2232,12 @@ <array> <array> <dict> - <key>line</key><integer>125</integer> + <key>line</key><integer>115</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>125</integer> + <key>line</key><integer>115</integer> <key>col</key><integer>18</integer> <key>file</key><integer>0</integer> </dict> @@ -2519,12 +2257,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>125</integer> + <key>line</key><integer>115</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>125</integer> + <key>line</key><integer>115</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -2532,12 +2270,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>126</integer> + <key>line</key><integer>116</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>126</integer> + <key>line</key><integer>116</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -2549,7 +2287,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>126</integer> + <key>line</key><integer>116</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -2557,24 +2295,24 @@ <array> <array> <dict> - <key>line</key><integer>126</integer> + <key>line</key><integer>116</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>126</integer> + <key>line</key><integer>116</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> </array> <array> <dict> - <key>line</key><integer>126</integer> + <key>line</key><integer>116</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>126</integer> + <key>line</key><integer>116</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -2590,7 +2328,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>126</integer> + <key>line</key><integer>116</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -2598,12 +2336,12 @@ <array> <array> <dict> - <key>line</key><integer>126</integer> + <key>line</key><integer>116</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>126</integer> + <key>line</key><integer>116</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -2627,7 +2365,7 @@ <key>issue_hash_function_offset</key><string>2</string> <key>location</key> <dict> - <key>line</key><integer>126</integer> + <key>line</key><integer>116</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -2639,7 +2377,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>130</integer> + <key>line</key><integer>120</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -2647,12 +2385,12 @@ <array> <array> <dict> - <key>line</key><integer>130</integer> + <key>line</key><integer>120</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>130</integer> + <key>line</key><integer>120</integer> <key>col</key><integer>18</integer> <key>file</key><integer>0</integer> </dict> @@ -2672,12 +2410,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>130</integer> + <key>line</key><integer>120</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>130</integer> + <key>line</key><integer>120</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -2685,12 +2423,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>131</integer> + <key>line</key><integer>121</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>131</integer> + <key>line</key><integer>121</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -2702,7 +2440,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>131</integer> + <key>line</key><integer>121</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -2710,24 +2448,24 @@ <array> <array> <dict> - <key>line</key><integer>131</integer> + <key>line</key><integer>121</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>131</integer> + <key>line</key><integer>121</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> </array> <array> <dict> - <key>line</key><integer>131</integer> + <key>line</key><integer>121</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>131</integer> + <key>line</key><integer>121</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -2743,7 +2481,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>131</integer> + <key>line</key><integer>121</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -2751,12 +2489,12 @@ <array> <array> <dict> - <key>line</key><integer>131</integer> + <key>line</key><integer>121</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>131</integer> + <key>line</key><integer>121</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -2780,7 +2518,7 @@ <key>issue_hash_function_offset</key><string>2</string> <key>location</key> <dict> - <key>line</key><integer>131</integer> + <key>line</key><integer>121</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -2792,7 +2530,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>135</integer> + <key>line</key><integer>125</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -2800,12 +2538,12 @@ <array> <array> <dict> - <key>line</key><integer>135</integer> + <key>line</key><integer>125</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>135</integer> + <key>line</key><integer>125</integer> <key>col</key><integer>32</integer> <key>file</key><integer>0</integer> </dict> @@ -2825,12 +2563,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>135</integer> + <key>line</key><integer>125</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>135</integer> + <key>line</key><integer>125</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -2838,12 +2576,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>136</integer> + <key>line</key><integer>126</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>136</integer> + <key>line</key><integer>126</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -2855,7 +2593,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>136</integer> + <key>line</key><integer>126</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -2863,24 +2601,24 @@ <array> <array> <dict> - <key>line</key><integer>136</integer> + <key>line</key><integer>126</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>136</integer> + <key>line</key><integer>126</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> </array> <array> <dict> - <key>line</key><integer>136</integer> + <key>line</key><integer>126</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>136</integer> + <key>line</key><integer>126</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -2896,7 +2634,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>136</integer> + <key>line</key><integer>126</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -2904,12 +2642,12 @@ <array> <array> <dict> - <key>line</key><integer>136</integer> + <key>line</key><integer>126</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>136</integer> + <key>line</key><integer>126</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -2933,7 +2671,7 @@ <key>issue_hash_function_offset</key><string>1</string> <key>location</key> <dict> - <key>line</key><integer>136</integer> + <key>line</key><integer>126</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -2945,7 +2683,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>140</integer> + <key>line</key><integer>130</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -2953,12 +2691,12 @@ <array> <array> <dict> - <key>line</key><integer>140</integer> + <key>line</key><integer>130</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>140</integer> + <key>line</key><integer>130</integer> <key>col</key><integer>32</integer> <key>file</key><integer>0</integer> </dict> @@ -2978,12 +2716,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>140</integer> + <key>line</key><integer>130</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>140</integer> + <key>line</key><integer>130</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -2991,12 +2729,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>141</integer> + <key>line</key><integer>131</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>141</integer> + <key>line</key><integer>131</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -3008,7 +2746,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>141</integer> + <key>line</key><integer>131</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -3016,24 +2754,24 @@ <array> <array> <dict> - <key>line</key><integer>141</integer> + <key>line</key><integer>131</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>141</integer> + <key>line</key><integer>131</integer> <key>col</key><integer>22</integer> <key>file</key><integer>0</integer> </dict> </array> <array> <dict> - <key>line</key><integer>141</integer> + <key>line</key><integer>131</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>141</integer> + <key>line</key><integer>131</integer> <key>col</key><integer>9</integer> <key>file</key><integer>0</integer> </dict> @@ -3053,12 +2791,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>141</integer> + <key>line</key><integer>131</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>141</integer> + <key>line</key><integer>131</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -3066,12 +2804,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>142</integer> + <key>line</key><integer>132</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>142</integer> + <key>line</key><integer>132</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -3083,7 +2821,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>142</integer> + <key>line</key><integer>132</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -3091,12 +2829,12 @@ <array> <array> <dict> - <key>line</key><integer>142</integer> + <key>line</key><integer>132</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>142</integer> + <key>line</key><integer>132</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -3120,7 +2858,7 @@ <key>issue_hash_function_offset</key><string>3</string> <key>location</key> <dict> - <key>line</key><integer>142</integer> + <key>line</key><integer>132</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -3132,7 +2870,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>170</integer> + <key>line</key><integer>160</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -3140,12 +2878,12 @@ <array> <array> <dict> - <key>line</key><integer>170</integer> + <key>line</key><integer>160</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>170</integer> + <key>line</key><integer>160</integer> <key>col</key><integer>16</integer> <key>file</key><integer>0</integer> </dict> @@ -3165,12 +2903,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>170</integer> + <key>line</key><integer>160</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>170</integer> + <key>line</key><integer>160</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -3178,12 +2916,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>171</integer> + <key>line</key><integer>161</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>171</integer> + <key>line</key><integer>161</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -3195,7 +2933,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>171</integer> + <key>line</key><integer>161</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -3203,12 +2941,12 @@ <array> <array> <dict> - <key>line</key><integer>171</integer> + <key>line</key><integer>161</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>171</integer> + <key>line</key><integer>161</integer> <key>col</key><integer>9</integer> <key>file</key><integer>0</integer> </dict> @@ -3232,7 +2970,7 @@ <key>issue_hash_function_offset</key><string>2</string> <key>location</key> <dict> - <key>line</key><integer>171</integer> + <key>line</key><integer>161</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -3244,7 +2982,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>175</integer> + <key>line</key><integer>165</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -3252,12 +2990,12 @@ <array> <array> <dict> - <key>line</key><integer>175</integer> + <key>line</key><integer>165</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>175</integer> + <key>line</key><integer>165</integer> <key>col</key><integer>18</integer> <key>file</key><integer>0</integer> </dict> @@ -3277,12 +3015,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>175</integer> + <key>line</key><integer>165</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>175</integer> + <key>line</key><integer>165</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -3290,12 +3028,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>176</integer> + <key>line</key><integer>166</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>176</integer> + <key>line</key><integer>166</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -3307,7 +3045,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>176</integer> + <key>line</key><integer>166</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -3315,12 +3053,12 @@ <array> <array> <dict> - <key>line</key><integer>176</integer> + <key>line</key><integer>166</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>176</integer> + <key>line</key><integer>166</integer> <key>col</key><integer>9</integer> <key>file</key><integer>0</integer> </dict> @@ -3344,7 +3082,7 @@ <key>issue_hash_function_offset</key><string>2</string> <key>location</key> <dict> - <key>line</key><integer>176</integer> + <key>line</key><integer>166</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -3356,7 +3094,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>180</integer> + <key>line</key><integer>170</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -3364,12 +3102,12 @@ <array> <array> <dict> - <key>line</key><integer>180</integer> + <key>line</key><integer>170</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>180</integer> + <key>line</key><integer>170</integer> <key>col</key><integer>20</integer> <key>file</key><integer>0</integer> </dict> @@ -3389,12 +3127,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>180</integer> + <key>line</key><integer>170</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>180</integer> + <key>line</key><integer>170</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -3402,12 +3140,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>181</integer> + <key>line</key><integer>171</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>181</integer> + <key>line</key><integer>171</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -3419,7 +3157,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>181</integer> + <key>line</key><integer>171</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -3427,12 +3165,12 @@ <array> <array> <dict> - <key>line</key><integer>181</integer> + <key>line</key><integer>171</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>181</integer> + <key>line</key><integer>171</integer> <key>col</key><integer>9</integer> <key>file</key><integer>0</integer> </dict> @@ -3456,7 +3194,7 @@ <key>issue_hash_function_offset</key><string>2</string> <key>location</key> <dict> - <key>line</key><integer>181</integer> + <key>line</key><integer>171</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -3468,7 +3206,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>185</integer> + <key>line</key><integer>175</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -3476,12 +3214,12 @@ <array> <array> <dict> - <key>line</key><integer>185</integer> + <key>line</key><integer>175</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>185</integer> + <key>line</key><integer>175</integer> <key>col</key><integer>20</integer> <key>file</key><integer>0</integer> </dict> @@ -3501,12 +3239,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>185</integer> + <key>line</key><integer>175</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>185</integer> + <key>line</key><integer>175</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -3514,12 +3252,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>186</integer> + <key>line</key><integer>176</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>186</integer> + <key>line</key><integer>176</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -3531,7 +3269,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>186</integer> + <key>line</key><integer>176</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -3539,12 +3277,12 @@ <array> <array> <dict> - <key>line</key><integer>186</integer> + <key>line</key><integer>176</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>186</integer> + <key>line</key><integer>176</integer> <key>col</key><integer>9</integer> <key>file</key><integer>0</integer> </dict> @@ -3568,7 +3306,7 @@ <key>issue_hash_function_offset</key><string>2</string> <key>location</key> <dict> - <key>line</key><integer>186</integer> + <key>line</key><integer>176</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -3580,7 +3318,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>190</integer> + <key>line</key><integer>180</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -3588,12 +3326,12 @@ <array> <array> <dict> - <key>line</key><integer>190</integer> + <key>line</key><integer>180</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>190</integer> + <key>line</key><integer>180</integer> <key>col</key><integer>27</integer> <key>file</key><integer>0</integer> </dict> @@ -3613,12 +3351,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>190</integer> + <key>line</key><integer>180</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>190</integer> + <key>line</key><integer>180</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -3626,12 +3364,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>191</integer> + <key>line</key><integer>181</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>191</integer> + <key>line</key><integer>181</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -3643,7 +3381,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>191</integer> + <key>line</key><integer>181</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -3651,12 +3389,12 @@ <array> <array> <dict> - <key>line</key><integer>191</integer> + <key>line</key><integer>181</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>191</integer> + <key>line</key><integer>181</integer> <key>col</key><integer>9</integer> <key>file</key><integer>0</integer> </dict> @@ -3680,7 +3418,7 @@ <key>issue_hash_function_offset</key><string>2</string> <key>location</key> <dict> - <key>line</key><integer>191</integer> + <key>line</key><integer>181</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -3696,12 +3434,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>226</integer> + <key>line</key><integer>216</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>226</integer> + <key>line</key><integer>216</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -3709,12 +3447,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>226</integer> + <key>line</key><integer>216</integer> <key>col</key><integer>11</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>226</integer> + <key>line</key><integer>216</integer> <key>col</key><integer>11</integer> <key>file</key><integer>0</integer> </dict> @@ -3726,7 +3464,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>226</integer> + <key>line</key><integer>216</integer> <key>col</key><integer>11</integer> <key>file</key><integer>0</integer> </dict> @@ -3734,12 +3472,12 @@ <array> <array> <dict> - <key>line</key><integer>226</integer> + <key>line</key><integer>216</integer> <key>col</key><integer>11</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>226</integer> + <key>line</key><integer>216</integer> <key>col</key><integer>23</integer> <key>file</key><integer>0</integer> </dict> @@ -3755,7 +3493,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>226</integer> + <key>line</key><integer>216</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> @@ -3763,12 +3501,12 @@ <array> <array> <dict> - <key>line</key><integer>226</integer> + <key>line</key><integer>216</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>226</integer> + <key>line</key><integer>216</integer> <key>col</key><integer>30</integer> <key>file</key><integer>0</integer> </dict> @@ -3784,7 +3522,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>206</integer> + <key>line</key><integer>196</integer> <key>col</key><integer>1</integer> <key>file</key><integer>0</integer> </dict> @@ -3802,12 +3540,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>206</integer> + <key>line</key><integer>196</integer> <key>col</key><integer>1</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>206</integer> + <key>line</key><integer>196</integer> <key>col</key><integer>1</integer> <key>file</key><integer>0</integer> </dict> @@ -3815,12 +3553,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>207</integer> + <key>line</key><integer>197</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>207</integer> + <key>line</key><integer>197</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -3836,12 +3574,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>207</integer> + <key>line</key><integer>197</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>207</integer> + <key>line</key><integer>197</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -3849,12 +3587,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>207</integer> + <key>line</key><integer>197</integer> <key>col</key><integer>7</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>207</integer> + <key>line</key><integer>197</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> @@ -3866,7 +3604,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>207</integer> + <key>line</key><integer>197</integer> <key>col</key><integer>7</integer> <key>file</key><integer>0</integer> </dict> @@ -3874,12 +3612,12 @@ <array> <array> <dict> - <key>line</key><integer>207</integer> + <key>line</key><integer>197</integer> <key>col</key><integer>7</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>207</integer> + <key>line</key><integer>197</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> @@ -3899,12 +3637,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>207</integer> + <key>line</key><integer>197</integer> <key>col</key><integer>7</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>207</integer> + <key>line</key><integer>197</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> @@ -3912,12 +3650,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>209</integer> + <key>line</key><integer>199</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>209</integer> + <key>line</key><integer>199</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> @@ -3929,7 +3667,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>226</integer> + <key>line</key><integer>216</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> @@ -3937,12 +3675,12 @@ <array> <array> <dict> - <key>line</key><integer>226</integer> + <key>line</key><integer>216</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>226</integer> + <key>line</key><integer>216</integer> <key>col</key><integer>30</integer> <key>file</key><integer>0</integer> </dict> @@ -3962,12 +3700,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>226</integer> + <key>line</key><integer>216</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>226</integer> + <key>line</key><integer>216</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> @@ -3975,12 +3713,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>226</integer> + <key>line</key><integer>216</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>226</integer> + <key>line</key><integer>216</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -3992,7 +3730,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>226</integer> + <key>line</key><integer>216</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -4000,12 +3738,12 @@ <array> <array> <dict> - <key>line</key><integer>226</integer> + <key>line</key><integer>216</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>226</integer> + <key>line</key><integer>216</integer> <key>col</key><integer>6</integer> <key>file</key><integer>0</integer> </dict> @@ -4029,7 +3767,7 @@ <key>issue_hash_function_offset</key><string>2</string> <key>location</key> <dict> - <key>line</key><integer>226</integer> + <key>line</key><integer>216</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -4045,12 +3783,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>226</integer> + <key>line</key><integer>216</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>226</integer> + <key>line</key><integer>216</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -4058,12 +3796,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>232</integer> + <key>line</key><integer>222</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>232</integer> + <key>line</key><integer>222</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -4079,12 +3817,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>232</integer> + <key>line</key><integer>222</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>232</integer> + <key>line</key><integer>222</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -4092,12 +3830,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>232</integer> + <key>line</key><integer>222</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>232</integer> + <key>line</key><integer>222</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> @@ -4109,7 +3847,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>232</integer> + <key>line</key><integer>222</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> @@ -4117,12 +3855,12 @@ <array> <array> <dict> - <key>line</key><integer>232</integer> + <key>line</key><integer>222</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>232</integer> + <key>line</key><integer>222</integer> <key>col</key><integer>30</integer> <key>file</key><integer>0</integer> </dict> @@ -4138,7 +3876,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>214</integer> + <key>line</key><integer>204</integer> <key>col</key><integer>1</integer> <key>file</key><integer>0</integer> </dict> @@ -4156,12 +3894,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>214</integer> + <key>line</key><integer>204</integer> <key>col</key><integer>1</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>214</integer> + <key>line</key><integer>204</integer> <key>col</key><integer>1</integer> <key>file</key><integer>0</integer> </dict> @@ -4169,12 +3907,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>215</integer> + <key>line</key><integer>205</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>215</integer> + <key>line</key><integer>205</integer> <key>col</key><integer>6</integer> <key>file</key><integer>0</integer> </dict> @@ -4186,7 +3924,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>215</integer> + <key>line</key><integer>205</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> @@ -4194,12 +3932,12 @@ <array> <array> <dict> - <key>line</key><integer>215</integer> + <key>line</key><integer>205</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>215</integer> + <key>line</key><integer>205</integer> <key>col</key><integer>21</integer> <key>file</key><integer>0</integer> </dict> @@ -4219,12 +3957,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>215</integer> + <key>line</key><integer>205</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>215</integer> + <key>line</key><integer>205</integer> <key>col</key><integer>6</integer> <key>file</key><integer>0</integer> </dict> @@ -4232,12 +3970,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>216</integer> + <key>line</key><integer>206</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>216</integer> + <key>line</key><integer>206</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -4249,7 +3987,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>232</integer> + <key>line</key><integer>222</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> @@ -4257,12 +3995,12 @@ <array> <array> <dict> - <key>line</key><integer>232</integer> + <key>line</key><integer>222</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>232</integer> + <key>line</key><integer>222</integer> <key>col</key><integer>30</integer> <key>file</key><integer>0</integer> </dict> @@ -4282,12 +4020,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>232</integer> + <key>line</key><integer>222</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>232</integer> + <key>line</key><integer>222</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> @@ -4295,12 +4033,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>232</integer> + <key>line</key><integer>222</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>232</integer> + <key>line</key><integer>222</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -4316,12 +4054,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>232</integer> + <key>line</key><integer>222</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>232</integer> + <key>line</key><integer>222</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -4329,12 +4067,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>237</integer> + <key>line</key><integer>227</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>237</integer> + <key>line</key><integer>227</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -4350,12 +4088,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>237</integer> + <key>line</key><integer>227</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>237</integer> + <key>line</key><integer>227</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -4363,12 +4101,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>237</integer> + <key>line</key><integer>227</integer> <key>col</key><integer>11</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>237</integer> + <key>line</key><integer>227</integer> <key>col</key><integer>11</integer> <key>file</key><integer>0</integer> </dict> @@ -4380,7 +4118,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>237</integer> + <key>line</key><integer>227</integer> <key>col</key><integer>11</integer> <key>file</key><integer>0</integer> </dict> @@ -4388,12 +4126,12 @@ <array> <array> <dict> - <key>line</key><integer>237</integer> + <key>line</key><integer>227</integer> <key>col</key><integer>11</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>237</integer> + <key>line</key><integer>227</integer> <key>col</key><integer>23</integer> <key>file</key><integer>0</integer> </dict> @@ -4417,7 +4155,7 @@ <key>issue_hash_function_offset</key><string>8</string> <key>location</key> <dict> - <key>line</key><integer>237</integer> + <key>line</key><integer>227</integer> <key>col</key><integer>11</integer> <key>file</key><integer>0</integer> </dict> @@ -4429,7 +4167,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>247</integer> + <key>line</key><integer>237</integer> <key>col</key><integer>22</integer> <key>file</key><integer>0</integer> </dict> @@ -4437,12 +4175,12 @@ <array> <array> <dict> - <key>line</key><integer>247</integer> + <key>line</key><integer>237</integer> <key>col</key><integer>22</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>247</integer> + <key>line</key><integer>237</integer> <key>col</key><integer>40</integer> <key>file</key><integer>0</integer> </dict> @@ -4462,12 +4200,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>247</integer> + <key>line</key><integer>237</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>247</integer> + <key>line</key><integer>237</integer> <key>col</key><integer>11</integer> <key>file</key><integer>0</integer> </dict> @@ -4475,12 +4213,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>248</integer> + <key>line</key><integer>238</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>248</integer> + <key>line</key><integer>238</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -4492,7 +4230,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>248</integer> + <key>line</key><integer>238</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -4500,24 +4238,24 @@ <array> <array> <dict> - <key>line</key><integer>248</integer> + <key>line</key><integer>238</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>248</integer> + <key>line</key><integer>238</integer> <key>col</key><integer>23</integer> <key>file</key><integer>0</integer> </dict> </array> <array> <dict> - <key>line</key><integer>248</integer> + <key>line</key><integer>238</integer> <key>col</key><integer>17</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>248</integer> + <key>line</key><integer>238</integer> <key>col</key><integer>22</integer> <key>file</key><integer>0</integer> </dict> @@ -4537,12 +4275,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>248</integer> + <key>line</key><integer>238</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>248</integer> + <key>line</key><integer>238</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -4550,12 +4288,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>249</integer> + <key>line</key><integer>239</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>249</integer> + <key>line</key><integer>239</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -4567,7 +4305,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>249</integer> + <key>line</key><integer>239</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -4575,24 +4313,24 @@ <array> <array> <dict> - <key>line</key><integer>249</integer> + <key>line</key><integer>239</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>249</integer> + <key>line</key><integer>239</integer> <key>col</key><integer>23</integer> <key>file</key><integer>0</integer> </dict> </array> <array> <dict> - <key>line</key><integer>249</integer> + <key>line</key><integer>239</integer> <key>col</key><integer>17</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>249</integer> + <key>line</key><integer>239</integer> <key>col</key><integer>22</integer> <key>file</key><integer>0</integer> </dict> @@ -4612,12 +4350,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>249</integer> + <key>line</key><integer>239</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>249</integer> + <key>line</key><integer>239</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -4625,12 +4363,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>250</integer> + <key>line</key><integer>240</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>250</integer> + <key>line</key><integer>240</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -4642,7 +4380,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>250</integer> + <key>line</key><integer>240</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -4650,12 +4388,12 @@ <array> <array> <dict> - <key>line</key><integer>250</integer> + <key>line</key><integer>240</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>250</integer> + <key>line</key><integer>240</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -4679,7 +4417,7 @@ <key>issue_hash_function_offset</key><string>4</string> <key>location</key> <dict> - <key>line</key><integer>250</integer> + <key>line</key><integer>240</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -4691,7 +4429,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>254</integer> + <key>line</key><integer>244</integer> <key>col</key><integer>22</integer> <key>file</key><integer>0</integer> </dict> @@ -4699,12 +4437,12 @@ <array> <array> <dict> - <key>line</key><integer>254</integer> + <key>line</key><integer>244</integer> <key>col</key><integer>22</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>254</integer> + <key>line</key><integer>244</integer> <key>col</key><integer>37</integer> <key>file</key><integer>0</integer> </dict> @@ -4724,12 +4462,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>254</integer> + <key>line</key><integer>244</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>254</integer> + <key>line</key><integer>244</integer> <key>col</key><integer>11</integer> <key>file</key><integer>0</integer> </dict> @@ -4737,12 +4475,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>255</integer> + <key>line</key><integer>245</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>255</integer> + <key>line</key><integer>245</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -4754,7 +4492,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>255</integer> + <key>line</key><integer>245</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -4762,24 +4500,24 @@ <array> <array> <dict> - <key>line</key><integer>255</integer> + <key>line</key><integer>245</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>255</integer> + <key>line</key><integer>245</integer> <key>col</key><integer>23</integer> <key>file</key><integer>0</integer> </dict> </array> <array> <dict> - <key>line</key><integer>255</integer> + <key>line</key><integer>245</integer> <key>col</key><integer>17</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>255</integer> + <key>line</key><integer>245</integer> <key>col</key><integer>22</integer> <key>file</key><integer>0</integer> </dict> @@ -4799,12 +4537,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>255</integer> + <key>line</key><integer>245</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>255</integer> + <key>line</key><integer>245</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -4812,12 +4550,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>256</integer> + <key>line</key><integer>246</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>256</integer> + <key>line</key><integer>246</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -4829,7 +4567,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>256</integer> + <key>line</key><integer>246</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -4837,12 +4575,12 @@ <array> <array> <dict> - <key>line</key><integer>256</integer> + <key>line</key><integer>246</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>256</integer> + <key>line</key><integer>246</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -4866,7 +4604,7 @@ <key>issue_hash_function_offset</key><string>3</string> <key>location</key> <dict> - <key>line</key><integer>256</integer> + <key>line</key><integer>246</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -4878,7 +4616,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>260</integer> + <key>line</key><integer>250</integer> <key>col</key><integer>22</integer> <key>file</key><integer>0</integer> </dict> @@ -4886,12 +4624,12 @@ <array> <array> <dict> - <key>line</key><integer>260</integer> + <key>line</key><integer>250</integer> <key>col</key><integer>22</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>260</integer> + <key>line</key><integer>250</integer> <key>col</key><integer>37</integer> <key>file</key><integer>0</integer> </dict> @@ -4911,12 +4649,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>260</integer> + <key>line</key><integer>250</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>260</integer> + <key>line</key><integer>250</integer> <key>col</key><integer>11</integer> <key>file</key><integer>0</integer> </dict> @@ -4924,12 +4662,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>261</integer> + <key>line</key><integer>251</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>261</integer> + <key>line</key><integer>251</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -4941,7 +4679,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>261</integer> + <key>line</key><integer>251</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -4949,24 +4687,24 @@ <array> <array> <dict> - <key>line</key><integer>261</integer> + <key>line</key><integer>251</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>261</integer> + <key>line</key><integer>251</integer> <key>col</key><integer>23</integer> <key>file</key><integer>0</integer> </dict> </array> <array> <dict> - <key>line</key><integer>261</integer> + <key>line</key><integer>251</integer> <key>col</key><integer>17</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>261</integer> + <key>line</key><integer>251</integer> <key>col</key><integer>22</integer> <key>file</key><integer>0</integer> </dict> @@ -4986,12 +4724,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>261</integer> + <key>line</key><integer>251</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>261</integer> + <key>line</key><integer>251</integer> <key>col</key><integer>15</integer> <key>file</key><integer>0</integer> </dict> @@ -4999,12 +4737,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>262</integer> + <key>line</key><integer>252</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>262</integer> + <key>line</key><integer>252</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -5016,7 +4754,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>262</integer> + <key>line</key><integer>252</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -5024,24 +4762,24 @@ <array> <array> <dict> - <key>line</key><integer>262</integer> + <key>line</key><integer>252</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>262</integer> + <key>line</key><integer>252</integer> <key>col</key><integer>26</integer> <key>file</key><integer>0</integer> </dict> </array> <array> <dict> - <key>line</key><integer>262</integer> + <key>line</key><integer>252</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>262</integer> + <key>line</key><integer>252</integer> <key>col</key><integer>13</integer> <key>file</key><integer>0</integer> </dict> @@ -5061,12 +4799,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>262</integer> + <key>line</key><integer>252</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>262</integer> + <key>line</key><integer>252</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -5074,12 +4812,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>263</integer> + <key>line</key><integer>253</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>263</integer> + <key>line</key><integer>253</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -5091,7 +4829,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>263</integer> + <key>line</key><integer>253</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -5099,12 +4837,12 @@ <array> <array> <dict> - <key>line</key><integer>263</integer> + <key>line</key><integer>253</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>263</integer> + <key>line</key><integer>253</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -5128,11 +4866,11 @@ <key>issue_hash_function_offset</key><string>4</string> <key>location</key> <dict> - <key>line</key><integer>263</integer> + <key>line</key><integer>253</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> </dict> </array> </dict> -</plist> +</plist>
\ No newline at end of file diff --git a/clang/test/Analysis/PR2599.m b/clang/test/Analysis/PR2599.m deleted file mode 100644 index 1c2270e6aa6..00000000000 --- a/clang/test/Analysis/PR2599.m +++ /dev/null @@ -1,63 +0,0 @@ -// RUN: %clang_analyze_cc1 -triple %itanium_abi_triple -analyzer-checker=core,osx.cocoa.RetainCount,alpha.core -analyzer-store=region -fobjc-gc -verify %s - -typedef const void * CFTypeRef; -typedef const struct __CFString * CFStringRef; -typedef const struct __CFAllocator * CFAllocatorRef; -typedef const struct __CFDictionary * CFDictionaryRef; -CFTypeRef CFMakeCollectable(CFTypeRef cf) ; -extern CFStringRef CFStringCreateWithFormat(CFAllocatorRef alloc, CFDictionaryRef formatOptions, CFStringRef format, ...); -typedef signed char BOOL; -typedef unsigned int NSUInteger; -typedef struct _NSZone NSZone; -@class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator; -@protocol NSObject -- (BOOL)isEqual:(id)object; -- (id)autorelease; -@end -@protocol NSCopying -- (id)copyWithZone:(NSZone *)zone; -@end @protocol NSMutableCopying -- (id)mutableCopyWithZone:(NSZone *)zone; -@end -@protocol -NSCoding -- (void)encodeWithCoder:(NSCoder *)aCoder; -@end -@interface NSObject <NSObject> {} -- (id)init; -+ (id)alloc; -@end -enum { NSASCIIStringEncoding = 1, NSNEXTSTEPStringEncoding = 2, NSJapaneseEUCStringEncoding = 3, NSUTF8StringEncoding = 4, NSISOLatin1StringEncoding = 5, NSSymbolStringEncoding = 6, NSNonLossyASCIIStringEncoding = 7, NSShiftJISStringEncoding = 8, NSISOLatin2StringEncoding = 9, NSUnicodeStringEncoding = 10, NSWindowsCP1251StringEncoding = 11, NSWindowsCP1252StringEncoding = 12, NSWindowsCP1253StringEncoding = 13, NSWindowsCP1254StringEncoding = 14, NSWindowsCP1250StringEncoding = 15, NSISO2022JPStringEncoding = 21, NSMacOSRomanStringEncoding = 30, NSUTF16StringEncoding = NSUnicodeStringEncoding, NSUTF16BigEndianStringEncoding = 0x90000100, NSUTF16LittleEndianStringEncoding = 0x94000100, NSUTF32StringEncoding = 0x8c000100, NSUTF32BigEndianStringEncoding = 0x98000100, NSUTF32LittleEndianStringEncoding = 0x9c000100 }; -typedef NSUInteger NSStringEncoding; -@interface NSString : NSObject <NSCopying, NSMutableCopying, NSCoding> -- (NSUInteger)length; -- (id)initWithBytesNoCopy:(void *)bytes length:(NSUInteger)len encoding:(NSStringEncoding)encoding freeWhenDone:(BOOL)freeBuffer; -@end -@interface NSAutoreleasePool : NSObject {} -- (void)drain; -@end -extern NSString * const NSXMLParserErrorDomain ; - -// The actual test case. UTIL_AUTORELEASE_CF_AS_ID is a macro that doesn't -// actually do what it was intended to. - -#define NSSTRINGWRAPPER(bytes,len) \ - [[[NSString alloc] initWithBytesNoCopy: (void*)(bytes) length: (len) encoding: NSUTF8StringEncoding freeWhenDone: (BOOL)0] autorelease] - -#define UTIL_AUTORELEASE_CF_AS_ID(cf) ( (((void*)0) == (cf)) ? ((void*)0) : [(id) CFMakeCollectable( (CFTypeRef) cf) autorelease] ) - -#define UTIL_AUTORELEASE_CF_AS_ID_WITHOUT_TEST(cf) ( [(id) CFMakeCollectable( (CFTypeRef) cf) autorelease] ) - -static char *lorem = "fooBarBaz"; - -void NSLog(NSString *, ...); - -int main (int argc, const char * argv[]) { - NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; - NSString *tmp1 = NSSTRINGWRAPPER(lorem, 6); // no-warning - NSString *tmp2 = UTIL_AUTORELEASE_CF_AS_ID( CFStringCreateWithFormat(((void*)0), ((void*)0), ((CFStringRef) __builtin___CFStringMakeConstantString ("" "lorem: %@" "")), tmp1) ); // expected-warning 2 {{leak}} - NSString *tmp3 = UTIL_AUTORELEASE_CF_AS_ID_WITHOUT_TEST( CFStringCreateWithFormat(((void*)0), ((void*)0), ((CFStringRef) __builtin___CFStringMakeConstantString ("" "lorem: %@" "")), tmp1) ); - NSLog(@"tmp2: %@ tmp3: %@", tmp2, tmp3); - [pool drain]; - return 0; -} diff --git a/clang/test/Analysis/retain-release-gc-only.m b/clang/test/Analysis/retain-release-gc-only.m deleted file mode 100644 index 6305942ac20..00000000000 --- a/clang/test/Analysis/retain-release-gc-only.m +++ /dev/null @@ -1,434 +0,0 @@ -// RUN: %clang_analyze_cc1 -triple %itanium_abi_triple -analyzer-checker=core,osx.cocoa.RetainCount,osx.cocoa.NSAutoreleasePool -analyzer-store=region -fobjc-gc-only -fblocks -verify -Wno-objc-root-class %s - -//===----------------------------------------------------------------------===// -// Header stuff. -//===----------------------------------------------------------------------===// - -typedef unsigned int __darwin_natural_t; -typedef unsigned long uintptr_t; -typedef unsigned int uint32_t; -typedef unsigned long long uint64_t; -typedef unsigned int UInt32; -typedef signed long CFIndex; -typedef struct { - CFIndex location; - CFIndex length; -} CFRange; -static __inline__ __attribute__((always_inline)) CFRange CFRangeMake(CFIndex loc, CFIndex len) { - CFRange range; - range.location = loc; - range.length = len; - return range; -} -typedef const void * CFTypeRef; -typedef const struct __CFString * CFStringRef; -typedef const struct __CFAllocator * CFAllocatorRef; -extern const CFAllocatorRef kCFAllocatorDefault; -extern CFTypeRef CFRetain(CFTypeRef cf); -extern void CFRelease(CFTypeRef cf); -typedef struct { -} -CFArrayCallBacks; -extern const CFArrayCallBacks kCFTypeArrayCallBacks; -typedef const struct __CFArray * CFArrayRef; -typedef struct __CFArray * CFMutableArrayRef; -extern CFMutableArrayRef CFArrayCreateMutable(CFAllocatorRef allocator, CFIndex capacity, const CFArrayCallBacks *callBacks); -extern const void *CFArrayGetValueAtIndex(CFArrayRef theArray, CFIndex idx); -extern void CFArrayAppendValue(CFMutableArrayRef theArray, const void *value); -typedef struct { -} -CFDictionaryKeyCallBacks; -extern const CFDictionaryKeyCallBacks kCFTypeDictionaryKeyCallBacks; -typedef struct { -} -CFDictionaryValueCallBacks; -extern const CFDictionaryValueCallBacks kCFTypeDictionaryValueCallBacks; -typedef const struct __CFDictionary * CFDictionaryRef; -typedef struct __CFDictionary * CFMutableDictionaryRef; -extern CFMutableDictionaryRef CFDictionaryCreateMutable(CFAllocatorRef allocator, CFIndex capacity, const CFDictionaryKeyCallBacks *keyCallBacks, const CFDictionaryValueCallBacks *valueCallBacks); -typedef UInt32 CFStringEncoding; -enum { -kCFStringEncodingMacRoman = 0, kCFStringEncodingWindowsLatin1 = 0x0500, kCFStringEncodingISOLatin1 = 0x0201, kCFStringEncodingNextStepLatin = 0x0B01, kCFStringEncodingASCII = 0x0600, kCFStringEncodingUnicode = 0x0100, kCFStringEncodingUTF8 = 0x08000100, kCFStringEncodingNonLossyASCII = 0x0BFF , kCFStringEncodingUTF16 = 0x0100, kCFStringEncodingUTF16BE = 0x10000100, kCFStringEncodingUTF16LE = 0x14000100, kCFStringEncodingUTF32 = 0x0c000100, kCFStringEncodingUTF32BE = 0x18000100, kCFStringEncodingUTF32LE = 0x1c000100 }; -extern CFStringRef CFStringCreateWithCString(CFAllocatorRef alloc, const char *cStr, CFStringEncoding encoding); -typedef double CFTimeInterval; -typedef CFTimeInterval CFAbsoluteTime; -extern CFAbsoluteTime CFAbsoluteTimeGetCurrent(void); -typedef const struct __CFDate * CFDateRef; -extern CFDateRef CFDateCreate(CFAllocatorRef allocator, CFAbsoluteTime at); -extern CFAbsoluteTime CFDateGetAbsoluteTime(CFDateRef theDate); -typedef __darwin_natural_t natural_t; -typedef natural_t mach_port_name_t; -typedef mach_port_name_t mach_port_t; -typedef int kern_return_t; -typedef kern_return_t mach_error_t; -enum { -kCFNumberSInt8Type = 1, kCFNumberSInt16Type = 2, kCFNumberSInt32Type = 3, kCFNumberSInt64Type = 4, kCFNumberFloat32Type = 5, kCFNumberFloat64Type = 6, kCFNumberCharType = 7, kCFNumberShortType = 8, kCFNumberIntType = 9, kCFNumberLongType = 10, kCFNumberLongLongType = 11, kCFNumberFloatType = 12, kCFNumberDoubleType = 13, kCFNumberCFIndexType = 14, kCFNumberNSIntegerType = 15, kCFNumberCGFloatType = 16, kCFNumberMaxType = 16 }; -typedef CFIndex CFNumberType; -typedef const struct __CFNumber * CFNumberRef; -extern CFNumberRef CFNumberCreate(CFAllocatorRef allocator, CFNumberType theType, const void *valuePtr); -typedef const struct __CFAttributedString *CFAttributedStringRef; -typedef struct __CFAttributedString *CFMutableAttributedStringRef; -extern CFAttributedStringRef CFAttributedStringCreate(CFAllocatorRef alloc, CFStringRef str, CFDictionaryRef attributes) ; -extern CFMutableAttributedStringRef CFAttributedStringCreateMutableCopy(CFAllocatorRef alloc, CFIndex maxLength, CFAttributedStringRef aStr) ; -extern void CFAttributedStringSetAttribute(CFMutableAttributedStringRef aStr, CFRange range, CFStringRef attrName, CFTypeRef value) ; -typedef signed char BOOL; -typedef unsigned long NSUInteger; -@class NSString, Protocol; -extern void NSLog(NSString *format, ...) __attribute__((format(__NSString__, 1, 2))); -typedef struct _NSZone NSZone; -@class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator; -@protocol NSObject -- (BOOL)isEqual:(id)object; -- (id)retain; -- (oneway void)release; -- (id)autorelease; -- (Class)class; -@end @protocol NSCopying - (id)copyWithZone:(NSZone *)zone; -@end @protocol NSMutableCopying - (id)mutableCopyWithZone:(NSZone *)zone; -@end @protocol NSCoding - (void)encodeWithCoder:(NSCoder *)aCoder; -@end -@interface NSObject <NSObject> {} -+ (id)allocWithZone:(NSZone *)zone; -+ (id)alloc; -- (void)dealloc; -- (oneway void)release; -- (id)copy; -@end -@interface NSObject (NSCoderMethods) -- (id)awakeAfterUsingCoder:(NSCoder *)aDecoder; -@end -extern id NSAllocateObject(Class aClass, NSUInteger extraBytes, NSZone *zone); -typedef struct { -} -NSFastEnumerationState; -@protocol NSFastEnumeration - (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len; -@end @class NSString, NSDictionary; -@interface NSValue : NSObject <NSCopying, NSCoding> - (void)getValue:(void *)value; -@end @interface NSNumber : NSValue - (char)charValue; -- (id)initWithInt:(int)value; -@end @class NSString; -@interface NSArray : NSObject <NSCopying, NSMutableCopying, NSCoding, NSFastEnumeration> -- (NSUInteger)count; -@end -@interface NSArray (NSArrayCreation) -+ (id)array; -+ (id)arrayWithObjects:(const id [])objects count:(NSUInteger)cnt; -@end - @interface NSAutoreleasePool : NSObject { -} -- (void)drain; -- (id)init; -@end extern NSString * const NSBundleDidLoadNotification; -typedef double NSTimeInterval; -@interface NSDate : NSObject <NSCopying, NSCoding> - (NSTimeInterval)timeIntervalSinceReferenceDate; -@end typedef unsigned short unichar; -@interface NSString : NSObject <NSCopying, NSMutableCopying, NSCoding> - (NSUInteger)length; -- ( const char *)UTF8String; -- (id)initWithUTF8String:(const char *)nullTerminatedCString; -+ (id)stringWithUTF8String:(const char *)nullTerminatedCString; -@end @class NSString, NSURL, NSError; -@interface NSData : NSObject <NSCopying, NSMutableCopying, NSCoding> - (NSUInteger)length; -+ (id)dataWithBytesNoCopy:(void *)bytes length:(NSUInteger)length; -+ (id)dataWithBytesNoCopy:(void *)bytes length:(NSUInteger)length freeWhenDone:(BOOL)b; -@end @class NSLocale, NSDate, NSCalendar, NSTimeZone, NSError, NSArray, NSMutableDictionary; -@interface NSDictionary : NSObject <NSCopying, NSMutableCopying, NSCoding, NSFastEnumeration> - (NSUInteger)count; -@end @interface NSMutableDictionary : NSDictionary - (void)removeObjectForKey:(id)aKey; -- (void)setObject:(id)anObject forKey:(id)aKey; -@end @interface NSMutableDictionary (NSMutableDictionaryCreation) + (id)dictionaryWithCapacity:(NSUInteger)numItems; -@end typedef double CGFloat; -struct CGSize { -}; -typedef struct CGSize CGSize; -struct CGRect { -}; -typedef struct CGRect CGRect; -typedef mach_port_t io_object_t; -typedef char io_name_t[128]; -typedef io_object_t io_iterator_t; -typedef io_object_t io_service_t; -typedef struct IONotificationPort * IONotificationPortRef; -typedef void (*IOServiceMatchingCallback)( void * refcon, io_iterator_t iterator ); -io_service_t IOServiceGetMatchingService( mach_port_t masterPort, CFDictionaryRef matching ); -kern_return_t IOServiceGetMatchingServices( mach_port_t masterPort, CFDictionaryRef matching, io_iterator_t * existing ); -kern_return_t IOServiceAddNotification( mach_port_t masterPort, const io_name_t notificationType, CFDictionaryRef matching, mach_port_t wakePort, uintptr_t reference, io_iterator_t * notification ) __attribute__((deprecated)); -kern_return_t IOServiceAddMatchingNotification( IONotificationPortRef notifyPort, const io_name_t notificationType, CFDictionaryRef matching, IOServiceMatchingCallback callback, void * refCon, io_iterator_t * notification ); -CFMutableDictionaryRef IOServiceMatching( const char * name ); -CFMutableDictionaryRef IOServiceNameMatching( const char * name ); -CFMutableDictionaryRef IOBSDNameMatching( mach_port_t masterPort, uint32_t options, const char * bsdName ); -CFMutableDictionaryRef IOOpenFirmwarePathMatching( mach_port_t masterPort, uint32_t options, const char * path ); -CFMutableDictionaryRef IORegistryEntryIDMatching( uint64_t entryID ); -typedef struct __DASession * DASessionRef; -extern DASessionRef DASessionCreate( CFAllocatorRef allocator ); -typedef struct __DADisk * DADiskRef; -extern DADiskRef DADiskCreateFromBSDName( CFAllocatorRef allocator, DASessionRef session, const char * name ); -extern DADiskRef DADiskCreateFromIOMedia( CFAllocatorRef allocator, DASessionRef session, io_service_t media ); -extern CFDictionaryRef DADiskCopyDescription( DADiskRef disk ); -extern DADiskRef DADiskCopyWholeDisk( DADiskRef disk ); -@interface NSTask : NSObject - (id)init; -@end typedef struct CGColorSpace *CGColorSpaceRef; -typedef struct CGImage *CGImageRef; -typedef struct CGLayer *CGLayerRef; -@interface NSResponder : NSObject <NSCoding> { -} -@end @protocol NSAnimatablePropertyContainer - (id)animator; -@end extern NSString *NSAnimationTriggerOrderIn ; -@interface NSView : NSResponder <NSAnimatablePropertyContainer> { -} -@end @protocol NSValidatedUserInterfaceItem - (SEL)action; -@end @protocol NSUserInterfaceValidations - (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)anItem; -@end @class NSDate, NSDictionary, NSError, NSException, NSNotification; -@interface NSApplication : NSResponder <NSUserInterfaceValidations> { -} -@end enum { -NSTerminateCancel = 0, NSTerminateNow = 1, NSTerminateLater = 2 }; -typedef NSUInteger NSApplicationTerminateReply; -@protocol NSApplicationDelegate <NSObject> @optional - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender; -@end @class NSAttributedString, NSEvent, NSFont, NSFormatter, NSImage, NSMenu, NSText, NSView, NSTextView; -@interface NSCell : NSObject <NSCopying, NSCoding> { -} -@end @class NSTextField, NSPanel, NSArray, NSWindow, NSImage, NSButton, NSError; -typedef struct { -} -CVTimeStamp; -@interface CIImage : NSObject <NSCoding, NSCopying> { -} -typedef int CIFormat; -@end enum { -kDAReturnSuccess = 0, kDAReturnError = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x01, kDAReturnBusy = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x02, kDAReturnBadArgument = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x03, kDAReturnExclusiveAccess = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x04, kDAReturnNoResources = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x05, kDAReturnNotFound = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x06, kDAReturnNotMounted = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x07, kDAReturnNotPermitted = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x08, kDAReturnNotPrivileged = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x09, kDAReturnNotReady = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x0A, kDAReturnNotWritable = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x0B, kDAReturnUnsupported = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x0C }; -typedef mach_error_t DAReturn; -typedef const struct __DADissenter * DADissenterRef; -extern DADissenterRef DADissenterCreate( CFAllocatorRef allocator, DAReturn status, CFStringRef string ); -@interface CIContext: NSObject { -} -- (CGImageRef)createCGImage:(CIImage *)im fromRect:(CGRect)r; -- (CGImageRef)createCGImage:(CIImage *)im fromRect:(CGRect)r format:(CIFormat)f colorSpace:(CGColorSpaceRef)cs; -- (CGLayerRef)createCGLayerWithSize:(CGSize)size info:(CFDictionaryRef)d; -@end extern NSString* const QCRendererEventKey; -@protocol QCCompositionRenderer - (NSDictionary*) attributes; -@end @interface QCRenderer : NSObject <QCCompositionRenderer> { -} -- (id) createSnapshotImageOfType:(NSString*)type; -@end extern NSString* const QCViewDidStartRenderingNotification; -@interface QCView : NSView <QCCompositionRenderer> { -} -- (id) createSnapshotImageOfType:(NSString*)type; -@end enum { -ICEXIFOrientation1 = 1, ICEXIFOrientation2 = 2, ICEXIFOrientation3 = 3, ICEXIFOrientation4 = 4, ICEXIFOrientation5 = 5, ICEXIFOrientation6 = 6, ICEXIFOrientation7 = 7, ICEXIFOrientation8 = 8, }; -@class ICDevice; -@protocol ICDeviceDelegate <NSObject> @required - (void)didRemoveDevice:(ICDevice*)device; -@end extern NSString *const ICScannerStatusWarmingUp; -@class ICScannerDevice; -@protocol ICScannerDeviceDelegate <ICDeviceDelegate> @optional - (void)scannerDeviceDidBecomeAvailable:(ICScannerDevice*)scanner; -@end -CFTypeRef CFMakeCollectable(CFTypeRef cf) ; - -static __inline__ __attribute__((always_inline)) id NSMakeCollectable(CFTypeRef -cf) { - return cf ? (id)CFMakeCollectable(cf) : ((void*)0); -} - -//===----------------------------------------------------------------------===// -// Test cases. -//===----------------------------------------------------------------------===// - -void f1() { - CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning - id x = [(id) A autorelease]; - CFRelease((CFMutableArrayRef) x); -} - -void f2() { - CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning{{leak}} - id x = [(id) A retain]; - [x release]; - [x release]; -} - -void f3() { - CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning{{leak}} - CFMakeCollectable(A); - CFRetain(A); -} - -void f3b() { - CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning - CFMakeCollectable(A); -} - - -void f4() { - CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning{{leak}} - NSMakeCollectable(A); - CFRetain(A); -} - -void f4b() { - CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning - NSMakeCollectable(A); -} - -void f5() { - id x = [NSMakeCollectable(CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks)) autorelease]; // no-warning -} - -void f5b() { - id x = [(id) CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks) autorelease]; // expected-warning{{leak}} -} - -// Test return of non-owned objects in contexts where an owned object -// is expected. -@interface TestReturnNotOwnedWhenExpectedOwned -- (NSString*)newString; -- (CFMutableArrayRef)newArray; -@end - -@implementation TestReturnNotOwnedWhenExpectedOwned -- (NSString*)newString { - NSString *s = [NSString stringWithUTF8String:"hello"]; // expected-warning{{Potential leak (when using garbage collection) of an object}} - CFRetain(s); - return s; -} -- (CFMutableArrayRef)newArray{ - return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning -} -@end - -//===----------------------------------------------------------------------===// -// <rdar://problem/6948053> False positive: object substitution during -init* -// methods warns about returning +0 when using -fobjc-gc-only -//===----------------------------------------------------------------------===// - -@interface MyClassRdar6948053 : NSObject -- (id) init; -+ (id) shared; -@end - -@implementation MyClassRdar6948053 -+(id) shared { - return (id) 0; -} -- (id) init -{ - Class myClass = [self class]; - [self release]; - return [[myClass shared] retain]; // no-warning -} -@end - -//===----------------------------------------------------------------------===// -// <rdar://problem/7174400> 'ciContext createCGImage:outputImage fromRect:' returns a retained CF object (not GC'ed)//===----------------------------------------------------------------------===// -//===----------------------------------------------------------------------===// - -void rdar_7174400(QCView *view, QCRenderer *renderer, CIContext *context, - NSString *str, CIImage *img, CGRect rect, - CIFormat form, CGColorSpaceRef cs) { - [view createSnapshotImageOfType:str]; // no-warning - [renderer createSnapshotImageOfType:str]; // no-warning - [context createCGImage:img fromRect:rect]; // expected-warning{{leak}} - [context createCGImage:img fromRect:rect format:form colorSpace:cs]; // expected-warning{{leak}} -} - -//===----------------------------------------------------------------------===// -// <rdar://problem/6250216> Warn against using -[NSAutoreleasePool release] in -// GC mode -//===----------------------------------------------------------------------===// - -void rdar_6250216(void) { - NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; - [pool release]; // expected-warning{{Use -drain instead of -release when using NSAutoreleasePool and garbage collection}} -} - - -//===----------------------------------------------------------------------===// -// <rdar://problem/7407273> Don't crash when analyzing messages sent to blocks -//===----------------------------------------------------------------------===// - -@class RDar7407273; -typedef void (^RDar7407273Block)(RDar7407273 *operation); -void rdar7407273(RDar7407273Block b) { - [b copy]; -} - -//===----------------------------------------------------------------------===// -// Tests of ownership attributes. -//===----------------------------------------------------------------------===// - -@interface TestOwnershipAttr : NSObject -- (NSString*) returnsAnOwnedString __attribute__((ns_returns_retained)); -- (NSString*) returnsAnOwnedCFString __attribute__((cf_returns_retained)); -@end - -void test_attr_1(TestOwnershipAttr *X) { - NSString *str = [X returnsAnOwnedString]; // no-warning -} - -void test_attr_1b(TestOwnershipAttr *X) { - NSString *str = [X returnsAnOwnedCFString]; // expected-warning{{leak}} -} - -@interface MyClassTestCFAttr : NSObject {} -- (NSDate*) returnsCFRetained __attribute__((cf_returns_retained)); -- (NSDate*) alsoReturnsRetained; -- (NSDate*) returnsNSRetained __attribute__((ns_returns_retained)); -@end - -__attribute__((cf_returns_retained)) -CFDateRef returnsRetainedCFDate() { - return CFDateCreate(0, CFAbsoluteTimeGetCurrent()); -} - -@implementation MyClassTestCFAttr -- (NSDate*) returnsCFRetained { - return (NSDate*) returnsRetainedCFDate(); // No leak. -} - -- (NSDate*) alsoReturnsRetained { - return (NSDate*) returnsRetainedCFDate(); // expected-warning{{leak}} -} - -- (NSDate*) returnsNSRetained { - return (NSDate*) returnsRetainedCFDate(); // expected-warning{{leak}} -} -@end - - -#if __has_feature(attribute_ns_consumed) -#define NS_CONSUMED __attribute__((ns_consumed)) -#endif -#if __has_feature(attribute_cf_consumed) -#define CF_CONSUMED __attribute__((cf_consumed)) -#endif - -void consumeAndStopTracking(id NS_CONSUMED obj, void (^callback)(void)); -void CFConsumeAndStopTracking(CFTypeRef CF_CONSUMED obj, void (^callback)(void)); - -void testConsumeAndStopTracking() { - id retained = [@[] retain]; // +0, GC - consumeAndStopTracking(retained, ^{}); // no-warning - - id doubleRetained = [[@[] retain] retain]; // +0, GC - consumeAndStopTracking(doubleRetained, ^{ - [doubleRetained release]; - }); // no-warning - - id unretained = @[]; // +0 - consumeAndStopTracking(unretained, ^{}); // no-warning, GC -} - -void testCFConsumeAndStopTrackingMsg() { - id retained = [@[] retain]; // +0, GC - CFConsumeAndStopTracking((CFTypeRef)retained, ^{}); // expected-warning {{Incorrect decrement of the reference count of an object that is not owned at this point by the caller}} -} - -void testCFConsumeAndStopTracking() { - CFTypeRef retained = returnsRetainedCFDate(); // +1 - CFConsumeAndStopTracking(retained, ^{}); // no-warning - - CFTypeRef doubleRetained = CFRetain(returnsRetainedCFDate()); // +2 - CFConsumeAndStopTracking(doubleRetained, ^{ - CFRelease(doubleRetained); - }); // no-warning - - id unretained = @[]; // +0 - CFConsumeAndStopTracking((CFTypeRef)unretained, ^{}); // expected-warning {{Incorrect decrement of the reference count of an object that is not owned at this point by the caller}} -} diff --git a/clang/test/Analysis/retain-release-path-notes-gc.m b/clang/test/Analysis/retain-release-path-notes-gc.m deleted file mode 100644 index 74137b40e7b..00000000000 --- a/clang/test/Analysis/retain-release-path-notes-gc.m +++ /dev/null @@ -1,75 +0,0 @@ -// RUN: %clang_analyze_cc1 -triple x86_64-apple-darwin10 -analyzer-checker=core,osx.coreFoundation.CFRetainRelease,osx.cocoa.ClassRelease,osx.cocoa.RetainCount -analyzer-store=region -fobjc-gc-only -analyzer-output=text -verify %s -// RUN: %clang_analyze_cc1 -triple x86_64-apple-darwin10 -analyzer-checker=core,osx.coreFoundation.CFRetainRelease,osx.cocoa.ClassRelease,osx.cocoa.RetainCount -analyzer-store=region -fobjc-gc-only -analyzer-output=plist-multi-file %s -o %t.plist -// RUN: tail -n +11 %t.plist | diff -u -w - %S/Inputs/expected-plists/retain-release-path-notes-gc.m.plist - -/*** -This file is for testing the path-sensitive notes for retain/release errors. -Its goal is to have simple branch coverage of any path-based diagnostics, -not to actually check all possible retain/release errors. - -This file is for notes that only appear in a GC-enabled analysis. -Non-specific and ref-count-only notes should go in retain-release-path-notes.m. -***/ - -@interface NSObject -+ (id)alloc; -- (id)init; -- (void)dealloc; - -- (Class)class; - -- (id)retain; -- (void)release; -- (void)autorelease; -@end - -@interface Foo : NSObject -- (id)methodWithValue; -@property(retain) id propertyValue; -@end - -typedef struct CFType *CFTypeRef; -CFTypeRef CFRetain(CFTypeRef); -void CFRelease(CFTypeRef); - -id NSMakeCollectable(CFTypeRef); -CFTypeRef CFMakeCollectable(CFTypeRef); - -CFTypeRef CFCreateSomething(); -CFTypeRef CFGetSomething(); - - -void creationViaCFCreate () { - CFTypeRef leaked = CFCreateSomething(); // expected-note{{Call to function 'CFCreateSomething' returns a Core Foundation object of type CFTypeRef with a +1 retain count. Core Foundation objects are not automatically garbage collected}} - return; // expected-warning{{leak}} expected-note{{Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1}} -} - -void makeCollectable () { - CFTypeRef leaked = CFCreateSomething(); // expected-note{{Call to function 'CFCreateSomething' returns a Core Foundation object of type CFTypeRef with a +1 retain count. Core Foundation objects are not automatically garbage collected}} - CFRetain(leaked); // expected-note{{Reference count incremented. The object now has a +2 retain count}} - CFMakeCollectable(leaked); // expected-note{{In GC mode a call to 'CFMakeCollectable' decrements an object's retain count and registers the object with the garbage collector. An object must have a 0 retain count to be garbage collected. After this call its retain count is +1}} - NSMakeCollectable(leaked); // expected-note{{In GC mode a call to 'NSMakeCollectable' decrements an object's retain count and registers the object with the garbage collector. Since it now has a 0 retain count the object can be automatically collected by the garbage collector}} - CFRetain(leaked); // expected-note{{Reference count incremented. The object now has a +1 retain count. The object is not eligible for garbage collection until the retain count reaches 0 again}} - return; // expected-warning{{leak}} expected-note{{Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1}} -} - -void retainReleaseIgnored () { - id object = [[NSObject alloc] init]; // expected-note{{Method returns an instance of NSObject with a +0 retain count}} - [object retain]; // expected-note{{In GC mode the 'retain' message has no effect}} - [object release]; // expected-note{{In GC mode the 'release' message has no effect}} - [object autorelease]; // expected-note{{In GC mode an 'autorelease' has no effect}} - CFRelease((CFTypeRef)object); // expected-warning{{Incorrect decrement of the reference count of an object that is not owned at this point by the caller}} expected-note{{Incorrect decrement of the reference count of an object that is not owned at this point by the caller}} -} - -@implementation Foo (FundamentalRuleUnderGC) -- (id)getViolation { - id object = (id) CFCreateSomething(); // expected-note{{Call to function 'CFCreateSomething' returns a Core Foundation object of type CFTypeRef with a +1 retain count. Core Foundation objects are not automatically garbage collected}} - return object; // expected-warning{{leak}} expected-note{{Object returned to caller as an owning reference (single retain count transferred to caller)}} expected-note{{Object leaked: object allocated and stored into 'object' and returned from method 'getViolation' is potentially leaked when using garbage collection. Callers of this method do not expect a returned object with a +1 retain count since they expect the object to be managed by the garbage collector}} -} - -- (id)copyViolation { - id object = (id) CFCreateSomething(); // expected-note{{Call to function 'CFCreateSomething' returns a Core Foundation object of type CFTypeRef with a +1 retain count. Core Foundation objects are not automatically garbage collected}} - return object; // expected-warning{{leak}} expected-note{{Object returned to caller as an owning reference (single retain count transferred to caller)}} expected-note{{Object leaked: object allocated and stored into 'object' and returned from method 'copyViolation' is potentially leaked when using garbage collection. Callers of this method do not expect a returned object with a +1 retain count since they expect the object to be managed by the garbage collector}} -} -@end - diff --git a/clang/test/Analysis/retain-release-path-notes.m b/clang/test/Analysis/retain-release-path-notes.m index 27cb5165735..2dc314953fd 100644 --- a/clang/test/Analysis/retain-release-path-notes.m +++ b/clang/test/Analysis/retain-release-path-notes.m @@ -36,9 +36,6 @@ CFTypeRef CFRetain(CFTypeRef); void CFRelease(CFTypeRef); CFTypeRef CFAutorelease(CFTypeRef __attribute__((cf_consumed))); -id NSMakeCollectable(CFTypeRef); -CFTypeRef CFMakeCollectable(CFTypeRef); - CFTypeRef CFCreateSomething(); CFTypeRef CFGetSomething(); @@ -98,13 +95,6 @@ void autoreleaseUnowned (Foo *foo) { return; // expected-warning{{Object autoreleased too many times}} expected-note{{Object was autoreleased but has a +0 retain count}} } -void makeCollectableIgnored () { - CFTypeRef leaked = CFCreateSomething(); // expected-note{{Call to function 'CFCreateSomething' returns a Core Foundation object of type CFTypeRef with a +1 retain count}} - CFMakeCollectable(leaked); // expected-note{{When GC is not enabled a call to 'CFMakeCollectable' has no effect on its argument}} - NSMakeCollectable(leaked); // expected-note{{When GC is not enabled a call to 'NSMakeCollectable' has no effect on its argument}} - return; // expected-warning{{leak}} expected-note{{Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1}} -} - CFTypeRef CFCopyRuleViolation () { CFTypeRef object = CFGetSomething(); // expected-note{{Call to function 'CFGetSomething' returns a Core Foundation object of type CFTypeRef with a +0 retain count}} return object; // expected-warning{{Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected}} expected-note{{Object returned to caller with a +0 retain count}} expected-note{{Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected}} diff --git a/clang/test/Analysis/retain-release.m b/clang/test/Analysis/retain-release.m index 4add50eb5d0..2e5b576d247 100644 --- a/clang/test/Analysis/retain-release.m +++ b/clang/test/Analysis/retain-release.m @@ -318,9 +318,6 @@ extern CGColorSpaceRef CGColorSpaceCreateDeviceRGB(void); + (id)array; @end -// This is how NSMakeCollectable is declared in the OS X 10.8 headers. -id NSMakeCollectable(CFTypeRef __attribute__((cf_consumed))) __attribute__((ns_returns_retained)); - typedef const struct __CFUUID * CFUUIDRef; extern @@ -2076,17 +2073,6 @@ void rdar11400885(int y) } } -id makeCollectableNonLeak() { - extern CFTypeRef CFCreateSomething(); - - CFTypeRef object = CFCreateSomething(); // +1 - CFRetain(object); // +2 - id objCObject = NSMakeCollectable(object); // +2 - [objCObject release]; // +1 - return [objCObject autorelease]; // +0 -} - - void consumeAndStopTracking(id NS_CONSUMED obj, void (^callback)(void)); void CFConsumeAndStopTracking(CFTypeRef CF_CONSUMED obj, void (^callback)(void)); |