From aedeadddd4ccdc50dd68d7a65166e2635a7e03e2 Mon Sep 17 00:00:00 2001
From: John McCall <rjmccall@apple.com>
Date: Sat, 19 Nov 2016 20:12:25 +0000
Subject: [PATCH] Remove alignment from ctors/dtors lists in an attempt to
 placate LTO.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@287458 91177308-0d34-0410-b5e6-96231b3b80d8
---
 lib/CodeGen/CodeGenModule.cpp | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp
index c931bbff063..869f0097c7f 100644
--- a/lib/CodeGen/CodeGenModule.cpp
+++ b/lib/CodeGen/CodeGenModule.cpp
@@ -756,9 +756,15 @@ void CodeGenModule::EmitCtorList(CtorList &Fns, const char *GlobalName) {
     ctors.add(ctor.finish());
   }
 
-  (void) ctors.finishAndCreateGlobal(GlobalName, getPointerAlign(),
-                                     /*constant*/ false,
-                                     llvm::GlobalValue::AppendingLinkage);
+  auto list =
+    ctors.finishAndCreateGlobal(GlobalName, getPointerAlign(),
+                                /*constant*/ false,
+                                llvm::GlobalValue::AppendingLinkage);
+
+  // The LTO linker doesn't seem to like it when we set an alignment
+  // on appending variables.  Take it off as a workaround.
+  list->setAlignment(0);
+
   Fns.clear();
 }
 
-- 
GitLab