diff --git a/llvm/lib/Target/M68k/Disassembler/M68kDisassembler.cpp b/llvm/lib/Target/M68k/Disassembler/M68kDisassembler.cpp --- a/llvm/lib/Target/M68k/Disassembler/M68kDisassembler.cpp +++ b/llvm/lib/Target/M68k/Disassembler/M68kDisassembler.cpp @@ -451,7 +451,8 @@ llvm_unreachable("invalid imm"); } - Scratch = (Scratch << NumToRead) | Reader.readBits(NumToRead); + Scratch = (NumToRead < 32) ? (Scratch << NumToRead) : 0; + Scratch |= Reader.readBits(NumToRead); } DecodeStatus M68kDisassembler::getInstruction(MCInst &Instr, uint64_t &Size,