diff options
-rw-r--r-- | llvm/test/Linker/Inputs/odr.ll | 8 | ||||
-rw-r--r-- | llvm/test/Linker/broken.ll | 2 | ||||
-rw-r--r-- | llvm/test/Linker/odr.ll | 18 | ||||
-rw-r--r-- | llvm/tools/llvm-link/llvm-link.cpp | 5 |
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; } |