BugType.h revision 4587cace907ed9a68256bdae506fbb8d93ac232c
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//===--- BugType.h - Bug Information Desciption ----------------*- C++ -*-===// 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The LLVM Compiler Infrastructure 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This file is distributed under the University of Illinois Open Source 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// License. See LICENSE.TXT for details. 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//===----------------------------------------------------------------------===// 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This file defines BugType, a class representing a bug type. 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//===----------------------------------------------------------------------===// 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef LLVM_CLANG_ANALYSIS_BUGTYPE 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define LLVM_CLANG_ANALYSIS_BUGTYPE 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "clang/Basic/LLVM.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "clang/StaticAnalyzer/Checkers/CommonBugCategories.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "llvm/ADT/FoldingSet.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace clang { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace ento { 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BugReporter; 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ExplodedNode; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ExprEngine; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BugType { 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)private: 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string Name; 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string Category; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool SuppressonSink; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)public: 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BugType(StringRef name, StringRef cat) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : Name(name), Category(cat), SuppressonSink(false) {} 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~BugType(); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // FIXME: Should these be made strings as well? 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StringRef getName() const { return Name; } 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StringRef getCategory() const { return Category; } 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /// isSuppressOnSink - Returns true if bug reports associated with this bug 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /// type should be suppressed if the end node of the report is post-dominated 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /// by a sink node. 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool isSuppressOnSink() const { return SuppressonSink; } 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void setSuppressOnSink(bool x) { SuppressonSink = x; } 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void FlushReports(BugReporter& BR); 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BuiltinBug : public BugType { 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void anchor(); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string desc; 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)public: 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BuiltinBug(const char *name, const char *description) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : BugType(name, categories::LogicError), desc(description) {} 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BuiltinBug(const char *name) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : BugType(name, categories::LogicError), desc(name) {} 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StringRef getDescription() const { return desc; } 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // end GR namespace 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // end clang namespace 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)