Clang Project

clang_source_code/include/clang/StaticAnalyzer/Core/IssueHash.h
1//===---------- IssueHash.h - Generate identification hashes ----*- 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#ifndef LLVM_CLANG_STATICANALYZER_CORE_ISSUE_HASH_H
9#define LLVM_CLANG_STATICANALYZER_CORE_ISSUE_HASH_H
10
11#include "llvm/ADT/SmallString.h"
12
13namespace clang {
14class Decl;
15class SourceManager;
16class FullSourceLoc;
17class LangOptions;
18
19/// Get an MD5 hash to help identify bugs.
20///
21/// This function returns a hash that helps identify bugs within a source file.
22/// This identification can be utilized to diff diagnostic results on different
23/// snapshots of a projects, or maintain a database of suppressed diagnotics.
24///
25/// The hash contains the normalized text of the location associated with the
26/// diagnostic. Normalization means removing the whitespaces. The associated
27/// location is the either the last location of a diagnostic path or a uniqueing
28/// location. The bugtype and the name of the checker is also part of the hash.
29/// The last component is the string representation of the enclosing declaration
30/// of the associated location.
31///
32/// In case a new hash is introduced, the old one should still be maintained for
33/// a while. One should not introduce a new hash for every change, it is
34/// possible to introduce experimental hashes that may change in the future.
35/// Such hashes should be marked as experimental using a comment in the plist
36/// files.
37llvm::SmallString<32GetIssueHash(const SourceManager &SM,
38                                   FullSourceLoc &IssueLoc,
39                                   llvm::StringRef CheckerName,
40                                   llvm::StringRef BugTypeconst Decl *D,
41                                   const LangOptions &LangOpts);
42
43/// Get the string representation of issue hash. See GetIssueHash() for
44/// more information.
45std::string GetIssueString(const SourceManager &SMFullSourceLoc &IssueLoc,
46                           llvm::StringRef CheckerNamellvm::StringRef BugType,
47                           const Decl *Dconst LangOptions &LangOpts);
48// namespace clang
49
50#endif
51