diff options
| author | Mircea Trofin <mtrofin@google.com> | 2018-04-06 15:54:47 +0000 |
|---|---|---|
| committer | Mircea Trofin <mtrofin@google.com> | 2018-04-06 15:54:47 +0000 |
| commit | aa3fea6cb0590e82796bf6c785165bcfe5ffa6b0 (patch) | |
| tree | 9a1b4d3cc4cb91456e309e34776f98335602dbc4 /llvm/lib/Transforms | |
| parent | 59399ae4ccd8b5f8e1e0f5aef8a570c8ff6cc7eb (diff) | |
| download | bcm5719-llvm-aa3fea6cb0590e82796bf6c785165bcfe5ffa6b0.tar.gz bcm5719-llvm-aa3fea6cb0590e82796bf6c785165bcfe5ffa6b0.zip | |
[GlobalOpt] Fix support for casts in ctors.
Summary:
Fixing an issue where initializations of globals where constructors use
casts were silently translated to 0-initialization.
Reviewers: davidxl, evgeny777
Reviewed By: evgeny777
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D45198
llvm-svn: 329409
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Utils/Evaluator.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Utils/Evaluator.cpp b/llvm/lib/Transforms/Utils/Evaluator.cpp index 51fc423546d..cb5280992fb 100644 --- a/llvm/lib/Transforms/Utils/Evaluator.cpp +++ b/llvm/lib/Transforms/Utils/Evaluator.cpp @@ -203,7 +203,11 @@ Constant *Evaluator::ComputeLoadResult(Constant *P) { break; // Handle a constantexpr bitcast. case Instruction::BitCast: - if (auto *I = getInitializer(CE->getOperand(0))) + Constant *Val = getVal(CE->getOperand(0)); + auto MM = MutatedMemory.find(Val); + auto *I = (MM != MutatedMemory.end()) ? MM->second + : getInitializer(CE->getOperand(0)); + if (I) return ConstantFoldLoadThroughBitcast( I, P->getType()->getPointerElementType(), DL); break; |

