From 35fcd18d4332f8a1de5beabbb3e4ab13ef0739f4 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Tue, 26 Mar 2019 03:12:41 +0000 Subject: [PATCH] X86AsmParser: Do not process a non-existent token This error can only happen if an unfinished operation is at Eof. Patch by Brandon Jones Differential Revision: https://reviews.llvm.org/D57379 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@356972 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/AsmParser/X86AsmParser.cpp | 5 +++++ test/MC/AsmParser/unfinished-op.s | 4 ++++ test/MC/X86/x86_operands.s | 4 ++-- 3 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 test/MC/AsmParser/unfinished-op.s diff --git a/lib/Target/X86/AsmParser/X86AsmParser.cpp b/lib/Target/X86/AsmParser/X86AsmParser.cpp index 75db48928c9..273edadb061 100644 --- a/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -2992,6 +2992,11 @@ bool X86AsmParser::MatchAndEmitATTInstruction(SMLoc IDLoc, unsigned &Opcode, case Match_MnemonicFail: break; } + if (Op.getToken().empty()) { + Error(IDLoc, "instruction must have size higher than 0", EmptyRange, + MatchingInlineAsm); + return true; + } // FIXME: Ideally, we would only attempt suffix matches for things which are // valid prefixes, and we could just infer the right unambiguous diff --git a/test/MC/AsmParser/unfinished-op.s b/test/MC/AsmParser/unfinished-op.s new file mode 100644 index 00000000000..079e036b160 --- /dev/null +++ b/test/MC/AsmParser/unfinished-op.s @@ -0,0 +1,4 @@ +# RUN: not llvm-mc -triple i386-unknown-unknown %s 2>&1 > /dev/null| FileCheck %s --check-prefix=CHECK-ERROR + +#CHECK-ERROR: error: instruction must have size higher than 0 + .byte 64;"" diff --git a/test/MC/X86/x86_operands.s b/test/MC/X86/x86_operands.s index 3aa1b8d7fb8..70b11faf003 100644 --- a/test/MC/X86/x86_operands.s +++ b/test/MC/X86/x86_operands.s @@ -9,7 +9,7 @@ addl $a, %eax # CHECK: addl $3, %eax addl $1 + 2, %eax - + # Disambiguation # CHECK: addl $1, 8 @@ -26,7 +26,7 @@ addl $1, (%eax) # CHECK: addl $1, 8(,%eax) addl $1, (4+4)(,%eax) - + # Indirect Memory Operands # CHECK: addl $1, 1(%eax) addl $1, 1(%eax) -- 2.50.1