summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/test/Linker/Inputs/odr.ll8
-rw-r--r--llvm/test/Linker/broken.ll2
-rw-r--r--llvm/test/Linker/odr.ll18
-rw-r--r--llvm/tools/llvm-link/llvm-link.cpp5
4 files changed, 31 insertions, 2 deletions
diff --git a/llvm/test/Linker/Inputs/odr.ll b/llvm/test/Linker/Inputs/odr.ll
new file mode 100644
index 00000000000..5c1d17a5951
--- /dev/null
+++ b/llvm/test/Linker/Inputs/odr.ll
@@ -0,0 +1,8 @@
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!4}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, isOptimized: false, runtimeVersion: 0, emissionKind: NoDebug, retainedTypes: !2)
+!1 = !DIFile(filename: "../../src/core/weakHashTable.cc", directory: "/Users/meister/Development/clasp/wbuild/clasp_boehm_o")
+!2 = !{!3}
+!3 = distinct !DICompositeType(tag: DW_TAG_class_type, file: !1, identifier: "zed")
+!4 = !{i32 2, !"Debug Info Version", i32 3}
diff --git a/llvm/test/Linker/broken.ll b/llvm/test/Linker/broken.ll
index 8aefe4e6a37..d8a6b170168 100644
--- a/llvm/test/Linker/broken.ll
+++ b/llvm/test/Linker/broken.ll
@@ -1,4 +1,4 @@
-; RUN: not llvm-link -o /dev/null %s 2>&1 | FileCheck %s
+; RUN: not llvm-link -disable-debug-info-type-map -o /dev/null %s 2>&1 | FileCheck %s
; CHECK: broken.ll: error: input module is broken!
define i32 @foo(i32 %v) {
diff --git a/llvm/test/Linker/odr.ll b/llvm/test/Linker/odr.ll
new file mode 100644
index 00000000000..db54995e7a4
--- /dev/null
+++ b/llvm/test/Linker/odr.ll
@@ -0,0 +1,18 @@
+; Use llvm-as to verify each module
+; RUN: llvm-as %s -o %t1.bc
+; RUN: llvm-as %p/Inputs/odr.ll -o %t2.bc
+; Check that we can link it
+; RUN: llvm-link %t1.bc %t2.bc -o %t
+@bar = global i64 0, align 8
+
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!7}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, isOptimized: false, runtimeVersion: 0, emissionKind: NoDebug, retainedTypes: !2, globals: !5)
+!1 = !DIFile(filename: "a", directory: "")
+!2 = !{!3}
+!3 = distinct !DICompositeType(tag: DW_TAG_class_type, scope: !4, file: !1, identifier: "zed")
+!4 = distinct !DISubprogram(name: "b", scope: null, isLocal: false, isDefinition: true, isOptimized: false, unit: !0)
+!5 = !{!6}
+!6 = distinct !DIGlobalVariable(name: "c", scope: null, isLocal: false, isDefinition: true, variable: i64* @bar)
+!7 = !{i32 2, !"Debug Info Version", i32 3}
diff --git a/llvm/tools/llvm-link/llvm-link.cpp b/llvm/tools/llvm-link/llvm-link.cpp
index b0606d7c56d..185ae2a82a1 100644
--- a/llvm/tools/llvm-link/llvm-link.cpp
+++ b/llvm/tools/llvm-link/llvm-link.cpp
@@ -299,7 +299,10 @@ static bool linkFiles(const char *argv0, LLVMContext &Context, Linker &L,
return false;
}
- if (verifyModule(*M, &errs())) {
+ // Note that when ODR merging types cannot verify input files in here When
+ // doing that debug metadata in the src module might already be pointing to
+ // the destination.
+ if (DisableDITypeMap && verifyModule(*M, &errs())) {
errs() << argv0 << ": " << File << ": error: input module is broken!\n";
return false;
}
OpenPOWER on IntegriCloud