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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202198 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Rafael Espindola
2014-02-25 22:23:04 +00:00
parent 9c256eccb3
commit 3f0a9af13b
4 changed files with 38 additions and 11 deletions

View File

@@ -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();