clang 20.0.0git
RetainCountDiagnostics.h
Go to the documentation of this file.
1//== RetainCountDiagnostics.h - Checks for leaks and other issues -*- C++ -*--//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file defines diagnostics for RetainCountChecker, which implements
10// a reference count checker for Core Foundation and Cocoa on (Mac OS X).
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_CLANG_LIB_STATICANALYZER_CHECKERS_RETAINCOUNTCHECKER_DIAGNOSTICS_H
15#define LLVM_CLANG_LIB_STATICANALYZER_CHECKERS_RETAINCOUNTCHECKER_DIAGNOSTICS_H
16
22
23namespace clang {
24namespace ento {
25namespace retaincountchecker {
26
27class RefCountBug : public BugType {
28public:
38 };
40 StringRef getDescription() const;
41
42 RefCountBugKind getBugType() const { return BT; }
43
44private:
46 static StringRef bugTypeToName(RefCountBugKind BT);
47};
48
50protected:
52 bool isLeak = false;
53
54public:
55 RefCountReport(const RefCountBug &D, const LangOptions &LOpts,
56 ExplodedNode *n, SymbolRef sym,
57 bool isLeak=false);
58
59 RefCountReport(const RefCountBug &D, const LangOptions &LOpts,
60 ExplodedNode *n, SymbolRef sym,
61 StringRef endText);
62
64 if (!isLeak)
66 return {};
67 }
68};
69
71 const MemRegion *AllocFirstBinding = nullptr;
72 const MemRegion *AllocBindingToReport = nullptr;
73 const Stmt *AllocStmt = nullptr;
75
76 // Finds the function declaration where a leak warning for the parameter
77 // 'sym' should be raised.
78 void deriveParamLocation(CheckerContext &Ctx);
79 // Finds the location where the leaking object is allocated.
80 void deriveAllocLocation(CheckerContext &Ctx);
81 // Produces description of a leak warning which is printed on the console.
82 void createDescription(CheckerContext &Ctx);
83 // Finds the binding that we should use in a leak warning.
84 void findBindingToReport(CheckerContext &Ctx, ExplodedNode *Node);
85
86public:
87 RefLeakReport(const RefCountBug &D, const LangOptions &LOpts, ExplodedNode *n,
88 SymbolRef sym, CheckerContext &Ctx);
90 assert(Location.isValid());
91 return Location;
92 }
93
96 }
97};
98
99} // end namespace retaincountchecker
100} // end namespace ento
101} // end namespace clang
102
103#endif
DynTypedNode Node
const Decl * D
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
Definition: LangOptions.h:499
Stmt - This represents one statement.
Definition: Stmt.h:84
This wrapper is used to ensure that only StringRefs originating from the CheckerRegistry are used as ...
MemRegion - The root abstract class for all memory regions.
Definition: MemRegion.h:97
PathDiagnosticLocation getLocation() const override
The primary location of the bug report that points at the undesirable behavior in the code.
ArrayRef< SourceRange > getRanges() const override
Get the SourceRanges associated with the report.
Symbolic value.
Definition: SymExpr.h:30
ArrayRef< SourceRange > getRanges() const override
Get the SourceRanges associated with the report.
PathDiagnosticLocation getLocation() const override
The primary location of the bug report that points at the undesirable behavior in the code.
The JSON file list parser is used to communicate input to InstallAPI.