summaryrefslogtreecommitdiff
path: root/utils/TableGen/ClangDiagnosticsEmitter.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-03-18 21:36:46 +0000
committerTed Kremenek <kremenek@apple.com>2009-03-18 21:36:46 +0000
commit0f9d5101935cb2ba9a245f6841cd8b945e0c0785 (patch)
treebb565a364239a7d50701d377c219eddb9e045fd8 /utils/TableGen/ClangDiagnosticsEmitter.cpp
parent3ac82fe490db6e63019992a59108af3a0632bba3 (diff)
downloadllvm-0f9d5101935cb2ba9a245f6841cd8b945e0c0785.tar.gz
llvm-0f9d5101935cb2ba9a245f6841cd8b945e0c0785.tar.bz2
llvm-0f9d5101935cb2ba9a245f6841cd8b945e0c0785.tar.xz
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/TableGen/ClangDiagnosticsEmitter.cpp')
-rw-r--r--utils/TableGen/ClangDiagnosticsEmitter.cpp26
1 files changed, 19 insertions, 7 deletions
diff --git a/utils/TableGen/ClangDiagnosticsEmitter.cpp b/utils/TableGen/ClangDiagnosticsEmitter.cpp
index 26ae608d88..cb65cea31a 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";