aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/IR/Module.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2014-02-25 22:23:04 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2014-02-25 22:23:04 +0000
commit248ac139752aa61eab97ce6b80bb4160da4bd5fa (patch)
tree4be9e42f9ec4c10ca79f375fefff618ffdd97877 /llvm/lib/IR/Module.cpp
parentafc9eb33fd9c0708ada37a285b635b4f492eaaca (diff)
downloadllvm-248ac139752aa61eab97ce6b80bb4160da4bd5fa.zip
llvm-248ac139752aa61eab97ce6b80bb4160da4bd5fa.tar.gz
llvm-248ac139752aa61eab97ce6b80bb4160da4bd5fa.tar.bz2
Fix resetting the DataLayout in a Module.
No tool does this currently, but as everything else in a module we should be able to change its DataLayout. Most of the fix is in DataLayout to make sure it can be reset properly. The test uses Module::setDataLayout since the fact that we mutate a DataLayout is an implementation detail. The module could hold a OwningPtr<DataLayout> and the DataLayout itself could be immutable. Thanks to Philip Reames for pushing me in the right direction. llvm-svn: 202198
Diffstat (limited to 'llvm/lib/IR/Module.cpp')
-rw-r--r--llvm/lib/IR/Module.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/IR/Module.cpp b/llvm/lib/IR/Module.cpp
index 739f888..4204c8e 100644
--- a/llvm/lib/IR/Module.cpp
+++ b/llvm/lib/IR/Module.cpp
@@ -339,17 +339,21 @@ void Module::addModuleFlag(MDNode *Node) {
}
void Module::setDataLayout(StringRef Desc) {
+ DL.reset(Desc);
+
if (Desc.empty()) {
DataLayoutStr = "";
} else {
- DL.init(Desc);
DataLayoutStr = DL.getStringRepresentation();
+ // DataLayoutStr is now equivalent to Desc, but since the representation
+ // is not unique, they may not be identical.
}
}
void Module::setDataLayout(const DataLayout *Other) {
if (!Other) {
DataLayoutStr = "";
+ DL.reset("");
} else {
DL = *Other;
DataLayoutStr = DL.getStringRepresentation();