Coverage Report

Created: 2020-11-24 06:42

/Users/buildslave/jenkins/workspace/coverage/llvm-project/clang/tools/diagtool/DiagnosticNames.cpp
Line
Count
Source
1
//===- DiagnosticNames.cpp - Defines a table of all builtin diagnostics ----==//
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
9
#include "DiagnosticNames.h"
10
#include "clang/Basic/AllDiagnostics.h"
11
#include "llvm/ADT/STLExtras.h"
12
13
using namespace clang;
14
using namespace diagtool;
15
16
static const DiagnosticRecord BuiltinDiagnosticsByName[] = {
17
#define DIAG_NAME_INDEX(ENUM) { #ENUM, diag::ENUM, STR_SIZE(#ENUM, uint8_t) },
18
#include "clang/Basic/DiagnosticIndexName.inc"
19
#undef DIAG_NAME_INDEX
20
};
21
22
16
llvm::ArrayRef<DiagnosticRecord> diagtool::getBuiltinDiagnosticsByName() {
23
16
  return llvm::makeArrayRef(BuiltinDiagnosticsByName);
24
16
}
25
26
27
// FIXME: Is it worth having two tables, especially when this one can get
28
// out of sync easily?
29
static const DiagnosticRecord BuiltinDiagnosticsByID[] = {
30
#define DIAG(ENUM,CLASS,DEFAULT_MAPPING,DESC,GROUP,               \
31
             SFINAE,NOWERROR,SHOWINSYSHEADER,DEFER,CATEGORY)            \
32
  { #ENUM, diag::ENUM, STR_SIZE(#ENUM, uint8_t) },
33
#include "clang/Basic/DiagnosticCommonKinds.inc"
34
#include "clang/Basic/DiagnosticCrossTUKinds.inc"
35
#include "clang/Basic/DiagnosticDriverKinds.inc"
36
#include "clang/Basic/DiagnosticFrontendKinds.inc"
37
#include "clang/Basic/DiagnosticSerializationKinds.inc"
38
#include "clang/Basic/DiagnosticLexKinds.inc"
39
#include "clang/Basic/DiagnosticParseKinds.inc"
40
#include "clang/Basic/DiagnosticASTKinds.inc"
41
#include "clang/Basic/DiagnosticCommentKinds.inc"
42
#include "clang/Basic/DiagnosticSemaKinds.inc"
43
#include "clang/Basic/DiagnosticAnalysisKinds.inc"
44
#include "clang/Basic/DiagnosticRefactoringKinds.inc"
45
#undef DIAG
46
};
47
48
static bool orderByID(const DiagnosticRecord &Left,
49
149k
                      const DiagnosticRecord &Right) {
50
149k
  return Left.DiagID < Right.DiagID;
51
149k
}
52
53
11.9k
const DiagnosticRecord &diagtool::getDiagnosticForID(short DiagID) {
54
11.9k
  DiagnosticRecord Key = {nullptr, DiagID, 0};
55
56
11.9k
  const DiagnosticRecord *Result =
57
11.9k
      llvm::lower_bound(BuiltinDiagnosticsByID, Key, orderByID);
58
11.9k
  assert(Result && "diagnostic not found; table may be out of date");
59
11.9k
  return *Result;
60
11.9k
}
61
62
63
#define GET_DIAG_ARRAYS
64
#include "clang/Basic/DiagnosticGroups.inc"
65
#undef GET_DIAG_ARRAYS
66
67
// Second the table of options, sorted by name for fast binary lookup.
68
static const GroupRecord OptionTable[] = {
69
#define GET_DIAG_TABLE
70
#include "clang/Basic/DiagnosticGroups.inc"
71
#undef GET_DIAG_TABLE
72
};
73
74
3.20k
llvm::StringRef GroupRecord::getName() const {
75
3.20k
  return StringRef(DiagGroupNames + NameOffset + 1, DiagGroupNames[NameOffset]);
76
3.20k
}
77
78
8.25k
GroupRecord::subgroup_iterator GroupRecord::subgroup_begin() const {
79
8.25k
  return DiagSubGroups + SubGroups;
80
8.25k
}
81
82
8.25k
GroupRecord::subgroup_iterator GroupRecord::subgroup_end() const {
83
8.25k
  return nullptr;
84
8.25k
}
85
86
llvm::iterator_range<diagtool::GroupRecord::subgroup_iterator>
87
5.66k
GroupRecord::subgroups() const {
88
5.66k
  return llvm::make_range(subgroup_begin(), subgroup_end());
89
5.66k
}
90
91
10.0k
GroupRecord::diagnostics_iterator GroupRecord::diagnostics_begin() const {
92
10.0k
  return DiagArrays + Members;
93
10.0k
}
94
95
10.0k
GroupRecord::diagnostics_iterator GroupRecord::diagnostics_end() const {
96
10.0k
  return nullptr;
97
10.0k
}
98
99
llvm::iterator_range<diagtool::GroupRecord::diagnostics_iterator>
100
10.0k
GroupRecord::diagnostics() const {
101
10.0k
  return llvm::make_range(diagnostics_begin(), diagnostics_end());
102
10.0k
}
103
104
2.41k
llvm::ArrayRef<GroupRecord> diagtool::getDiagnosticGroups() {
105
2.41k
  return llvm::makeArrayRef(OptionTable);
106
2.41k
}