diff --git a/llvm/include/llvm/IR/GlobalValue.h b/llvm/include/llvm/IR/GlobalValue.h --- a/llvm/include/llvm/IR/GlobalValue.h +++ b/llvm/include/llvm/IR/GlobalValue.h @@ -127,19 +127,23 @@ /// time. bool mayBeDerefined() const { switch (getLinkage()) { - case WeakODRLinkage: - case LinkOnceODRLinkage: - case AvailableExternallyLinkage: - return true; - case WeakAnyLinkage: case LinkOnceAnyLinkage: case CommonLinkage: case ExternalWeakLinkage: - case ExternalLinkage: - case AppendingLinkage: + + // The three cannot be overridden but can be de-refined. + case WeakODRLinkage: + case LinkOnceODRLinkage: + case AvailableExternallyLinkage: + return true; + case InternalLinkage: case PrivateLinkage: + case AppendingLinkage: + return false; + + case ExternalLinkage: return isInterposable(); }