summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2018-01-06 06:41:07 +0000
committerCraig Topper <craig.topper@intel.com>2018-01-06 06:41:07 +0000
commit36d8da33584bc9e554613ccff691f8f1dd582cc6 (patch)
tree88796c6fc8333793a15faf7d5a8c2addf31e5e71 /llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
parent8c2ea74e74752399d00a84fcfe831e1e312088dd (diff)
downloadbcm5719-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.cpp11
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");
}
}
OpenPOWER on IntegriCloud