Summary: Similar to what lld already does for dllimport symbols which are prefaced with __imp_ (see lld patch r240620), strip off the __imp_ prefix in LTO. Otherwise we can get 2 separate GlobalResolution for a single symbol, the dllimport declaration, and the definition, which leads to incorrect LTO handling. Fixes PR38105. Reviewers: pcc Subscribers: mehdi_amini, inglorion, steven_wu, dexonsmith, llvm-commits Differential Revision: https://reviews.llvm.org/D49138 llvm-svn: 337762
18 lines
673 B
LLVM
18 lines
673 B
LLVM
; ModuleID = 'b.obj'
|
|
source_filename = "b.cpp"
|
|
target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
|
|
target triple = "x86_64-pc-windows-msvc19.11.0"
|
|
|
|
; Function Attrs: norecurse nounwind readnone sspstrong uwtable
|
|
define dso_local i32 @"?foo@@YAHXZ"() local_unnamed_addr {
|
|
entry:
|
|
ret i32 42
|
|
}
|
|
|
|
!llvm.module.flags = !{!1}
|
|
|
|
!1 = !{i32 1, !"ThinLTO", i32 0}
|
|
|
|
^0 = module: (path: "b.obj", hash: (0, 0, 0, 0, 0))
|
|
^1 = gv: (name: "?foo@@YAHXZ", summaries: (function: (module: ^0, flags: (linkage: external, notEligibleToImport: 1, live: 0, dsoLocal: 1), insts: 1, funcFlags: (readNone: 1, readOnly: 0, noRecurse: 1, returnDoesNotAlias: 0)))) ; guid = 2709792123250749187
|