From dab5212884f6b9eb346a17a9abefb5e27b3bc5dd Mon Sep 17 00:00:00 2001 From: Oliver Stannard Date: Thu, 12 Oct 2017 09:28:23 +0000 Subject: [PATCH] [AsmParser] Suppress compile warning for targets with no register diags This fixes the "switch statement contains 'default' but no 'case' labels" warnings in table-generated code introduced in r315295. llvm-svn: 315571 --- llvm/utils/TableGen/AsmMatcherEmitter.cpp | 30 ++++++++++++++--------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/llvm/utils/TableGen/AsmMatcherEmitter.cpp b/llvm/utils/TableGen/AsmMatcherEmitter.cpp index a345b19024eb..fd1d7e0dba44 100644 --- a/llvm/utils/TableGen/AsmMatcherEmitter.cpp +++ b/llvm/utils/TableGen/AsmMatcherEmitter.cpp @@ -2256,20 +2256,26 @@ static void emitOperandMatchErrorDiagStrings(AsmMatcherInfo &Info, raw_ostream & static void emitRegisterMatchErrorFunc(AsmMatcherInfo &Info, raw_ostream &OS) { OS << "static unsigned getDiagKindFromRegisterClass(MatchClassKind " "RegisterClass) {\n"; - OS << " switch (RegisterClass) {\n"; - - for (const auto &CI: Info.Classes) { - if (CI.isRegisterClass() && !CI.DiagnosticType.empty()) { - OS << " case " << CI.Name << ":\n"; - OS << " return " << Info.Target.getName() << "AsmParser::Match_" - << CI.DiagnosticType << ";\n"; + if (std::none_of(Info.Classes.begin(), Info.Classes.end(), + [](const ClassInfo &CI) { + return CI.isRegisterClass() && !CI.DiagnosticType.empty(); + })) { + OS << " return MCTargetAsmParser::Match_InvalidOperand;\n"; + } else { + OS << " switch (RegisterClass) {\n"; + for (const auto &CI: Info.Classes) { + if (CI.isRegisterClass() && !CI.DiagnosticType.empty()) { + OS << " case " << CI.Name << ":\n"; + OS << " return " << Info.Target.getName() << "AsmParser::Match_" + << CI.DiagnosticType << ";\n"; + } } + + OS << " default:\n"; + OS << " return MCTargetAsmParser::Match_InvalidOperand;\n"; + + OS << " }\n"; } - - OS << " default:\n"; - OS << " return MCTargetAsmParser::Match_InvalidOperand;\n"; - - OS << " }\n"; OS << "}\n\n"; }