diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-03-18 21:36:46 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-03-18 21:36:46 +0000 |
commit | 0f9d5101935cb2ba9a245f6841cd8b945e0c0785 (patch) | |
tree | bb565a364239a7d50701d377c219eddb9e045fd8 /utils | |
parent | 3ac82fe490db6e63019992a59108af3a0632bba3 (diff) | |
download | external_llvm-0f9d5101935cb2ba9a245f6841cd8b945e0c0785.zip external_llvm-0f9d5101935cb2ba9a245f6841cd8b945e0c0785.tar.gz external_llvm-0f9d5101935cb2ba9a245f6841cd8b945e0c0785.tar.bz2 |
tblgen -gen-clang-diags-options: Output OptionTable entries in lexicographic
order.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67244 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils')
-rw-r--r-- | utils/TableGen/ClangDiagnosticsEmitter.cpp | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/utils/TableGen/ClangDiagnosticsEmitter.cpp b/utils/TableGen/ClangDiagnosticsEmitter.cpp index 26ae608..cb65cea 100644 --- a/utils/TableGen/ClangDiagnosticsEmitter.cpp +++ b/utils/TableGen/ClangDiagnosticsEmitter.cpp @@ -14,6 +14,7 @@ #include "ClangDiagnosticsEmitter.h" #include "Record.h" #include "llvm/Support/Debug.h" +#include "llvm/Support/Compiler.h" #include "llvm/Support/Streams.h" #include "llvm/ADT/VectorExtras.h" #include "llvm/ADT/DenseSet.h" @@ -123,8 +124,24 @@ void ClangDiagsDefsEmitter::run(std::ostream &OS) { // Warning Group Tables generation. //===----------------------------------------------------------------------===// +static const std::string &getOptName(const Record *R) { + const RecordVal *V = findRecordVal(*R, "Name"); + assert(V && "Options must have a 'Name' value."); + const StringInit* SV = dynamic_cast<const StringInit*>(V->getValue()); + assert(SV && "'Name' entry must be a string."); + return SV->getValue(); +} + +namespace { +struct VISIBILITY_HIDDEN CompareOptName { + bool operator()(const Record* A, const Record* B) { + return getOptName(A) < getOptName(B); + } +}; +} + typedef std::set<const Record*> DiagnosticSet; -typedef std::map<const Record*, DiagnosticSet> OptionMap; +typedef std::map<const Record*, DiagnosticSet, CompareOptName> OptionMap; typedef llvm::DenseSet<const ListInit*> VisitedLists; static void BuildGroup(DiagnosticSet& DS, VisitedLists &Visited, const Init* X); @@ -206,17 +223,12 @@ void ClangOptionsEmitter::run(std::ostream &OS) { OS << "\nstatic const WarningOption OptionTable[] = {"; bool first = true; for (OptionMap::iterator I = OM.begin(), E = OM.end(); I!=E; ++I) { - const RecordVal *V = findRecordVal(*I->first, "Name"); - assert(V && "Options must have a 'Name' value."); - const StringInit* SV = dynamic_cast<const StringInit*>(V->getValue()); - assert(SV && "'Name' entry must be a string."); - if (first) first = false; else OS << ','; - OS << "\n {\"" << SV->getValue() + OS << "\n {\"" << getOptName(I->first) << "\", DIAGS(" << I->first->getName() << ")}"; } OS << "\n};\n"; |