10832f82f763185767d63ae4bf05021c5630c155fJordan Rose//===- DiagnosticNames.cpp - Defines a table of all builtin diagnostics ----==// 20832f82f763185767d63ae4bf05021c5630c155fJordan Rose// 30832f82f763185767d63ae4bf05021c5630c155fJordan Rose// The LLVM Compiler Infrastructure 40832f82f763185767d63ae4bf05021c5630c155fJordan Rose// 50832f82f763185767d63ae4bf05021c5630c155fJordan Rose// This file is distributed under the University of Illinois Open Source 60832f82f763185767d63ae4bf05021c5630c155fJordan Rose// License. See LICENSE.TXT for details. 70832f82f763185767d63ae4bf05021c5630c155fJordan Rose// 80832f82f763185767d63ae4bf05021c5630c155fJordan Rose//===----------------------------------------------------------------------===// 90832f82f763185767d63ae4bf05021c5630c155fJordan Rose 100832f82f763185767d63ae4bf05021c5630c155fJordan Rose#include "DiagnosticNames.h" 110832f82f763185767d63ae4bf05021c5630c155fJordan Rose#include "clang/Basic/AllDiagnostics.h" 12e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose#include "llvm/ADT/STLExtras.h" 130832f82f763185767d63ae4bf05021c5630c155fJordan Rose 140832f82f763185767d63ae4bf05021c5630c155fJordan Roseusing namespace clang; 15e7427636767501903cfa51ccecafa7a4795a23c2Jordan Roseusing namespace diagtool; 160832f82f763185767d63ae4bf05021c5630c155fJordan Rose 17e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rosestatic const DiagnosticRecord BuiltinDiagnosticsByName[] = { 180832f82f763185767d63ae4bf05021c5630c155fJordan Rose#define DIAG_NAME_INDEX(ENUM) { #ENUM, diag::ENUM, STR_SIZE(#ENUM, uint8_t) }, 190832f82f763185767d63ae4bf05021c5630c155fJordan Rose#include "clang/Basic/DiagnosticIndexName.inc" 200832f82f763185767d63ae4bf05021c5630c155fJordan Rose#undef DIAG_NAME_INDEX 210832f82f763185767d63ae4bf05021c5630c155fJordan Rose}; 220832f82f763185767d63ae4bf05021c5630c155fJordan Rose 23e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rosellvm::ArrayRef<DiagnosticRecord> diagtool::getBuiltinDiagnosticsByName() { 2419bf662a7c5df007f2809ad3b6eb0a3985003e73Jordan Rose return llvm::makeArrayRef(BuiltinDiagnosticsByName); 25e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose} 260832f82f763185767d63ae4bf05021c5630c155fJordan Rose 27e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose 28e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose// FIXME: Is it worth having two tables, especially when this one can get 29e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose// out of sync easily? 30e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rosestatic const DiagnosticRecord BuiltinDiagnosticsByID[] = { 31e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose#define DIAG(ENUM,CLASS,DEFAULT_MAPPING,DESC,GROUP, \ 323347b497157d36cf280d1d9f52956faa6e702f34Richard Smith SFINAE,NOWERROR,SHOWINSYSHEADER,CATEGORY) \ 33e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose { #ENUM, diag::ENUM, STR_SIZE(#ENUM, uint8_t) }, 34e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose#include "clang/Basic/DiagnosticCommonKinds.inc" 35e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose#include "clang/Basic/DiagnosticDriverKinds.inc" 36e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose#include "clang/Basic/DiagnosticFrontendKinds.inc" 37e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose#include "clang/Basic/DiagnosticSerializationKinds.inc" 38e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose#include "clang/Basic/DiagnosticLexKinds.inc" 39e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose#include "clang/Basic/DiagnosticParseKinds.inc" 40e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose#include "clang/Basic/DiagnosticASTKinds.inc" 41a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko#include "clang/Basic/DiagnosticCommentKinds.inc" 42e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose#include "clang/Basic/DiagnosticSemaKinds.inc" 43e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose#include "clang/Basic/DiagnosticAnalysisKinds.inc" 44e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose#undef DIAG 45e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose}; 46e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose 47e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rosestatic bool orderByID(const DiagnosticRecord &Left, 48e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose const DiagnosticRecord &Right) { 49e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose return Left.DiagID < Right.DiagID; 50e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose} 51e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose 52e7427636767501903cfa51ccecafa7a4795a23c2Jordan Roseconst DiagnosticRecord &diagtool::getDiagnosticForID(short DiagID) { 53ef8225444452a1486bd721f3285301fe84643b00Stephen Hines DiagnosticRecord Key = {nullptr, DiagID, 0}; 54e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose 55e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose const DiagnosticRecord *Result = 566bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines std::lower_bound(std::begin(BuiltinDiagnosticsByID), 576bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines std::end(BuiltinDiagnosticsByID), 58e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose Key, orderByID); 59e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose assert(Result && "diagnostic not found; table may be out of date"); 60e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose return *Result; 61e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose} 62e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose 63e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose 64e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose#define GET_DIAG_ARRAYS 65e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose#include "clang/Basic/DiagnosticGroups.inc" 66e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose#undef GET_DIAG_ARRAYS 67e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose 68e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose// Second the table of options, sorted by name for fast binary lookup. 69e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rosestatic const GroupRecord OptionTable[] = { 70e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose#define GET_DIAG_TABLE 71e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose#include "clang/Basic/DiagnosticGroups.inc" 72e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose#undef GET_DIAG_TABLE 73e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose}; 74e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose 75354f20a8720732aa1745d1ff9595382cee324ee2Craig Topperllvm::StringRef GroupRecord::getName() const { 76354f20a8720732aa1745d1ff9595382cee324ee2Craig Topper return StringRef(DiagGroupNames + NameOffset + 1, DiagGroupNames[NameOffset]); 77354f20a8720732aa1745d1ff9595382cee324ee2Craig Topper} 78354f20a8720732aa1745d1ff9595382cee324ee2Craig Topper 79b1aa16a18563ebb6824fbe7267420942c802a8caCraig TopperGroupRecord::subgroup_iterator GroupRecord::subgroup_begin() const { 80b1aa16a18563ebb6824fbe7267420942c802a8caCraig Topper return DiagSubGroups + SubGroups; 81b1aa16a18563ebb6824fbe7267420942c802a8caCraig Topper} 82b1aa16a18563ebb6824fbe7267420942c802a8caCraig Topper 83b1aa16a18563ebb6824fbe7267420942c802a8caCraig TopperGroupRecord::subgroup_iterator GroupRecord::subgroup_end() const { 84ef8225444452a1486bd721f3285301fe84643b00Stephen Hines return nullptr; 85b1aa16a18563ebb6824fbe7267420942c802a8caCraig Topper} 86b1aa16a18563ebb6824fbe7267420942c802a8caCraig Topper 87b1aa16a18563ebb6824fbe7267420942c802a8caCraig TopperGroupRecord::diagnostics_iterator GroupRecord::diagnostics_begin() const { 88b1aa16a18563ebb6824fbe7267420942c802a8caCraig Topper return DiagArrays + Members; 89b1aa16a18563ebb6824fbe7267420942c802a8caCraig Topper} 90b1aa16a18563ebb6824fbe7267420942c802a8caCraig Topper 91b1aa16a18563ebb6824fbe7267420942c802a8caCraig TopperGroupRecord::diagnostics_iterator GroupRecord::diagnostics_end() const { 92ef8225444452a1486bd721f3285301fe84643b00Stephen Hines return nullptr; 93b1aa16a18563ebb6824fbe7267420942c802a8caCraig Topper} 94b1aa16a18563ebb6824fbe7267420942c802a8caCraig Topper 95e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rosellvm::ArrayRef<GroupRecord> diagtool::getDiagnosticGroups() { 9619bf662a7c5df007f2809ad3b6eb0a3985003e73Jordan Rose return llvm::makeArrayRef(OptionTable); 97e7427636767501903cfa51ccecafa7a4795a23c2Jordan Rose} 98