X86 MC: Don't crash on empty memory operand parens
authorReid Kleckner <reid@kleckner.net>
Thu, 31 Jul 2014 23:26:35 +0000 (23:26 +0000)
committerReid Kleckner <reid@kleckner.net>
Thu, 31 Jul 2014 23:26:35 +0000 (23:26 +0000)
Instead, create an absolute memory operand.

Fixes PR20504.

llvm-svn: 214457

llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
llvm/test/MC/X86/x86_operands.s

index 78b56b7..85de47b 100644 (file)
@@ -1880,8 +1880,10 @@ std::unique_ptr<X86Operand> X86AsmParser::ParseMemOperand(unsigned SegReg,
     return nullptr;
   }
 
-  return X86Operand::CreateMem(SegReg, Disp, BaseReg, IndexReg, Scale,
-                               MemStart, MemEnd);
+  if (SegReg || BaseReg || IndexReg)
+    return X86Operand::CreateMem(SegReg, Disp, BaseReg, IndexReg, Scale,
+                                 MemStart, MemEnd);
+  return X86Operand::CreateMem(Disp, MemStart, MemEnd);
 }
 
 bool X86AsmParser::ParseInstruction(ParseInstructionInfo &Info, StringRef Name,
index b34713d..2258a95 100644 (file)
         call *%eax
 # CHECK: calll *4(%eax)
         call *4(%eax)
+foo:
+       calll foo()
+# CHECK: calll foo{{$}}
+       calll foo(,)
+# CHECK: calll foo{{$}}
 
 # CHECK: movl  %gs:8, %eax
 movl %gs:8, %eax