From: Benjamin Kramer Date: Sat, 30 Jul 2016 11:31:24 +0000 (+0000) Subject: [X86] Fix lifetime of SMRange temporaries. X-Git-Tag: llvmorg-4.0.0-rc1~13749 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=205159c6283b69042d5cb01449827f4991f26083;p=platform%2Fupstream%2Fllvm.git [X86] Fix lifetime of SMRange temporaries. Found by asan -fsanitize-address-use-after-scope. llvm-svn: 277266 --- diff --git a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp index bf9f240..d90fa16 100644 --- a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -2685,8 +2685,8 @@ bool X86AsmParser::MatchAndEmitATTInstruction(SMLoc IDLoc, unsigned &Opcode, // mnemonic was invalid. if (std::count(std::begin(Match), std::end(Match), Match_MnemonicFail) == 4) { if (!WasOriginallyInvalidOperand) { - ArrayRef Ranges = - MatchingInlineAsm ? EmptyRanges : Op.getLocRange(); + SMRange OpRange = Op.getLocRange(); + ArrayRef Ranges = MatchingInlineAsm ? EmptyRanges : OpRange; return Error(IDLoc, "invalid instruction mnemonic '" + Base + "'", Ranges, MatchingInlineAsm); } @@ -2839,8 +2839,8 @@ bool X86AsmParser::MatchAndEmitIntelInstruction(SMLoc IDLoc, unsigned &Opcode, } else if (NumSuccessfulMatches > 1) { assert(UnsizedMemOp && "multiple matches only possible with unsized memory operands"); - ArrayRef Ranges = - MatchingInlineAsm ? EmptyRanges : UnsizedMemOp->getLocRange(); + SMRange OpRange = UnsizedMemOp->getLocRange(); + ArrayRef Ranges = MatchingInlineAsm ? EmptyRanges : OpRange; return Error(UnsizedMemOp->getStartLoc(), "ambiguous operand size for instruction '" + Mnemonic + "\'", Ranges, MatchingInlineAsm);