<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">It looks like this broke the stage 2 bots:<div class=""><br class=""></div><div class=""><a href="http://green.lab.llvm.org/green/job/clang-stage2-configure-Rlto_build/18448/consoleFull#-1569690971a1ca8a51-895e-46c6-af87-ce24fa4cd561" class="">http://green.lab.llvm.org/green/job/clang-stage2-configure-Rlto_build/18448/consoleFull#-1569690971a1ca8a51-895e-46c6-af87-ce24fa4cd561</a></div><div class=""><br class=""></div><div class="">Could you please revert / investigate?</div><div class=""><br class=""></div><div class="">-- adrian</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Jun 13, 2017, at 9:48 AM, Frederich Munch via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">Author: marsupial<br class="">Date: Tue Jun 13 11:48:41 2017<br class="">New Revision: 305303<br class=""><br class="">URL: <a href="http://llvm.org/viewvc/llvm-project?rev=305303&view=rev" class="">http://llvm.org/viewvc/llvm-project?rev=305303&view=rev</a><br class="">Log:<br class="">Force RegisterStandardPasses to construct std::function in the IPO library.<br class=""><br class="">Summary: Fixes an issue using RegisterStandardPasses from a statically linked object before PassManagerBuilder::addGlobalExtension is called from a dynamic library.<br class=""><br class="">Reviewers: efriedma, theraven<br class=""><br class="">Reviewed By: efriedma<br class=""><br class="">Subscribers: mehdi_amini, mgorny, llvm-commits<br class=""><br class="">Differential Revision: <a href="https://reviews.llvm.org/D33515" class="">https://reviews.llvm.org/D33515</a><br class=""><br class="">Modified:<br class="">    llvm/trunk/include/llvm/Transforms/IPO/PassManagerBuilder.h<br class="">    llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp<br class="">    llvm/trunk/unittests/Support/DynamicLibrary/CMakeLists.txt<br class="">    llvm/trunk/unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp<br class="">    llvm/trunk/unittests/Support/DynamicLibrary/PipSqueak.cxx<br class=""><br class="">Modified: llvm/trunk/include/llvm/Transforms/IPO/PassManagerBuilder.h<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/IPO/PassManagerBuilder.h?rev=305303&r1=305302&r2=305303&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/IPO/PassManagerBuilder.h?rev=305303&r1=305302&r2=305303&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/include/llvm/Transforms/IPO/PassManagerBuilder.h (original)<br class="">+++ llvm/trunk/include/llvm/Transforms/IPO/PassManagerBuilder.h Tue Jun 13 11:48:41 2017<br class="">@@ -60,9 +60,10 @@ class PassManagerBuilder {<br class=""> public:<br class="">   /// Extensions are passed the builder itself (so they can see how it is<br class="">   /// configured) as well as the pass manager to add stuff to.<br class="">-  typedef std::function<void(const PassManagerBuilder &Builder,<br class="">-                             legacy::PassManagerBase &PM)><br class="">-      ExtensionFn;<br class="">+  typedef void ExtensionProc(const PassManagerBuilder &Builder,<br class="">+                             legacy::PassManagerBase &PM);<br class="">+  typedef std::function<ExtensionProc> ExtensionFn;<br class="">+<br class="">   enum ExtensionPointTy {<br class="">     /// EP_EarlyAsPossible - This extension point allows adding passes before<br class="">     /// any other transformations, allowing them to see the code as it is coming<br class="">@@ -179,7 +180,7 @@ public:<br class="">   /// Adds an extension that will be used by all PassManagerBuilder instances.<br class="">   /// This is intended to be used by plugins, to register a set of<br class="">   /// optimisations to run automatically.<br class="">-  static void addGlobalExtension(ExtensionPointTy Ty, ExtensionFn Fn);<br class="">+  static void addGlobalExtension(ExtensionPointTy Ty, ExtensionProc Fn);<br class="">   void addExtension(ExtensionPointTy Ty, ExtensionFn Fn);<br class=""><br class=""> private:<br class="">@@ -208,10 +209,12 @@ public:<br class=""> /// used by optimizer plugins to allow all front ends to transparently use<br class=""> /// them.  Create a static instance of this class in your plugin, providing a<br class=""> /// private function that the PassManagerBuilder can use to add your passes.<br class="">+/// Currently limited to real functions to avoid crashes when used within the<br class="">+/// main executable before a loaded plugin has a chance to use this.<br class=""> struct RegisterStandardPasses {<br class="">   RegisterStandardPasses(PassManagerBuilder::ExtensionPointTy Ty,<br class="">-                         PassManagerBuilder::ExtensionFn Fn) {<br class="">-    PassManagerBuilder::addGlobalExtension(Ty, std::move(Fn));<br class="">+                         PassManagerBuilder::ExtensionProc Fn) {<br class="">+    PassManagerBuilder::addGlobalExtension(Ty, Fn);<br class="">   }<br class=""> };<br class=""><br class=""><br class="">Modified: llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp?rev=305303&r1=305302&r2=305303&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp?rev=305303&r1=305302&r2=305303&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp (original)<br class="">+++ llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp Tue Jun 13 11:48:41 2017<br class="">@@ -198,10 +198,9 @@ PassManagerBuilder::~PassManagerBuilder(<br class=""> static ManagedStatic<SmallVector<std::pair<PassManagerBuilder::ExtensionPointTy,<br class="">    PassManagerBuilder::ExtensionFn>, 8> > GlobalExtensions;<br class=""><br class="">-void PassManagerBuilder::addGlobalExtension(<br class="">-    PassManagerBuilder::ExtensionPointTy Ty,<br class="">-    PassManagerBuilder::ExtensionFn Fn) {<br class="">-  GlobalExtensions->push_back(std::make_pair(Ty, std::move(Fn)));<br class="">+void PassManagerBuilder::addGlobalExtension(ExtensionPointTy Ty,<br class="">+                                            ExtensionProc Fn) {<br class="">+  GlobalExtensions->push_back(std::make_pair(Ty, Fn));<br class=""> }<br class=""><br class=""> void PassManagerBuilder::addExtension(ExtensionPointTy Ty, ExtensionFn Fn) {<br class=""><br class="">Modified: llvm/trunk/unittests/Support/DynamicLibrary/CMakeLists.txt<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/DynamicLibrary/CMakeLists.txt?rev=305303&r1=305302&r2=305303&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/DynamicLibrary/CMakeLists.txt?rev=305303&r1=305302&r2=305303&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/unittests/Support/DynamicLibrary/CMakeLists.txt (original)<br class="">+++ llvm/trunk/unittests/Support/DynamicLibrary/CMakeLists.txt Tue Jun 13 11:48:41 2017<br class="">@@ -1,4 +1,4 @@<br class="">-set(LLVM_LINK_COMPONENTS Support)<br class="">+set(LLVM_LINK_COMPONENTS Support IPO)<br class=""><br class=""> add_library(DynamicLibraryLib STATIC ExportedFuncs.cxx)<br class=""><br class=""><br class="">Modified: llvm/trunk/unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp?rev=305303&r1=305302&r2=305303&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp?rev=305303&r1=305302&r2=305303&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp (original)<br class="">+++ llvm/trunk/unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp Tue Jun 13 11:48:41 2017<br class="">@@ -12,6 +12,7 @@<br class=""> #include "llvm/Support/FileSystem.h"<br class=""> #include "llvm/Support/ManagedStatic.h"<br class=""> #include "llvm/Support/Path.h"<br class="">+#include "llvm/Transforms/IPO/PassManagerBuilder.h"<br class=""> #include "gtest/gtest.h"<br class=""><br class=""> #include "PipSqueak.h"<br class="">@@ -52,6 +53,28 @@ template <class T> static void* PtrFunc(<br class="">   return Tmp.P;<br class=""> }<br class=""><br class="">+static void<br class="">+NoPassRegistration(const PassManagerBuilder &, legacy::PassManagerBase &) {<br class="">+}<br class="">+<br class="">+static RegisterStandardPasses LocalPass(PassManagerBuilder::EP_LoopOptimizerEnd,<br class="">+                                        NoPassRegistration);<br class="">+<br class="">+typedef void (*TestPassReg)(void (*)(PassManagerBuilder::ExtensionPointTy,<br class="">+                                     PassManagerBuilder::ExtensionProc));<br class="">+<br class="">+TEST(DynamicLibrary, PassRegistration) {<br class="">+  std::string Err;<br class="">+  llvm_shutdown_obj Shutdown;<br class="">+  DynamicLibrary DL =<br class="">+      DynamicLibrary::getPermanentLibrary(LibPath().c_str(), &Err);<br class="">+  EXPECT_TRUE(DL.isValid());<br class="">+  EXPECT_TRUE(Err.empty());<br class="">+<br class="">+  TestPassReg RP = FuncPtr<TestPassReg>(DL.getAddressOfSymbol("TestPassReg"));<br class="">+  RP(&PassManagerBuilder::addGlobalExtension);<br class="">+}<br class="">+<br class=""> static const char *OverloadTestA() { return "OverloadCall"; }<br class=""><br class=""> std::string StdString(const char *Ptr) { return Ptr ? Ptr : ""; }<br class=""><br class="">Modified: llvm/trunk/unittests/Support/DynamicLibrary/PipSqueak.cxx<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/DynamicLibrary/PipSqueak.cxx?rev=305303&r1=305302&r2=305303&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/DynamicLibrary/PipSqueak.cxx?rev=305303&r1=305302&r2=305303&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/unittests/Support/DynamicLibrary/PipSqueak.cxx (original)<br class="">+++ llvm/trunk/unittests/Support/DynamicLibrary/PipSqueak.cxx Tue Jun 13 11:48:41 2017<br class="">@@ -8,6 +8,10 @@<br class=""> //===----------------------------------------------------------------------===//<br class=""><br class=""> #include "PipSqueak.h"<br class="">+#include "llvm/Transforms/IPO/PassManagerBuilder.h"<br class="">+<br class="">+#define PIPSQUEAK_TESTA_RETURN "LibCall"<br class="">+#include "ExportedFuncs.cxx"<br class=""><br class=""> struct Global {<br class="">   std::string *Str;<br class="">@@ -45,5 +49,13 @@ extern "C" PIPSQUEAK_EXPORT void TestOrd<br class="">   Glb.Vec = &V;<br class=""> }<br class=""><br class="">-#define PIPSQUEAK_TESTA_RETURN "LibCall"<br class="">-#include "ExportedFuncs.cxx"<br class="">+<br class="">+static void LibPassRegistration(const llvm::PassManagerBuilder &,<br class="">+                                llvm::legacy::PassManagerBase &) {}<br class="">+<br class="">+extern "C" PIPSQUEAK_EXPORT void TestPassReg(<br class="">+    void (*addGlobalExtension)(llvm::PassManagerBuilder::ExtensionPointTy,<br class="">+                               llvm::PassManagerBuilder::ExtensionProc)) {<br class="">+  addGlobalExtension(llvm::PassManagerBuilder::EP_EarlyAsPossible,<br class="">+                     LibPassRegistration);<br class="">+}<br class=""><br class=""><br class="">_______________________________________________<br class="">llvm-commits mailing list<br class=""><a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a><br class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits<br class=""></div></div></blockquote></div><br class=""></div></body></html>