From 5f6b4d3fc5b3d3d2888cc24061165cd0441c5a14 Mon Sep 17 00:00:00 2001 From: Chad Rosier Date: Tue, 12 Feb 2013 19:42:32 +0000 Subject: [PATCH] [ms-inline asm] Pass the length of the IDVal, so we can do a proper AsmRewrite. llvm-svn: 174999 --- llvm/lib/MC/MCParser/AsmParser.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp index a4b4a5495791..c01ea33f647a 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -444,7 +444,8 @@ private: bool ParseDirectiveEndr(SMLoc DirectiveLoc); // ".endr" // "_emit" - bool ParseDirectiveEmit(SMLoc DirectiveLoc, ParseStatementInfo &Info); + bool ParseDirectiveEmit(SMLoc DirectiveLoc, ParseStatementInfo &Info, + size_t len); void initializeDirectiveKindMap(); }; @@ -1448,7 +1449,7 @@ bool AsmParser::ParseStatement(ParseStatementInfo &Info) { // _emit or __emit if (ParsingInlineAsm && (IDVal == "_emit" || IDVal == "__emit")) - return ParseDirectiveEmit(IDLoc, Info); + return ParseDirectiveEmit(IDLoc, Info, IDVal.size()); CheckForValidSection(); @@ -3985,7 +3986,7 @@ bool AsmParser::ParseDirectiveEndr(SMLoc DirectiveLoc) { return false; } -bool AsmParser::ParseDirectiveEmit(SMLoc IDLoc, ParseStatementInfo &Info) { +bool AsmParser::ParseDirectiveEmit(SMLoc IDLoc, ParseStatementInfo &Info, size_t len) { const MCExpr *Value; SMLoc ExprLoc = getLexer().getLoc(); if (ParseExpression(Value)) @@ -3997,7 +3998,7 @@ bool AsmParser::ParseDirectiveEmit(SMLoc IDLoc, ParseStatementInfo &Info) { if (!isUIntN(8, IntValue) && !isIntN(8, IntValue)) return Error(ExprLoc, "literal value out of range for directive"); - Info.AsmRewrites->push_back(AsmRewrite(AOK_Emit, IDLoc, 5)); + Info.AsmRewrites->push_back(AsmRewrite(AOK_Emit, IDLoc, len)); return false; }