'tblgen -gen-clang-diags-options' now outputs the OptionTable:
authorTed Kremenek <kremenek@apple.com>
Wed, 18 Mar 2009 21:28:47 +0000 (21:28 +0000)
committerTed Kremenek <kremenek@apple.com>
Wed, 18 Mar 2009 21:28:47 +0000 (21:28 +0000)
  static const WarningOption OptionTable[] = {
    {"unused-macros", DIAGS(UnusedMacrosDiags)}
    ...
  };

This table is not yet properly sorted.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67242 91177308-0d34-0410-b5e6-96231b3b80d8

utils/TableGen/ClangDiagnosticsEmitter.cpp

index a3f27ba75f2b36bcc15dfb6fa9696d49de925ad8..26ae608d886d916654cbde558343c447ca32db13 100644 (file)
@@ -186,11 +186,6 @@ void ClangOptionsEmitter::run(std::ostream &OS) {
   
   // Iterate through the OptionMap and emit the declarations.
   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.");
-    
     // Output the option.
     OS << "static const diag::kind " << I->first->getName() << "[] = { ";
     
@@ -206,4 +201,23 @@ void ClangOptionsEmitter::run(std::ostream &OS) {
     }
     OS << " };\n";
   }
+    
+  // Now emit the OptionTable table.
+  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()
+       << "\", DIAGS(" << I->first->getName() << ")}";
+  }
+  OS << "\n};\n";
 }