diff options
author | Craig Topper <craig.topper@intel.com> | 2018-01-06 06:41:07 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@intel.com> | 2018-01-06 06:41:07 +0000 |
commit | 36d8da33584bc9e554613ccff691f8f1dd582cc6 (patch) | |
tree | 88796c6fc8333793a15faf7d5a8c2addf31e5e71 /llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp | |
parent | 8c2ea74e74752399d00a84fcfe831e1e312088dd (diff) | |
download | bcm5719-llvm-36d8da33584bc9e554613ccff691f8f1dd582cc6.tar.gz bcm5719-llvm-36d8da33584bc9e554613ccff691f8f1dd582cc6.zip |
[X86] When parsing rounding mode operands, provide a proper end location so we don't crash when trying to print an error message using it.
llvm-svn: 321930
Diffstat (limited to 'llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp')
-rw-r--r-- | llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp index f1ce430f332..95ea4528e2a 100644 --- a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -825,7 +825,7 @@ private: bool ParseIntelDotOperator(IntelExprStateMachine &SM, SMLoc &End); unsigned IdentifyIntelInlineAsmOperator(StringRef Name); unsigned ParseIntelInlineAsmOperator(unsigned OpKind); - std::unique_ptr<X86Operand> ParseRoundingModeOp(SMLoc Start, SMLoc End); + std::unique_ptr<X86Operand> ParseRoundingModeOp(SMLoc Start); bool ParseIntelNamedOperator(StringRef Name, IntelExprStateMachine &SM); void RewriteIntelExpression(IntelExprStateMachine &SM, SMLoc Start, SMLoc End); @@ -1595,7 +1595,7 @@ bool X86AsmParser::ParseIntelInlineAsmIdentifier(const MCExpr *&Val, //ParseRoundingModeOp - Parse AVX-512 rounding mode operand std::unique_ptr<X86Operand> -X86AsmParser::ParseRoundingModeOp(SMLoc Start, SMLoc End) { +X86AsmParser::ParseRoundingModeOp(SMLoc Start) { MCAsmParser &Parser = getParser(); const AsmToken &Tok = Parser.getTok(); // Eat "{" and mark the current place. @@ -1616,6 +1616,7 @@ X86AsmParser::ParseRoundingModeOp(SMLoc Start, SMLoc End) { Parser.Lex(); // Eat the sae if (!getLexer().is(AsmToken::RCurly)) return ErrorOperand(Tok.getLoc(), "Expected } at this point"); + SMLoc End = Tok.getEndLoc(); Parser.Lex(); // Eat "}" const MCExpr *RndModeOp = MCConstantExpr::create(rndMode, Parser.getContext()); @@ -1794,7 +1795,7 @@ std::unique_ptr<X86Operand> X86AsmParser::ParseIntelOperand() { // Rounding mode operand. if (getSTI().getFeatureBits()[X86::FeatureAVX512] && getLexer().is(AsmToken::LCurly)) - return ParseRoundingModeOp(Start, End); + return ParseRoundingModeOp(Start); // Register operand. unsigned RegNo = 0; @@ -1895,9 +1896,9 @@ std::unique_ptr<X86Operand> X86AsmParser::ParseATTOperand() { return X86Operand::CreateImm(Val, Start, End); } case AsmToken::LCurly:{ - SMLoc Start = Parser.getTok().getLoc(), End; + SMLoc Start = Parser.getTok().getLoc(); if (getSTI().getFeatureBits()[X86::FeatureAVX512]) - return ParseRoundingModeOp(Start, End); + return ParseRoundingModeOp(Start); return ErrorOperand(Start, "Unexpected '{' in expression"); } } |