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 @@ -723,21 +723,8 @@ return 0; } - 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; - } + if (Kind == MCExpr::SymbolRef) + Ctx.reportError(Expr->getLoc(), "expected an immediate"); return 0; } diff --git a/llvm/test/MC/Mips/imm-operand-err.s b/llvm/test/MC/Mips/imm-operand-err.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/Mips/imm-operand-err.s @@ -0,0 +1,15 @@ +## Print an error if a non-immediate operand is used while an immediate is expected +# RUN: not llvm-mc -filetype=obj -triple=mips -o /dev/null %s 2>&1 | FileCheck %s +# RUN: not llvm-mc -filetype=obj -triple=mips64 -o /dev/null %s 2>&1 | FileCheck %s + +# CHECK: [[#@LINE+1]]:16: error: expected an immediate + ori $4, $4, start +# CHECK: [[#@LINE+1]]:17: error: expected an immediate + ori $4, $4, (start - .) + +# CHECK: [[#@LINE+1]]:18: error: expected an immediate + addiu $4, $4, start +# CHECK: [[#@LINE+1]]:19: error: expected an immediate + addiu $4, $4, (start - .) + +start: