clang 20.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 Desc,
39 StringRef Cat = categories::LogicError, bool SuppressOnSink = false)
40 : CheckerName(CheckerName), Description(Desc), Category(Cat),
41 Checker(nullptr), SuppressOnSink(SuppressOnSink) {}
42 BugType(const CheckerBase *Checker, StringRef Desc,
43 StringRef Cat = categories::LogicError, bool SuppressOnSink = false)
44 : CheckerName(Checker->getCheckerName()), Description(Desc),
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
67} // namespace ento
68
69} // end clang namespace
70#endif
int Category
Definition: Format.cpp:3056
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
BugType(CheckerNameRef CheckerName, StringRef Desc, StringRef Cat=categories::LogicError, bool SuppressOnSink=false)
Definition: BugType.h:38
StringRef getCategory() const
Definition: BugType.h:49
StringRef getDescription() const
Definition: BugType.h:48
virtual ~BugType()=default
StringRef getCheckerName() const
Definition: BugType.h:50
BugType(const CheckerBase *Checker, StringRef Desc, StringRef Cat=categories::LogicError, bool SuppressOnSink=false)
Definition: BugType.h:42
CheckerNameRef getCheckerName() const
Definition: Checker.cpp:25
This wrapper is used to ensure that only StringRefs originating from the CheckerRegistry are used as ...
The JSON file list parser is used to communicate input to InstallAPI.
Morty Proxy This is a proxified and sanitized view of the page, visit original site.