]> granicus.if.org Git - llvm/commitdiff
Bitcode: Don't create comdats when autoupgrading macho bitcode
authorDavid Majnemer <david.majnemer@gmail.com>
Tue, 20 Jan 2015 05:58:07 +0000 (05:58 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Tue, 20 Jan 2015 05:58:07 +0000 (05:58 +0000)
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

lib/Bitcode/Reader/BitcodeReader.cpp
test/Bitcode/weak-macho-3.5.ll [new file with mode: 0644]
test/Bitcode/weak-macho-3.5.ll.bc [new file with mode: 0644]

index f8625e1034f7c47e18ea34f71ce8594908d01af4..9e27225df7996790e33a702118efa655879fbc93 100644 (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;
diff --git a/test/Bitcode/weak-macho-3.5.ll b/test/Bitcode/weak-macho-3.5.ll
new file mode 100644 (file)
index 0000000..0c09fe4
--- /dev/null
@@ -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{{$}}
diff --git a/test/Bitcode/weak-macho-3.5.ll.bc b/test/Bitcode/weak-macho-3.5.ll.bc
new file mode 100644 (file)
index 0000000..ee66072
Binary files /dev/null and b/test/Bitcode/weak-macho-3.5.ll.bc differ