diff --git a/lld/COFF/InputFiles.cpp b/lld/COFF/InputFiles.cpp index 1d76eaa46313..67883ff67ec4 100644 --- a/lld/COFF/InputFiles.cpp +++ b/lld/COFF/InputFiles.cpp @@ -257,9 +257,13 @@ std::error_code BitcodeFile::parse() { } for (unsigned I = 0, E = M->getSymbolCount(); I != E; ++I) { + lto_symbol_attributes Attrs = M->getSymbolAttributes(I); + if ((Attrs & LTO_SYMBOL_SCOPE_MASK) == LTO_SYMBOL_SCOPE_INTERNAL) + continue; + StringRef SymName = M->getSymbolName(I); - if ((M->getSymbolAttributes(I) & LTO_SYMBOL_DEFINITION_MASK) == - LTO_SYMBOL_DEFINITION_UNDEFINED) { + int SymbolDef = Attrs & LTO_SYMBOL_DEFINITION_MASK; + if (SymbolDef == LTO_SYMBOL_DEFINITION_UNDEFINED) { SymbolBodies.push_back(new (Alloc) Undefined(SymName)); } else { SymbolBodies.push_back(new (Alloc) DefinedBitcode(SymName)); diff --git a/lld/test/COFF/Inputs/lto-dep.ll b/lld/test/COFF/Inputs/lto-dep.ll index 8cd7d706e5fb..d6d47f234917 100644 --- a/lld/test/COFF/Inputs/lto-dep.ll +++ b/lld/test/COFF/Inputs/lto-dep.ll @@ -4,3 +4,7 @@ target triple = "x86_64-pc-windows-msvc" define void @foo() { ret void } + +define internal void @internal() { + ret void +} diff --git a/lld/test/COFF/lto.ll b/lld/test/COFF/lto.ll index 7045665c3839..6b92649d0b1d 100644 --- a/lld/test/COFF/lto.ll +++ b/lld/test/COFF/lto.ll @@ -54,16 +54,34 @@ ; TEXT-01: Disassembly of section .text: ; TEXT-01-NEXT: .text: ; TEXT-01-NEXT: subq $40, %rsp -; TEXT-01-NEXT: callq 7 +; TEXT-01-NEXT: callq 23 ; TEXT-01-NEXT: xorl %eax, %eax ; TEXT-01-NEXT: addq $40, %rsp ; TEXT-01-NEXT: retq ; TEXT-01-NEXT: retq +; TEXT-01-NEXT: int3 +; TEXT-01-NEXT: int3 +; TEXT-01-NEXT: int3 +; TEXT-01-NEXT: int3 +; TEXT-01-NEXT: int3 +; TEXT-01-NEXT: int3 +; TEXT-01-NEXT: int3 +; TEXT-01-NEXT: int3 +; TEXT-01-NEXT: int3 +; TEXT-01-NEXT: int3 +; TEXT-01-NEXT: int3 +; TEXT-01-NEXT: int3 +; TEXT-01-NEXT: int3 +; TEXT-01-NEXT: int3 +; TEXT-01-NEXT: int3 +; TEXT-01-NEXT: retq -; HEADERS-10: AddressOfEntryPoint: 0x2010 +; HEADERS-10: AddressOfEntryPoint: 0x2020 ; TEXT-10: Disassembly of section .text: ; TEXT-10-NEXT: .text: ; TEXT-10-NEXT: retq +; TEXT-10-NEXT: nopw %cs:(%rax,%rax) +; TEXT-10-NEXT: retq ; TEXT-10-NEXT: int3 ; TEXT-10-NEXT: int3 ; TEXT-10-NEXT: int3 @@ -80,7 +98,7 @@ ; TEXT-10-NEXT: int3 ; TEXT-10-NEXT: int3 ; TEXT-10-NEXT: subq $40, %rsp -; TEXT-10-NEXT: callq -25 +; TEXT-10-NEXT: callq -41 ; TEXT-10-NEXT: xorl %eax, %eax ; TEXT-10-NEXT: addq $40, %rsp ; TEXT-10-NEXT: retq @@ -104,3 +122,7 @@ $f2 = comdat any define i32 @f2() comdat($f2) { ret i32 2 } + +define internal void @internal() { + ret void +}