From ce5de5b52768d0c3b9c0f6c4bc915a17e962202c Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Mon, 7 Sep 2009 22:42:05 +0000 Subject: [PATCH] Don't commit addresses of aggregate values. This avoids problems with an aggregate store overlapping a different aggregate store, despite the stores having distinct addresses. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81164 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/IPO/GlobalOpt.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/Transforms/IPO/GlobalOpt.cpp b/lib/Transforms/IPO/GlobalOpt.cpp index 71eeb75310d..86c5e291948 100644 --- a/lib/Transforms/IPO/GlobalOpt.cpp +++ b/lib/Transforms/IPO/GlobalOpt.cpp @@ -2024,6 +2024,11 @@ static Constant *getVal(DenseMap &ComputedValues, /// we punt. We basically just support direct accesses to globals and GEP's of /// globals. This should be kept up to date with CommitValueTo. static bool isSimpleEnoughPointerToCommit(Constant *C, LLVMContext &Context) { + // Conservatively, avoid aggregate types. This is because we don't + // want to worry about them partially overlapping other stores. + if (!cast(C->getType())->getElementType()->isSingleValueType()) + return false; + if (GlobalVariable *GV = dyn_cast(C)) // Do not allow weak/linkonce/dllimport/dllexport linkage or // external globals.