diff --git a/llvm/utils/TableGen/ClangDiagnosticsEmitter.cpp b/llvm/utils/TableGen/ClangDiagnosticsEmitter.cpp index d0ca5a13d727..045eb7a47c65 100644 --- a/llvm/utils/TableGen/ClangDiagnosticsEmitter.cpp +++ b/llvm/utils/TableGen/ClangDiagnosticsEmitter.cpp @@ -66,9 +66,8 @@ void ClangDiagGroupsEmitter::run(std::ostream &OS) { // groups to diags in the group. std::map > DiagsInGroup; - const std::vector &Diags = + std::vector Diags = Records.getAllDerivedDefinitions("Diagnostic"); - for (unsigned i = 0, e = Diags.size(); i != e; ++i) { const Record *R = Diags[i]; DefInit *DI = dynamic_cast(R->getValueInit("Group")); @@ -76,6 +75,13 @@ void ClangDiagGroupsEmitter::run(std::ostream &OS) { DiagsInGroup[DI->getDef()->getValueAsString("GroupName")].push_back(R); } + // Add all DiagGroup's to the DiagsInGroup list to make sure we pick up empty + // groups (these are warnings that GCC supports that clang never produces). + Diags = Records.getAllDerivedDefinitions("DiagGroup"); + for (unsigned i = 0, e = Diags.size(); i != e; ++i) { + DiagsInGroup[Diags[i]->getValueAsString("GroupName")]; + } + // Walk through the groups emitting an array for each diagnostic of the diags // that are mapped to. OS << "\n#ifdef GET_DIAG_ARRAYS\n";