[llvm] r341581 - [ARC] Prevent InstPrinter from crashing on unknown condition codes.

Tatyana Krasnukha via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 6 12:58:26 PDT 2018


Author: tkrasnukha
Date: Thu Sep  6 12:58:26 2018
New Revision: 341581

URL: http://llvm.org/viewvc/llvm-project?rev=341581&view=rev
Log:
[ARC] Prevent InstPrinter from crashing on unknown condition codes.

Summary:
Instruction printer shouldn't crash with assertions due to incorrect input data. llvm_unreachable is not intended for runtime error handling.

Reviewers: petecoup

Reviewed By: petecoup

Differential Revision: https://reviews.llvm.org/D51728

Modified:
    llvm/trunk/lib/Target/ARC/InstPrinter/ARCInstPrinter.cpp
    llvm/trunk/test/MC/Disassembler/ARC/br.txt

Modified: llvm/trunk/lib/Target/ARC/InstPrinter/ARCInstPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARC/InstPrinter/ARCInstPrinter.cpp?rev=341581&r1=341580&r2=341581&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARC/InstPrinter/ARCInstPrinter.cpp (original)
+++ llvm/trunk/lib/Target/ARC/InstPrinter/ARCInstPrinter.cpp Thu Sep  6 12:58:26 2018
@@ -20,7 +20,6 @@
 #include "llvm/MC/MCSymbol.h"
 #include "llvm/Support/Casting.h"
 #include "llvm/Support/Debug.h"
-#include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/raw_ostream.h"
 
 using namespace llvm;
@@ -29,6 +28,12 @@ using namespace llvm;
 
 #include "ARCGenAsmWriter.inc"
 
+template <class T>
+static const char *BadConditionCode(T cc) {
+  DEBUG(dbgs() << "Unknown condition code passed: " << cc << "\n");
+  return "{unknown-cc}";
+}
+
 static const char *ARCBRCondCodeToString(ARCCC::BRCondCode BRCC) {
   switch (BRCC) {
   case ARCCC::BREQ:
@@ -44,7 +49,7 @@ static const char *ARCBRCondCodeToString
   case ARCCC::BRHS:
     return "hs";
   }
-  llvm_unreachable("Unhandled ARCCC::BRCondCode");
+  return BadConditionCode(BRCC);
 }
 
 static const char *ARCCondCodeToString(ARCCC::CondCode CC) {
@@ -86,7 +91,7 @@ static const char *ARCCondCodeToString(A
   case ARCCC::Z:
     return "z";
   }
-  llvm_unreachable("Unhandled ARCCC::CondCode");
+  return BadConditionCode(CC);
 }
 
 void ARCInstPrinter::printRegName(raw_ostream &OS, unsigned RegNo) const {

Modified: llvm/trunk/test/MC/Disassembler/ARC/br.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Disassembler/ARC/br.txt?rev=341581&r1=341580&r2=341581&view=diff
==============================================================================
--- llvm/trunk/test/MC/Disassembler/ARC/br.txt (original)
+++ llvm/trunk/test/MC/Disassembler/ARC/br.txt Thu Sep  6 12:58:26 2018
@@ -27,3 +27,5 @@
 # CHECK: b -68
 0xbd 0x07 0xcf 0xff
 
+# CHECK: b{unknown-cc} 4096
+0x00 0x00 0x9e 0x00
\ No newline at end of file




More information about the llvm-commits mailing list