mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 12:43:36 +01:00
Don't verify inputs to the Linker if ODR merging.
This fixes pr28072. The point, as Duncan pointed out, is that the file is already partially linked by just reading it. Long term I think the solution is to make metadata owned by the module and then the linker will lazily read it and be in charge of all the linking. Running a verifier in each input will defeat the lazy loading, but will be legal. Right now we are at the unfortunate position that to support odr merging we cannot verify the inputs, which mildly annoying (see test update). llvm-svn: 274148
This commit is contained in:
parent
141c412e61
commit
fe0a450fe1
8
test/Linker/Inputs/odr.ll
Normal file
8
test/Linker/Inputs/odr.ll
Normal file
@ -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}
|
@ -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) {
|
||||
|
18
test/Linker/odr.ll
Normal file
18
test/Linker/odr.ll
Normal file
@ -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}
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user