BugType.h revision 99ba9e3bd70671f3441fb974895f226a83ce0e66
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 "llvm/ADT/FoldingSet.h"
18#include <string>
19
20namespace clang {
21
22namespace ento {
23
24class BugReporter;
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  virtual void anchor();
53  const std::string desc;
54public:
55  BuiltinBug(const char *name, const char *description)
56    : BugType(name, "Logic error"), desc(description) {}
57
58  BuiltinBug(const char *name)
59    : BugType(name, "Logic error"), desc(name) {}
60
61  StringRef getDescription() const { return desc; }
62};
63
64} // end GR namespace
65
66} // end clang namespace
67#endif
68