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_STATICANALYZER_CORE_BUGREPORTER_BUGTYPE_H 15#define LLVM_CLANG_STATICANALYZER_CORE_BUGREPORTER_BUGTYPE_H 16 17#include "clang/Basic/LLVM.h" 18#include "clang/StaticAnalyzer/Core/BugReporter/CommonBugCategories.h" 19#include "clang/StaticAnalyzer/Core/Checker.h" 20#include <string> 21 22namespace clang { 23 24namespace ento { 25 26class BugReporter; 27class ExplodedNode; 28class ExprEngine; 29 30class BugType { 31private: 32 const CheckName Check; 33 const std::string Name; 34 const std::string Category; 35 bool SuppressonSink; 36 37 virtual void anchor(); 38public: 39 BugType(class CheckName check, StringRef name, StringRef cat) 40 : Check(check), Name(name), Category(cat), SuppressonSink(false) {} 41 BugType(const CheckerBase *checker, StringRef name, StringRef cat) 42 : Check(checker->getCheckName()), Name(name), Category(cat), 43 SuppressonSink(false) {} 44 virtual ~BugType() {} 45 46 // FIXME: Should these be made strings as well? 47 StringRef getName() const { return Name; } 48 StringRef getCategory() const { return Category; } 49 StringRef getCheckName() const { return Check.getName(); } 50 51 /// isSuppressOnSink - Returns true if bug reports associated with this bug 52 /// type should be suppressed if the end node of the report is post-dominated 53 /// by a sink node. 54 bool isSuppressOnSink() const { return SuppressonSink; } 55 void setSuppressOnSink(bool x) { SuppressonSink = x; } 56 57 virtual void FlushReports(BugReporter& BR); 58}; 59 60class BuiltinBug : public BugType { 61 const std::string desc; 62 void anchor() override; 63public: 64 BuiltinBug(class CheckName check, const char *name, const char *description) 65 : BugType(check, name, categories::LogicError), desc(description) {} 66 67 BuiltinBug(const CheckerBase *checker, const char *name, 68 const char *description) 69 : BugType(checker, name, categories::LogicError), desc(description) {} 70 71 BuiltinBug(const CheckerBase *checker, const char *name) 72 : BugType(checker, name, categories::LogicError), desc(name) {} 73 74 StringRef getDescription() const { return desc; } 75}; 76 77} // end GR namespace 78 79} // end clang namespace 80#endif 81