Don't try to check all uses if lazy loading.

This means that LTO_SYMBOL_SCOPE_DEFAULT_CAN_BE_HIDDEN will not be set
in a few cases.

This should have no impact in ld64 since it doesn't use lazy loading
when merging modules and that is when it checks
LTO_SYMBOL_SCOPE_DEFAULT_CAN_BE_HIDDEN.

llvm-svn: 257915
This commit is contained in:
Rafael Espindola 2016-01-15 18:23:46 +00:00
parent 06a9b6f5d1
commit 79db917139
2 changed files with 16 additions and 0 deletions

View File

@ -639,6 +639,11 @@ bool llvm::canBeOmittedFromSymbolTable(const GlobalValue *GV) {
if (isa<GlobalAlias>(GV))
return false;
// If we don't see every use, we have to be conservative and assume the value
// address is significant.
if (GV->getParent()->getMaterializer())
return false;
GlobalStatus GS;
if (GlobalStatus::analyzeGlobal(GV, GS))
return false;

View File

@ -0,0 +1,11 @@
; RUN: llvm-as < %s >%t1
; RUN: llvm-lto -list-symbols-only %t1 | FileCheck %s
; This tests that we don't crash trying to find all uses in a lazily loaded
; module.
; CHECK: foo
target triple = "x86_64-unknown-linux-gnu"
define linkonce_odr void @foo() {
ret void
}