summaryrefslogtreecommitdiff
path: root/test/MC
diff options
context:
space:
mode:
authorMatheus Almeida <matheus.almeida@imgtec.com>2013-12-13 11:11:02 +0000
committerMatheus Almeida <matheus.almeida@imgtec.com>2013-12-13 11:11:02 +0000
commitb90ed644fc9eaba125db767ca2f7db0efc2edd02 (patch)
tree0340deb3598f49a779367713d02ee83018b182d5 /test/MC
parent09b39002068d9cbcb44237a2fb8b39de72b4d6cd (diff)
downloadllvm-b90ed644fc9eaba125db767ca2f7db0efc2edd02.tar.gz
llvm-b90ed644fc9eaba125db767ca2f7db0efc2edd02.tar.bz2
llvm-b90ed644fc9eaba125db767ca2f7db0efc2edd02.tar.xz
[mips] Add checks for alignment and maximum displacements for most of the
branch instructions for mips and micromips instruction sets thus avoiding the situation of generating branches to undesired locations if offsets cannot be encoded. This patch also checks if a fixup cannot be applied and returns a fatal error if that's the case. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@197223 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/MC')
-rw-r--r--test/MC/Mips/micromips-bad-branches.s225
-rw-r--r--test/MC/Mips/micromips-diagnostic-fixup.s10
-rw-r--r--test/MC/Mips/mips-bad-branches.s409
-rw-r--r--test/MC/Mips/mips-diagnostic-fixup.s10
4 files changed, 654 insertions, 0 deletions
diff --git a/test/MC/Mips/micromips-bad-branches.s b/test/MC/Mips/micromips-bad-branches.s
new file mode 100644
index 0000000000..573605e18d
--- /dev/null
+++ b/test/MC/Mips/micromips-bad-branches.s
@@ -0,0 +1,225 @@
+# RUN: not llvm-mc %s -triple=mipsel-unknown-linux -mcpu=mips32r2 -mattr=+msa -arch=mips -mattr=+micromips 2>&1 | FileCheck %s
+#
+# CHECK: error: branch to misaligned address
+# CHECK: b -65535
+# CHECK: error: branch target out of range
+# CHECK: b -65537
+# CHECK: error: branch to misaligned address
+# CHECK: b 65535
+# CHECK: error: branch target out of range
+# CHECK: b 65536
+
+# CHECK: error: branch to misaligned address
+# CHECK: beq $1, $1, -65535
+# CHECK: error: branch target out of range
+# CHECK: beq $1, $1, -65537
+# CHECK: error: branch to misaligned address
+# CHECK: beq $1, $1, 65535
+# CHECK: error: branch target out of range
+# CHECK: beq $1, $1, 65536
+
+# CHECK: error: branch to misaligned address
+# CHECK: bne $1, $1, -65535
+# CHECK: error: branch target out of range
+# CHECK: bne $1, $1, -65537
+# CHECK: error: branch to misaligned address
+# CHECK: bne $1, $1, 65535
+# CHECK: error: branch target out of range
+# CHECK: bne $1, $1, 65536
+
+# CHECK: error: branch to misaligned address
+# CHECK: bal -65535
+# CHECK: error: branch target out of range
+# CHECK: bal -65537
+# CHECK: error: branch to misaligned address
+# CHECK: bal 65535
+# CHECK: error: branch target out of range
+# CHECK: bal 65536
+
+# CHECK: error: branch to misaligned address
+# CHECK: bgez $1, -65535
+# CHECK: error: branch target out of range
+# CHECK: bgez $1, -65537
+# CHECK: error: branch to misaligned address
+# CHECK: bgez $1, 65535
+# CHECK: error: branch target out of range
+# CHECK: bgez $1, 65536
+
+# CHECK: error: branch to misaligned address
+# CHECK: bgtz $1, -65535
+# CHECK: error: branch target out of range
+# CHECK: bgtz $1, -65537
+# CHECK: error: branch to misaligned address
+# CHECK: bgtz $1, 65535
+# CHECK: error: branch target out of range
+# CHECK: bgtz $1, 65536
+
+# CHECK: error: branch to misaligned address
+# CHECK: blez $1, -65535
+# CHECK: error: branch target out of range
+# CHECK: blez $1, -65537
+# CHECK: error: branch to misaligned address
+# CHECK: blez $1, 65535
+# CHECK: error: branch target out of range
+# CHECK: blez $1, 65536
+
+# CHECK: error: branch to misaligned address
+# CHECK: bltz $1, -65535
+# CHECK: error: branch target out of range
+# CHECK: bltz $1, -65537
+# CHECK: error: branch to misaligned address
+# CHECK: bltz $1, 65535
+# CHECK: error: branch target out of range
+# CHECK: bltz $1, 65536
+
+# CHECK: error: branch to misaligned address
+# CHECK: bgezal $1, -65535
+# CHECK: error: branch target out of range
+# CHECK: bgezal $1, -65537
+# CHECK: error: branch to misaligned address
+# CHECK: bgezal $1, 65535
+# CHECK: error: branch target out of range
+# CHECK: bgezal $1, 65536
+
+# CHECK: error: branch to misaligned address
+# CHECK: bltzal $1, -65535
+# CHECK: error: branch target out of range
+# CHECK: bltzal $1, -65537
+# CHECK: error: branch to misaligned address
+# CHECK: bltzal $1, 65535
+# CHECK: error: branch target out of range
+# CHECK: bltzal $1, 65536
+
+# CHECK: error: branch to misaligned address
+# CHECK: bc1f -65535
+# CHECK: error: branch target out of range
+# CHECK: bc1f -65537
+# CHECK: error: branch to misaligned address
+# CHECK: bc1f 65535
+# CHECK: error: branch target out of range
+# CHECK: bc1f 65536
+
+# CHECK: error: branch to misaligned address
+# CHECK: bc1f $fcc0, -65535
+# CHECK: error: branch target out of range
+# CHECK: bc1f $fcc0, -65537
+# CHECK: error: branch to misaligned address
+# CHECK: bc1f $fcc0, 65535
+# CHECK: error: branch target out of range
+# CHECK: bc1f $fcc0, 65536
+
+# CHECK: error: branch to misaligned address
+# CHECK: bc1t -65535
+# CHECK: error: branch target out of range
+# CHECK: bc1t -65537
+# CHECK: error: branch to misaligned address
+# CHECK: bc1t 65535
+# CHECK: error: branch target out of range
+# CHECK: bc1t 65536
+
+# CHECK: error: branch to misaligned address
+# CHECK: bc1t $fcc0, -65535
+# CHECK: error: branch target out of range
+# CHECK: bc1t $fcc0, -65537
+# CHECK: error: branch to misaligned address
+# CHECK: bc1t $fcc0, 65535
+# CHECK: error: branch target out of range
+# CHECK: bc1t $fcc0, 65536
+
+ b -65535
+ b -65536
+ b -65537
+ b 65534
+ b 65535
+ b 65536
+
+ beq $1, $1, -65535
+ beq $1, $1, -65536
+ beq $1, $1, -65537
+ beq $1, $1, 65534
+ beq $1, $1, 65535
+ beq $1, $1, 65536
+
+ bne $1, $1, -65535
+ bne $1, $1, -65536
+ bne $1, $1, -65537
+ bne $1, $1, 65534
+ bne $1, $1, 65535
+ bne $1, $1, 65536
+
+ bal -65535
+ bal -65536
+ bal -65537
+ bal 65534
+ bal 65535
+ bal 65536
+
+ bgez $1, -65535
+ bgez $1, -65536
+ bgez $1, -65537
+ bgez $1, 65534
+ bgez $1, 65535
+ bgez $1, 65536
+
+ bgtz $1, -65535
+ bgtz $1, -65536
+ bgtz $1, -65537
+ bgtz $1, 65534
+ bgtz $1, 65535
+ bgtz $1, 65536
+
+ blez $1, -65535
+ blez $1, -65536
+ blez $1, -65537
+ blez $1, 65534
+ blez $1, 65535
+ blez $1, 65536
+
+ bltz $1, -65535
+ bltz $1, -65536
+ bltz $1, -65537
+ bltz $1, 65534
+ bltz $1, 65535
+ bltz $1, 65536
+
+ bgezal $1, -65535
+ bgezal $1, -65536
+ bgezal $1, -65537
+ bgezal $1, 65534
+ bgezal $1, 65535
+ bgezal $1, 65536
+
+ bltzal $1, -65535
+ bltzal $1, -65536
+ bltzal $1, -65537
+ bltzal $1, 65534
+ bltzal $1, 65535
+ bltzal $1, 65536
+
+ bc1f -65535
+ bc1f -65536
+ bc1f -65537
+ bc1f 65534
+ bc1f 65535
+ bc1f 65536
+
+ bc1f $fcc0, -65535
+ bc1f $fcc0, -65536
+ bc1f $fcc0, -65537
+ bc1f $fcc0, 65534
+ bc1f $fcc0, 65535
+ bc1f $fcc0, 65536
+
+ bc1t -65535
+ bc1t -65536
+ bc1t -65537
+ bc1t 65534
+ bc1t 65535
+ bc1t 65536
+
+ bc1t $fcc0, -65535
+ bc1t $fcc0, -65536
+ bc1t $fcc0, -65537
+ bc1t $fcc0, 65534
+ bc1t $fcc0, 65535
+ bc1t $fcc0, 65536
diff --git a/test/MC/Mips/micromips-diagnostic-fixup.s b/test/MC/Mips/micromips-diagnostic-fixup.s
new file mode 100644
index 0000000000..f8fe447c28
--- /dev/null
+++ b/test/MC/Mips/micromips-diagnostic-fixup.s
@@ -0,0 +1,10 @@
+# RUN: not llvm-mc %s -triple=mipsel-unknown-linux -mcpu=mips32r2 -arch=mips -mattr=+micromips 2>&1 -filetype=obj | FileCheck %s
+#
+# CHECK: LLVM ERROR: out of range PC16 fixup
+
+.text
+ b foo
+ .space 65536 - 8, 1 # -8 = size of b instr plus size of automatically inserted nop
+ nop # This instr makes the branch too long to fit into a 17-bit offset
+foo:
+ add $0,$0,$0
diff --git a/test/MC/Mips/mips-bad-branches.s b/test/MC/Mips/mips-bad-branches.s
new file mode 100644
index 0000000000..321b3c45f8
--- /dev/null
+++ b/test/MC/Mips/mips-bad-branches.s
@@ -0,0 +1,409 @@
+# RUN: not llvm-mc %s -triple=mipsel-unknown-linux -mcpu=mips32r2 -arch=mips 2>&1 | FileCheck %s
+#
+# CHECK: error: branch to misaligned address
+# CHECK: b -131069
+# CHECK: error: branch to misaligned address
+# CHECK: b -131070
+# CHECK: error: branch to misaligned address
+# CHECK: b -131071
+# CHECK: error: branch target out of range
+# CHECK: b -131073
+# CHECK: error: branch to misaligned address
+# CHECK: b 131069
+# CHECK: error: branch to misaligned address
+# CHECK: b 131070
+# CHECK: error: branch to misaligned address
+# CHECK: b 131071
+# CHECK: error: branch target out of range
+# CHECK: b 131072
+
+# CHECK: error: branch to misaligned address
+# CHECK: beq $1, $1, -131069
+# CHECK: error: branch to misaligned address
+# CHECK: beq $1, $1, -131070
+# CHECK: error: branch to misaligned address
+# CHECK: beq $1, $1, -131071
+# CHECK: error: branch target out of range
+# CHECK: beq $1, $1, -131073
+# CHECK: error: branch to misaligned address
+# CHECK: beq $1, $1, 131069
+# CHECK: error: branch to misaligned address
+# CHECK: beq $1, $1, 131070
+# CHECK: error: branch to misaligned address
+# CHECK: beq $1, $1, 131071
+# CHECK: error: branch target out of range
+# CHECK: beq $1, $1, 131072
+
+# CHECK: error: branch to misaligned address
+# CHECK: bne $1, $1, -131069
+# CHECK: error: branch to misaligned address
+# CHECK: bne $1, $1, -131070
+# CHECK: error: branch to misaligned address
+# CHECK: bne $1, $1, -131071
+# CHECK: error: branch target out of range
+# CHECK: bne $1, $1, -131073
+# CHECK: error: branch to misaligned address
+# CHECK: bne $1, $1, 131069
+# CHECK: error: branch to misaligned address
+# CHECK: bne $1, $1, 131070
+# CHECK: error: branch to misaligned address
+# CHECK: bne $1, $1, 131071
+# CHECK: error: branch target out of range
+# CHECK: bne $1, $1, 131072
+
+# CHECK: error: branch to misaligned address
+# CHECK: bal -131069
+# CHECK: error: branch to misaligned address
+# CHECK: bal -131070
+# CHECK: error: branch to misaligned address
+# CHECK: bal -131071
+# CHECK: error: branch target out of range
+# CHECK: bal -131073
+# CHECK: error: branch to misaligned address
+# CHECK: bal 131069
+# CHECK: error: branch to misaligned address
+# CHECK: bal 131070
+# CHECK: error: branch to misaligned address
+# CHECK: bal 131071
+# CHECK: error: branch target out of range
+# CHECK: bal 131072
+
+# CHECK: error: branch to misaligned address
+# CHECK: bgez $1, -131069
+# CHECK: error: branch to misaligned address
+# CHECK: bgez $1, -131070
+# CHECK: error: branch to misaligned address
+# CHECK: bgez $1, -131071
+# CHECK: error: branch target out of range
+# CHECK: bgez $1, -131073
+# CHECK: error: branch to misaligned address
+# CHECK: bgez $1, 131069
+# CHECK: error: branch to misaligned address
+# CHECK: bgez $1, 131070
+# CHECK: error: branch to misaligned address
+# CHECK: bgez $1, 131071
+# CHECK: error: branch target out of range
+# CHECK: bgez $1, 131072
+
+# CHECK: error: branch to misaligned address
+# CHECK: bgtz $1, -131069
+# CHECK: error: branch to misaligned address
+# CHECK: bgtz $1, -131070
+# CHECK: error: branch to misaligned address
+# CHECK: bgtz $1, -131071
+# CHECK: error: branch target out of range
+# CHECK: bgtz $1, -131073
+# CHECK: error: branch to misaligned address
+# CHECK: bgtz $1, 131069
+# CHECK: error: branch to misaligned address
+# CHECK: bgtz $1, 131070
+# CHECK: error: branch to misaligned address
+# CHECK: bgtz $1, 131071
+# CHECK: error: branch target out of range
+# CHECK: bgtz $1, 131072
+
+# CHECK: error: branch to misaligned address
+# CHECK: blez $1, -131069
+# CHECK: error: branch to misaligned address
+# CHECK: blez $1, -131070
+# CHECK: error: branch to misaligned address
+# CHECK: blez $1, -131071
+# CHECK: error: branch target out of range
+# CHECK: blez $1, -131073
+# CHECK: error: branch to misaligned address
+# CHECK: blez $1, 131069
+# CHECK: error: branch to misaligned address
+# CHECK: blez $1, 131070
+# CHECK: error: branch to misaligned address
+# CHECK: blez $1, 131071
+# CHECK: error: branch target out of range
+# CHECK: blez $1, 131072
+
+# CHECK: error: branch to misaligned address
+# CHECK: bltz $1, -131069
+# CHECK: error: branch to misaligned address
+# CHECK: bltz $1, -131070
+# CHECK: error: branch to misaligned address
+# CHECK: bltz $1, -131071
+# CHECK: error: branch target out of range
+# CHECK: bltz $1, -131073
+# CHECK: error: branch to misaligned address
+# CHECK: bltz $1, 131069
+# CHECK: error: branch to misaligned address
+# CHECK: bltz $1, 131070
+# CHECK: error: branch to misaligned address
+# CHECK: bltz $1, 131071
+# CHECK: error: branch target out of range
+# CHECK: bltz $1, 131072
+
+# CHECK: error: branch to misaligned address
+# CHECK: bgezal $1, -131069
+# CHECK: error: branch to misaligned address
+# CHECK: bgezal $1, -131070
+# CHECK: error: branch to misaligned address
+# CHECK: bgezal $1, -131071
+# CHECK: error: branch target out of range
+# CHECK: bgezal $1, -131073
+# CHECK: error: branch to misaligned address
+# CHECK: bgezal $1, 131069
+# CHECK: error: branch to misaligned address
+# CHECK: bgezal $1, 131070
+# CHECK: error: branch to misaligned address
+# CHECK: bgezal $1, 131071
+# CHECK: error: branch target out of range
+# CHECK: bgezal $1, 131072
+
+# CHECK: error: branch to misaligned address
+# CHECK: bltzal $1, -131069
+# CHECK: error: branch to misaligned address
+# CHECK: bltzal $1, -131070
+# CHECK: error: branch to misaligned address
+# CHECK: bltzal $1, -131071
+# CHECK: error: branch target out of range
+# CHECK: bltzal $1, -131073
+# CHECK: error: branch to misaligned address
+# CHECK: bltzal $1, 131069
+# CHECK: error: branch to misaligned address
+# CHECK: bltzal $1, 131070
+# CHECK: error: branch to misaligned address
+# CHECK: bltzal $1, 131071
+# CHECK: error: branch target out of range
+# CHECK: bltzal $1, 131072
+
+# CHECK: error: branch to misaligned address
+# CHECK: bc1f -131069
+# CHECK: error: branch to misaligned address
+# CHECK: bc1f -131070
+# CHECK: error: branch to misaligned address
+# CHECK: bc1f -131071
+# CHECK: error: branch target out of range
+# CHECK: bc1f -131073
+# CHECK: error: branch to misaligned address
+# CHECK: bc1f 131069
+# CHECK: error: branch to misaligned address
+# CHECK: bc1f 131070
+# CHECK: error: branch to misaligned address
+# CHECK: bc1f 131071
+# CHECK: error: branch target out of range
+# CHECK: bc1f 131072
+
+# CHECK: error: branch to misaligned address
+# CHECK: bc1f $fcc0, -131069
+# CHECK: error: branch to misaligned address
+# CHECK: bc1f $fcc0, -131070
+# CHECK: error: branch to misaligned address
+# CHECK: bc1f $fcc0, -131071
+# CHECK: error: branch target out of range
+# CHECK: bc1f $fcc0, -131073
+# CHECK: error: branch to misaligned address
+# CHECK: bc1f $fcc0, 131069
+# CHECK: error: branch to misaligned address
+# CHECK: bc1f $fcc0, 131070
+# CHECK: error: branch to misaligned address
+# CHECK: bc1f $fcc0, 131071
+# CHECK: error: branch target out of range
+# CHECK: bc1f $fcc0, 131072
+
+# CHECK: error: branch to misaligned address
+# CHECK: bc1t -131069
+# CHECK: error: branch to misaligned address
+# CHECK: bc1t -131070
+# CHECK: error: branch to misaligned address
+# CHECK: bc1t -131071
+# CHECK: error: branch target out of range
+# CHECK: bc1t -131073
+# CHECK: error: branch to misaligned address
+# CHECK: bc1t 131069
+# CHECK: error: branch to misaligned address
+# CHECK: bc1t 131070
+# CHECK: error: branch to misaligned address
+# CHECK: bc1t 131071
+# CHECK: error: branch target out of range
+# CHECK: bc1t 131072
+
+# CHECK: error: branch to misaligned address
+# CHECK: bc1t $fcc0, -131069
+# CHECK: error: branch to misaligned address
+# CHECK: bc1t $fcc0, -131070
+# CHECK: error: branch to misaligned address
+# CHECK: bc1t $fcc0, -131071
+# CHECK: error: branch target out of range
+# CHECK: bc1t $fcc0, -131073
+# CHECK: error: branch to misaligned address
+# CHECK: bc1t $fcc0, 131069
+# CHECK: error: branch to misaligned address
+# CHECK: bc1t $fcc0, 131070
+# CHECK: error: branch to misaligned address
+# CHECK: bc1t $fcc0, 131071
+# CHECK: error: branch target out of range
+# CHECK: bc1t $fcc0, 131072
+
+.text
+.set noat
+ b -131068
+ b -131069
+ b -131070
+ b -131071
+ b -131072
+ b -131073
+ b 131068
+ b 131069
+ b 131070
+ b 131071
+ b 131072
+
+ beq $1, $1, -131068
+ beq $1, $1, -131069
+ beq $1, $1, -131070
+ beq $1, $1, -131071
+ beq $1, $1, -131072
+ beq $1, $1, -131073
+ beq $1, $1, 131068
+ beq $1, $1, 131069
+ beq $1, $1, 131070
+ beq $1, $1, 131071
+ beq $1, $1, 131072
+
+ bne $1, $1, -131068
+ bne $1, $1, -131069
+ bne $1, $1, -131070
+ bne $1, $1, -131071
+ bne $1, $1, -131072
+ bne $1, $1, -131073
+ bne $1, $1, 131068
+ bne $1, $1, 131069
+ bne $1, $1, 131070
+ bne $1, $1, 131071
+ bne $1, $1, 131072
+
+ bal -131068
+ bal -131069
+ bal -131070
+ bal -131071
+ bal -131072
+ bal -131073
+ bal 131068
+ bal 131069
+ bal 131070
+ bal 131071
+ bal 131072
+
+ bgez $1, -131068
+ bgez $1, -131069
+ bgez $1, -131070
+ bgez $1, -131071
+ bgez $1, -131072
+ bgez $1, -131073
+ bgez $1, 131068
+ bgez $1, 131069
+ bgez $1, 131070
+ bgez $1, 131071
+ bgez $1, 131072
+
+ bgtz $1, -131068
+ bgtz $1, -131069
+ bgtz $1, -131070
+ bgtz $1, -131071
+ bgtz $1, -131072
+ bgtz $1, -131073
+ bgtz $1, 131068
+ bgtz $1, 131069
+ bgtz $1, 131070
+ bgtz $1, 131071
+ bgtz $1, 131072
+
+ blez $1, -131068
+ blez $1, -131069
+ blez $1, -131070
+ blez $1, -131071
+ blez $1, -131072
+ blez $1, -131073
+ blez $1, 131068
+ blez $1, 131069
+ blez $1, 131070
+ blez $1, 131071
+ blez $1, 131072
+
+ bltz $1, -131068
+ bltz $1, -131069
+ bltz $1, -131070
+ bltz $1, -131071
+ bltz $1, -131072
+ bltz $1, -131073
+ bltz $1, 131068
+ bltz $1, 131069
+ bltz $1, 131070
+ bltz $1, 131071
+ bltz $1, 131072
+
+ bgezal $1, -131068
+ bgezal $1, -131069
+ bgezal $1, -131070
+ bgezal $1, -131071
+ bgezal $1, -131072
+ bgezal $1, -131073
+ bgezal $1, 131068
+ bgezal $1, 131069
+ bgezal $1, 131070
+ bgezal $1, 131071
+ bgezal $1, 131072
+
+ bltzal $1, -131068
+ bltzal $1, -131069
+ bltzal $1, -131070
+ bltzal $1, -131071
+ bltzal $1, -131072
+ bltzal $1, -131073
+ bltzal $1, 131068
+ bltzal $1, 131069
+ bltzal $1, 131070
+ bltzal $1, 131071
+ bltzal $1, 131072
+
+ bc1f -131068
+ bc1f -131069
+ bc1f -131070
+ bc1f -131071
+ bc1f -131072
+ bc1f -131073
+ bc1f 131068
+ bc1f 131069
+ bc1f 131070
+ bc1f 131071
+ bc1f 131072
+
+ bc1f $fcc0, -131068
+ bc1f $fcc0, -131069
+ bc1f $fcc0, -131070
+ bc1f $fcc0, -131071
+ bc1f $fcc0, -131072
+ bc1f $fcc0, -131073
+ bc1f $fcc0, 131068
+ bc1f $fcc0, 131069
+ bc1f $fcc0, 131070
+ bc1f $fcc0, 131071
+ bc1f $fcc0, 131072
+
+ bc1t -131068
+ bc1t -131069
+ bc1t -131070
+ bc1t -131071
+ bc1t -131072
+ bc1t -131073
+ bc1t 131068
+ bc1t 131069
+ bc1t 131070
+ bc1t 131071
+ bc1t 131072
+
+ bc1t $fcc0, -131068
+ bc1t $fcc0, -131069
+ bc1t $fcc0, -131070
+ bc1t $fcc0, -131071
+ bc1t $fcc0, -131072
+ bc1t $fcc0, -131073
+ bc1t $fcc0, 131068
+ bc1t $fcc0, 131069
+ bc1t $fcc0, 131070
+ bc1t $fcc0, 131071
+ bc1t $fcc0, 131072
diff --git a/test/MC/Mips/mips-diagnostic-fixup.s b/test/MC/Mips/mips-diagnostic-fixup.s
new file mode 100644
index 0000000000..864d739727
--- /dev/null
+++ b/test/MC/Mips/mips-diagnostic-fixup.s
@@ -0,0 +1,10 @@
+# RUN: not llvm-mc %s -triple=mipsel-unknown-linux -mcpu=mips32r2 -arch=mips 2>&1 -filetype=obj | FileCheck %s
+#
+# CHECK: LLVM ERROR: out of range PC16 fixup
+
+.text
+ b foo
+ .space 131072 - 8, 1 # -8 = size of b instr plus size of automatically inserted nop
+ nop # This instr makes the branch too long to fit into a 18-bit offset
+foo:
+ add $0,$0,$0