Bitcode: Don't create comdats when autoupgrading macho bitcode

Don't infer COMDAT groups from older bitcode if the target is macho,
it doesn't have COMDATs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226546 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
David Majnemer 2015-01-20 05:58:07 +00:00
parent e0c5d6d490
commit 01b2fd3f97
3 changed files with 20 additions and 2 deletions

View File

@ -11,6 +11,7 @@
#include "BitcodeReader.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Triple.h"
#include "llvm/Bitcode/LLVMBitCodes.h"
#include "llvm/IR/AutoUpgrade.h"
#include "llvm/IR/Constants.h"
@ -1106,6 +1107,8 @@ std::error_code BitcodeReader::ParseValueSymbolTable() {
SmallVector<uint64_t, 64> Record;
Triple TT(TheModule->getTargetTriple());
// Read all the records for this value table.
SmallString<128> ValueName;
while (1) {
@ -1137,8 +1140,12 @@ std::error_code BitcodeReader::ParseValueSymbolTable() {
V->setName(StringRef(ValueName.data(), ValueName.size()));
if (auto *GO = dyn_cast<GlobalObject>(V)) {
if (GO->getComdat() == reinterpret_cast<Comdat *>(1))
GO->setComdat(TheModule->getOrInsertComdat(V->getName()));
if (GO->getComdat() == reinterpret_cast<Comdat *>(1)) {
if (TT.isOSBinFormatMachO())
GO->setComdat(nullptr);
else
GO->setComdat(TheModule->getOrInsertComdat(V->getName()));
}
}
ValueName.clear();
break;

View File

@ -0,0 +1,11 @@
; RUN: llvm-dis < %s.bc| FileCheck %s
; weak-macho-3.5.ll.bc was generated by passing this file to llvm-as-3.5
; The test checks that LLVM does not place weak GlobalVariables into Comdats for
; macho object files, they don't support it.
target triple = "x86_64-apple-macosx10.9.0"
; CHECK: target triple = "x86_64-apple-macosx10.9.0"
@x = weak global i32 0
; CHECK: @x = weak global i32 0{{$}}

Binary file not shown.