diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Transforms/IPO/IPConstantPropagation.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/lib/Transforms/IPO/IPConstantPropagation.cpp b/lib/Transforms/IPO/IPConstantPropagation.cpp index 792fa980a6..4ebdaf3fb2 100644 --- a/lib/Transforms/IPO/IPConstantPropagation.cpp +++ b/lib/Transforms/IPO/IPConstantPropagation.cpp @@ -147,6 +147,11 @@ bool IPCP::PropagateConstantReturn(Function &F) { if (F.getReturnType() == Type::VoidTy) return false; // No return value. + // If this function could be overridden later in the link stage, we can't + // propagate information about its results into callers. + if (F.hasLinkOnceLinkage() || F.hasWeakLinkage()) + return false; + // Check to see if this function returns a constant. SmallVector<Value *,4> RetVals; const StructType *STy = dyn_cast<StructType>(F.getReturnType()); |