diff options
Diffstat (limited to 'utils/TableGen/ClangDiagnosticsEmitter.cpp')
| -rw-r--r-- | utils/TableGen/ClangDiagnosticsEmitter.cpp | 26 | 
1 files changed, 18 insertions, 8 deletions
diff --git a/utils/TableGen/ClangDiagnosticsEmitter.cpp b/utils/TableGen/ClangDiagnosticsEmitter.cpp index 75b6252c4f9f7..60e67c467466f 100644 --- a/utils/TableGen/ClangDiagnosticsEmitter.cpp +++ b/utils/TableGen/ClangDiagnosticsEmitter.cpp @@ -29,9 +29,10 @@ using namespace llvm;  namespace {  class DiagGroupParentMap { +  RecordKeeper &Records;    std::map<const Record*, std::vector<Record*> > Mapping;  public: -  DiagGroupParentMap() { +  DiagGroupParentMap(RecordKeeper &records) : Records(records) {      std::vector<Record*> DiagGroups        = Records.getAllDerivedDefinitions("DiagGroup");      for (unsigned i = 0, e = DiagGroups.size(); i != e; ++i) { @@ -84,11 +85,12 @@ static std::string getDiagnosticCategory(const Record *R,  namespace {    class DiagCategoryIDMap { +    RecordKeeper &Records;      StringMap<unsigned> CategoryIDs;      std::vector<std::string> CategoryStrings;    public: -    DiagCategoryIDMap() { -      DiagGroupParentMap ParentInfo; +    DiagCategoryIDMap(RecordKeeper &records) : Records(records) { +      DiagGroupParentMap ParentInfo(Records);        // The zero'th category is "".        CategoryStrings.push_back(""); @@ -138,8 +140,8 @@ void ClangDiagsDefsEmitter::run(raw_ostream &OS) {    const std::vector<Record*> &Diags =      Records.getAllDerivedDefinitions("Diagnostic"); -  DiagCategoryIDMap CategoryIDs; -  DiagGroupParentMap DGParentMap; +  DiagCategoryIDMap CategoryIDs(Records); +  DiagGroupParentMap DGParentMap(Records);    for (unsigned i = 0, e = Diags.size(); i != e; ++i) {      const Record &R = *Diags[i]; @@ -168,7 +170,13 @@ void ClangDiagsDefsEmitter::run(raw_ostream &OS) {        OS << ", true";      else        OS << ", false"; -     + +    // Access control bit +    if (R.getValueAsBit("AccessControl")) +      OS << ", true"; +    else +      OS << ", false"; +      // Category number.      OS << ", " << CategoryIDs.getID(getDiagnosticCategory(&R, DGParentMap));      OS << ")\n"; @@ -179,15 +187,17 @@ void ClangDiagsDefsEmitter::run(raw_ostream &OS) {  // Warning Group Tables generation  //===----------------------------------------------------------------------===// +namespace {  struct GroupInfo {    std::vector<const Record*> DiagsInGroup;    std::vector<std::string> SubGroups;    unsigned IDNo;  }; +} // end anonymous namespace.  void ClangDiagGroupsEmitter::run(raw_ostream &OS) {    // Compute a mapping from a DiagGroup to all of its parents. -  DiagGroupParentMap DGParentMap; +  DiagGroupParentMap DGParentMap(Records);    // Invert the 1-[0/1] mapping of diags to group into a one to many mapping of    // groups to diags in the group. @@ -277,7 +287,7 @@ void ClangDiagGroupsEmitter::run(raw_ostream &OS) {    OS << "#endif // GET_DIAG_TABLE\n\n";    // Emit the category table next. -  DiagCategoryIDMap CategoriesByID; +  DiagCategoryIDMap CategoriesByID(Records);    OS << "\n#ifdef GET_CATEGORY_TABLE\n";    for (DiagCategoryIDMap::iterator I = CategoriesByID.begin(),         E = CategoriesByID.end(); I != E; ++I)  | 
