[MC] Issue error message when data region is not terminated
authorGerolf Hoflehner <ghoflehner@apple.com>
Mon, 12 Feb 2018 07:19:05 +0000 (07:19 +0000)
committerGerolf Hoflehner <ghoflehner@apple.com>
Mon, 12 Feb 2018 07:19:05 +0000 (07:19 +0000)
llvm-svn: 324868

llvm/lib/MC/MachObjectWriter.cpp
llvm/test/MC/X86/check-end-of-data-region.s [new file with mode: 0644]

index c7eaa76..25f451c 100644 (file)
@@ -945,7 +945,13 @@ void MachObjectWriter::writeObject(MCAssembler &Asm,
          it != ie; ++it) {
     const DataRegionData *Data = &(*it);
     uint64_t Start = getSymbolAddress(*Data->Start, Layout);
-    uint64_t End = getSymbolAddress(*Data->End, Layout);
+    uint64_t End;
+    if (Data->End) 
+      End = getSymbolAddress(*Data->End, Layout);
+    else
+      report_fatal_error("Data region not terminated");
+
+
     DEBUG(dbgs() << "data in code region-- kind: " << Data->Kind
                  << "  start: " << Start << "(" << Data->Start->getName() << ")"
                  << "  end: " << End << "(" << Data->End->getName() << ")"
diff --git a/llvm/test/MC/X86/check-end-of-data-region.s b/llvm/test/MC/X86/check-end-of-data-region.s
new file mode 100644 (file)
index 0000000..3f7d9b6
--- /dev/null
@@ -0,0 +1,8 @@
+// RUN: not llvm-mc -triple=x86_64-apple-darwin -filetype=obj -o /dev/null %s 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR
+
+.align 4
+.data_region jt32
+foo:
+     .long 0
+
+// CHECK-ERROR: LLVM ERROR: Data region not terminated