clang  11.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 
23 namespace clang {
24 namespace ento {
25 namespace retaincountchecker {
26 
27 class RefCountBug : public BugType {
28 public:
38  };
40  StringRef getDescription() const;
41 
42  RefCountBugKind getBugType() const { return BT; }
43 
44 private:
45  RefCountBugKind BT;
46  static StringRef bugTypeToName(RefCountBugKind BT);
47 };
48 
50 protected:
52  bool isLeak = false;
53 
54 public:
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 
63  ArrayRef<SourceRange> getRanges() const override {
64  if (!isLeak)
66  return {};
67  }
68 };
69 
70 class RefLeakReport : public RefCountReport {
71  const MemRegion* AllocBinding;
72  const Stmt *AllocStmt;
73  PathDiagnosticLocation Location;
74 
75  // Finds the function declaration where a leak warning for the parameter
76  // 'sym' should be raised.
77  void deriveParamLocation(CheckerContext &Ctx, SymbolRef sym);
78  // Finds the location where a leak warning for 'sym' should be raised.
79  void deriveAllocLocation(CheckerContext &Ctx, SymbolRef sym);
80  // Produces description of a leak warning which is printed on the console.
81  void createDescription(CheckerContext &Ctx);
82 
83 public:
84  RefLeakReport(const RefCountBug &D, const LangOptions &LOpts, ExplodedNode *n,
85  SymbolRef sym, CheckerContext &Ctx);
87  assert(Location.isValid());
88  return Location;
89  }
90 
93  }
94 };
95 
96 } // end namespace retaincountchecker
97 } // end namespace ento
98 } // end namespace clang
99 
100 #endif
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:94
Stmt - This represents one statement.
Definition: Stmt.h:68
ArrayRef< SourceRange > getRanges() const override
Get the SourceRanges associated with the report.
RefCountBug(CheckerNameRef Checker, RefCountBugKind BT)
Symbolic value.
Definition: SymExpr.h:29
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
Definition: LangOptions.h:54
PathDiagnosticLocation getLocation() const override
The primary location of the bug report that points at the undesirable behavior in the code...
PathDiagnosticLocation getLocation() const override
The primary location of the bug report that points at the undesirable behavior in the code...
Dataflow Directional Tag Classes.
ArrayRef< SourceRange > getRanges() const override
Get the SourceRanges associated with the report.