clang 17.0.0git
BugType.h
Go to the documentation of this file.
1//===--- BugType.h - Bug Information Description ---------------*- 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 BugType, a class representing a bug type.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_CLANG_STATICANALYZER_CORE_BUGREPORTER_BUGTYPE_H
14#define LLVM_CLANG_STATICANALYZER_CORE_BUGREPORTER_BUGTYPE_H
15
16#include "clang/Basic/LLVM.h"
19#include <string>
20
21namespace clang {
22
23namespace ento {
24
25class BugReporter;
26
27class BugType {
28private:
29 const CheckerNameRef CheckerName;
30 const std::string Description;
31 const std::string Category;
32 const CheckerBase *Checker;
33 bool SuppressOnSink;
34
35 virtual void anchor();
36
37public:
38 BugType(CheckerNameRef CheckerName, StringRef Name, StringRef Cat,
39 bool SuppressOnSink = false)
40 : CheckerName(CheckerName), Description(Name), Category(Cat),
41 Checker(nullptr), SuppressOnSink(SuppressOnSink) {}
42 BugType(const CheckerBase *Checker, StringRef Name, StringRef Cat,
43 bool SuppressOnSink = false)
44 : CheckerName(Checker->getCheckerName()), Description(Name),
45 Category(Cat), Checker(Checker), SuppressOnSink(SuppressOnSink) {}
46 virtual ~BugType() = default;
47
48 StringRef getDescription() const { return Description; }
49 StringRef getCategory() const { return Category; }
50 StringRef getCheckerName() const {
51 // FIXME: This is a workaround to ensure that the correct checerk name is
52 // used. The checker names are set after the constructors are run.
53 // In case the BugType object is initialized in the checker's ctor
54 // the CheckerName field will be empty. To circumvent this problem we use
55 // CheckerBase whenever it is possible.
56 StringRef Ret = Checker ? Checker->getCheckerName() : CheckerName;
57 assert(!Ret.empty() && "Checker name is not set properly.");
58 return Ret;
59 }
60
61 /// isSuppressOnSink - Returns true if bug reports associated with this bug
62 /// type should be suppressed if the end node of the report is post-dominated
63 /// by a sink node.
64 bool isSuppressOnSink() const { return SuppressOnSink; }
65};
66
67class BuiltinBug : public BugType {
68 const std::string desc;
69 void anchor() override;
70public:
71 BuiltinBug(class CheckerNameRef checker, const char *name,
72 const char *description)
73 : BugType(checker, name, categories::LogicError), desc(description) {}
74
75 BuiltinBug(const CheckerBase *checker, const char *name,
76 const char *description)
77 : BugType(checker, name, categories::LogicError), desc(description) {}
78
79 BuiltinBug(class CheckerNameRef checker, const char *name)
80 : BugType(checker, name, categories::LogicError), desc(name) {}
81
82 BuiltinBug(const CheckerBase *checker, const char *name)
83 : BugType(checker, name, categories::LogicError), desc(name) {}
84
85 StringRef getDescription() const { return desc; }
86};
87
88} // namespace ento
89
90} // end clang namespace
91#endif
int Category
Definition: Format.cpp:2801
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.
bool isSuppressOnSink() const
isSuppressOnSink - Returns true if bug reports associated with this bug type should be suppressed if ...
Definition: BugType.h:64
StringRef getCategory() const
Definition: BugType.h:49
BugType(const CheckerBase *Checker, StringRef Name, StringRef Cat, bool SuppressOnSink=false)
Definition: BugType.h:42
BugType(CheckerNameRef CheckerName, StringRef Name, StringRef Cat, bool SuppressOnSink=false)
Definition: BugType.h:38
StringRef getDescription() const
Definition: BugType.h:48
virtual ~BugType()=default
StringRef getCheckerName() const
Definition: BugType.h:50
BuiltinBug(const CheckerBase *checker, const char *name, const char *description)
Definition: BugType.h:75
BuiltinBug(class CheckerNameRef checker, const char *name, const char *description)
Definition: BugType.h:71
StringRef getDescription() const
Definition: BugType.h:85
BuiltinBug(const CheckerBase *checker, const char *name)
Definition: BugType.h:82
BuiltinBug(class CheckerNameRef checker, const char *name)
Definition: BugType.h:79
CheckerNameRef getCheckerName() const
Definition: Checker.cpp:25
This wrapper is used to ensure that only StringRefs originating from the CheckerRegistry are used as ...