diff --git a/opcodes/arc-dis.c b/opcodes/arc-dis.c
index ee598918..0b9024a6 100644
--- a/opcodes/arc-dis.c
+++ b/opcodes/arc-dis.c
@@ -668,9 +668,8 @@ arc_insn_length (bfd_byte msb, bfd_byte lsb, struct disassemble_info *info)
       return (major_opcode > 0x7) ? 2 : 4;
       break;
 
-    default:
-      abort ();
     }
+  return 0;
 }
 
 /* Extract and return the value of OPERAND from the instruction whose value
@@ -1059,6 +1058,9 @@ print_insn_arc (bfd_vma memaddr,
 
   insn_len = arc_insn_length (buffer[highbyte], buffer[lowbyte], info);
   pr_debug ("instruction length = %d bytes\n", insn_len);
+  if (insn_len == 0) {
+    return 0;
+  }
   arc_infop = info->private_data;
   arc_infop->insn_len = insn_len;
 
