From 7895ae31350d98f7698365f187b08471918a55e7 Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Thu, 31 Jul 2014 23:03:22 +0000 Subject: [PATCH] X86 MC: Reject invalid segment registers before a memory operand colon Previously we would execute unreachable during object emission. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214456 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/AsmParser/X86AsmParser.cpp | 3 +++ test/MC/X86/x86_errors.s | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/lib/Target/X86/AsmParser/X86AsmParser.cpp b/lib/Target/X86/AsmParser/X86AsmParser.cpp index c60bbb40033..78b56b744f8 100644 --- a/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -1632,6 +1632,9 @@ std::unique_ptr X86AsmParser::ParseATTOperand() { 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); } diff --git a/test/MC/X86/x86_errors.s b/test/MC/X86/x86_errors.s index 51f2e8e1468..0b3bc7f4350 100644 --- a/test/MC/X86/x86_errors.s +++ b/test/MC/X86/x86_errors.s @@ -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