[ms-inline asm] Pass the length of the IDVal, so we can do a proper AsmRewrite.
authorChad Rosier <mcrosier@apple.com>
Tue, 12 Feb 2013 19:42:32 +0000 (19:42 +0000)
committerChad Rosier <mcrosier@apple.com>
Tue, 12 Feb 2013 19:42:32 +0000 (19:42 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@174999 91177308-0d34-0410-b5e6-96231b3b80d8

lib/MC/MCParser/AsmParser.cpp

index a4b4a549579175cb2732722de343271965f89ef3..c01ea33f647a66e2575c9f4168ed884076b9742b 100644 (file)
@@ -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;
 }