BugType.h revision 686775deca8b8685eb90801495880e3abdd844c2
1//===---  BugType.h - Bug Information Desciption ----------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10//  This file defines BugType, a class representing a bug type.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_CLANG_ANALYSIS_BUGTYPE
15#define LLVM_CLANG_ANALYSIS_BUGTYPE
16
17#include "clang/StaticAnalyzer/Core/BugReporter/BugReporter.h"
18#include "llvm/ADT/FoldingSet.h"
19#include <string>
20
21namespace clang {
22
23namespace ento {
24
25class ExplodedNode;
26class ExprEngine;
27
28class BugType {
29private:
30  const std::string Name;
31  const std::string Category;
32  bool SuppressonSink;
33public:
34  BugType(StringRef name, StringRef cat)
35    : Name(name), Category(cat), SuppressonSink(false) {}
36  virtual ~BugType();
37
38  // FIXME: Should these be made strings as well?
39  StringRef getName() const { return Name; }
40  StringRef getCategory() const { return Category; }
41
42  /// isSuppressOnSink - Returns true if bug reports associated with this bug
43  ///  type should be suppressed if the end node of the report is post-dominated
44  ///  by a sink node.
45  bool isSuppressOnSink() const { return SuppressonSink; }
46  void setSuppressOnSink(bool x) { SuppressonSink = x; }
47
48  virtual void FlushReports(BugReporter& BR);
49};
50
51class BuiltinBug : public BugType {
52  const std::string desc;
53public:
54  BuiltinBug(const char *name, const char *description)
55    : BugType(name, "Logic error"), desc(description) {}
56
57  BuiltinBug(const char *name)
58    : BugType(name, "Logic error"), desc(name) {}
59
60  StringRef getDescription() const { return desc; }
61};
62
63} // end GR namespace
64
65} // end clang namespace
66#endif
67