From: Justin Bogner Date: Tue, 23 Jun 2015 07:28:57 +0000 (+0000) Subject: [mips] Fix some UB by shifting before sign-extending X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=46a8f931444363ad3387ae26189e83dc16155696;p=oota-llvm.git [mips] Fix some UB by shifting before sign-extending Avoid shifting a negative value by sign-extending after the shift. Fixes a couple of tests that were failing under ubsan. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@240381 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/Mips/Disassembler/MipsDisassembler.cpp b/lib/Target/Mips/Disassembler/MipsDisassembler.cpp index c8629b5d7bd..4a17d518e85 100644 --- a/lib/Target/Mips/Disassembler/MipsDisassembler.cpp +++ b/lib/Target/Mips/Disassembler/MipsDisassembler.cpp @@ -1855,6 +1855,6 @@ static DecodeStatus DecodeMovePRegPair(MCInst &Inst, unsigned Insn, static DecodeStatus DecodeSimm23Lsl2(MCInst &Inst, unsigned Insn, uint64_t Address, const void *Decoder) { - Inst.addOperand(MCOperand::createImm(SignExtend32<23>(Insn) << 2)); + Inst.addOperand(MCOperand::createImm(SignExtend32<25>(Insn << 2))); return MCDisassembler::Success; }