diff --git a/llvm/lib/MC/MCParser/MasmParser.cpp b/llvm/lib/MC/MCParser/MasmParser.cpp --- a/llvm/lib/MC/MCParser/MasmParser.cpp +++ b/llvm/lib/MC/MCParser/MasmParser.cpp @@ -2440,6 +2440,8 @@ const StringRef nextVal = nextTok.getString(); const SMLoc nextLoc = nextTok.getLoc(); + const AsmToken peekTok = Lexer.peekTok(); + // There are several entities interested in parsing infix directives: // // 1. Asm parser extensions. For example, platform-specific parsers @@ -2483,25 +2485,55 @@ Lex(); return parseDirectiveEquate(nextVal, IDVal, DirKind); case DK_BYTE: + if (peekTok.is(AsmToken::Identifier) && + peekTok.getString().equals_lower("ptr")) { + // Size directive; part of an instruction. + break; + } + LLVM_FALLTHROUGH; case DK_SBYTE: case DK_DB: Lex(); return parseDirectiveNamedValue(nextVal, 1, IDVal, IDLoc); case DK_WORD: + if (peekTok.is(AsmToken::Identifier) && + peekTok.getString().equals_lower("ptr")) { + // Size directive; part of an instruction. + break; + } + LLVM_FALLTHROUGH; case DK_SWORD: case DK_DW: Lex(); return parseDirectiveNamedValue(nextVal, 2, IDVal, IDLoc); case DK_DWORD: + if (peekTok.is(AsmToken::Identifier) && + peekTok.getString().equals_lower("ptr")) { + // Size directive; part of an instruction. + break; + } + LLVM_FALLTHROUGH; case DK_SDWORD: case DK_DD: Lex(); return parseDirectiveNamedValue(nextVal, 4, IDVal, IDLoc); case DK_FWORD: + if (peekTok.is(AsmToken::Identifier) && + peekTok.getString().equals_lower("ptr")) { + // Size directive; part of an instruction. + break; + } + LLVM_FALLTHROUGH; case DK_DF: Lex(); return parseDirectiveNamedValue(nextVal, 6, IDVal, IDLoc); case DK_QWORD: + if (peekTok.is(AsmToken::Identifier) && + peekTok.getString().equals_lower("ptr")) { + // Size directive; part of an instruction. + break; + } + LLVM_FALLTHROUGH; case DK_SQWORD: case DK_DQ: Lex();