diff --git a/llvm/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp b/llvm/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp --- a/llvm/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp +++ b/llvm/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp @@ -724,19 +724,7 @@ } if (Kind == MCExpr::SymbolRef) { - Mips::Fixups FixupKind = Mips::Fixups(0); - - switch(cast(Expr)->getKind()) { - default: llvm_unreachable("Unknown fixup kind!"); - break; - case MCSymbolRefExpr::VK_None: - // FIXME: This is ok for O32/N32 but not N64. - FixupKind = Mips::fixup_Mips_32; - break; - } // switch - - Fixups.push_back(MCFixup::create(0, Expr, MCFixupKind(FixupKind))); - return 0; + Ctx.reportError(Expr->getLoc(), "expected 16-bit signed immediate"); } return 0; } diff --git a/llvm/test/MC/Mips/reloc-implicit-constraints-error.s b/llvm/test/MC/Mips/reloc-implicit-constraints-error.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/Mips/reloc-implicit-constraints-error.s @@ -0,0 +1,15 @@ +# RUN: not llvm-mc -triple mips-unknown-linux-gnu -filetype obj -o /dev/null %s 2>%t1 +# RUN: FileCheck %s < %t1 + +# RUN: not llvm-mc -triple mips64-unknown-linux-gnu -filetype obj -o /dev/null %s 2>%t1 +# RUN: FileCheck %s < %t1 + +# Check that implicit constraints error + + ori $4, $4, start # CHECK: [[@LINE]]:{{[0-9]+}}: error: expected 16-bit signed immediate + ori $4, $4, (start - .) # CHECK: [[@LINE]]:{{[0-9]+}}: error: expected 16-bit signed immediate + + addiu $4, $4, start # CHECK: [[@LINE]]:{{[0-9]+}}: error: expected 16-bit signed immediate + addiu $4, $4, (start - .) # CHECK: [[@LINE]]:{{[0-9]+}}: error: expected 16-bit signed immediate + +start: