diff options
author | Mark Seaborn <mseaborn@chromium.org> | 2013-05-20 09:54:58 -0700 |
---|---|---|
committer | Mark Seaborn <mseaborn@chromium.org> | 2013-05-20 09:54:58 -0700 |
commit | 6aea8b4a69a0e6c9c8907a94298efb40c8cd9e87 (patch) | |
tree | 7842d7df3d78e6c6f58216f36c78237459e2a69d /lib | |
parent | 23577055b156b53520c138fc269bc558f5bb115e (diff) |
PNaCl: Fix FlattenGlobals to correctly handle implicitly-aligned variables
If a global variable has no "align" attribute, it must be aligned
based on its type.
BUG=https://code.google.com/p/nativeclient/issues/detail?id=3437
TEST=flatten-globals.ll
Review URL: https://codereview.chromium.org/15359006
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Transforms/NaCl/FlattenGlobals.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/Transforms/NaCl/FlattenGlobals.cpp b/lib/Transforms/NaCl/FlattenGlobals.cpp index 86a46b5d30..77ce2b36b4 100644 --- a/lib/Transforms/NaCl/FlattenGlobals.cpp +++ b/lib/Transforms/NaCl/FlattenGlobals.cpp @@ -255,8 +255,8 @@ bool FlattenGlobals::runOnModule(Module &M) { continue; Modified = true; - uint64_t Size = DL.getTypeAllocSize( - Global->getType()->getPointerElementType()); + Type *GlobalType = Global->getType()->getPointerElementType(); + uint64_t Size = DL.getTypeAllocSize(GlobalType); Constant *NewInit; Type *NewType; if (Global->hasInitializer()) { @@ -281,6 +281,8 @@ bool FlattenGlobals::runOnModule(Module &M) { NewInit, "", Global, Global->getThreadLocalMode()); NewGlobal->copyAttributesFrom(Global); + if (NewGlobal->getAlignment() == 0) + NewGlobal->setAlignment(DL.getPrefTypeAlignment(GlobalType)); NewGlobal->setExternallyInitialized(Global->isExternallyInitialized()); NewGlobal->takeName(Global); Global->replaceAllUsesWith( |