[llvm] r214456 - X86 MC: Reject invalid segment registers before a memory operand colon

Reid Kleckner reid at kleckner.net
Thu Jul 31 16:03:22 PDT 2014


Author: rnk
Date: Thu Jul 31 18:03:22 2014
New Revision: 214456

URL: http://llvm.org/viewvc/llvm-project?rev=214456&view=rev
Log:
X86 MC: Reject invalid segment registers before a memory operand colon

Previously we would execute unreachable during object emission.

Modified:
    llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp
    llvm/trunk/test/MC/X86/x86_errors.s

Modified: llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp?rev=214456&r1=214455&r2=214456&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp (original)
+++ llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp Thu Jul 31 18:03:22 2014
@@ -1632,6 +1632,9 @@ std::unique_ptr<X86Operand> X86AsmParser
     if (getLexer().isNot(AsmToken::Colon))
       return X86Operand::CreateReg(RegNo, Start, End);
 
+    if (!X86MCRegisterClasses[X86::SEGMENT_REGRegClassID].contains(RegNo))
+      return ErrorOperand(Start, "invalid segment register");
+
     getParser().Lex(); // Eat the colon.
     return ParseMemOperand(RegNo, Start);
   }

Modified: llvm/trunk/test/MC/X86/x86_errors.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/X86/x86_errors.s?rev=214456&r1=214455&r2=214456&view=diff
==============================================================================
--- llvm/trunk/test/MC/X86/x86_errors.s (original)
+++ llvm/trunk/test/MC/X86/x86_errors.s Thu Jul 31 18:03:22 2014
@@ -46,3 +46,7 @@ movl %eax,(,%bx)
 
 // 32: error: invalid operand for instruction
 outb al, 4
+
+// 32: error: invalid segment register
+// 64: error: invalid segment register
+movl %eax:0x00, %ebx





More information about the llvm-commits mailing list