diff options
Diffstat (limited to 'llvm/unittests/Support/DynamicLibrary')
3 files changed, 38 insertions, 3 deletions
diff --git a/llvm/unittests/Support/DynamicLibrary/CMakeLists.txt b/llvm/unittests/Support/DynamicLibrary/CMakeLists.txt index b5844381362..76c55465c9d 100644 --- a/llvm/unittests/Support/DynamicLibrary/CMakeLists.txt +++ b/llvm/unittests/Support/DynamicLibrary/CMakeLists.txt @@ -1,4 +1,4 @@ -set(LLVM_LINK_COMPONENTS Support) +set(LLVM_LINK_COMPONENTS Support IPO) add_library(DynamicLibraryLib STATIC ExportedFuncs.cxx) diff --git a/llvm/unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp b/llvm/unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp index c54e1b7eed2..5730d610cdf 100644 --- a/llvm/unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp +++ b/llvm/unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp @@ -12,6 +12,7 @@ #include "llvm/Support/FileSystem.h" #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/Path.h" +#include "llvm/Transforms/IPO/PassManagerBuilder.h" #include "gtest/gtest.h" #include "PipSqueak.h" @@ -52,6 +53,28 @@ template <class T> static void* PtrFunc(T *Func) { return Tmp.P; } +static void +NoPassRegistration(const PassManagerBuilder &, legacy::PassManagerBase &) { +} + +static RegisterStandardPasses LocalPass(PassManagerBuilder::EP_LoopOptimizerEnd, + NoPassRegistration); + +typedef void (*TestPassReg)(void (*)(PassManagerBuilder::ExtensionPointTy, + PassManagerBuilder::ExtensionProc)); + +TEST(DynamicLibrary, PassRegistration) { + std::string Err; + llvm_shutdown_obj Shutdown; + DynamicLibrary DL = + DynamicLibrary::getPermanentLibrary(LibPath().c_str(), &Err); + EXPECT_TRUE(DL.isValid()); + EXPECT_TRUE(Err.empty()); + + TestPassReg RP = FuncPtr<TestPassReg>(DL.getAddressOfSymbol("TestPassReg")); + RP(&PassManagerBuilder::addGlobalExtension); +} + static const char *OverloadTestA() { return "OverloadCall"; } std::string StdString(const char *Ptr) { return Ptr ? Ptr : ""; } diff --git a/llvm/unittests/Support/DynamicLibrary/PipSqueak.cxx b/llvm/unittests/Support/DynamicLibrary/PipSqueak.cxx index 375d72c0b53..0c2ec0010af 100644 --- a/llvm/unittests/Support/DynamicLibrary/PipSqueak.cxx +++ b/llvm/unittests/Support/DynamicLibrary/PipSqueak.cxx @@ -8,6 +8,10 @@ //===----------------------------------------------------------------------===// #include "PipSqueak.h" +#include "llvm/Transforms/IPO/PassManagerBuilder.h" + +#define PIPSQUEAK_TESTA_RETURN "LibCall" +#include "ExportedFuncs.cxx" struct Global { std::string *Str; @@ -45,5 +49,13 @@ extern "C" PIPSQUEAK_EXPORT void TestOrder(std::vector<std::string> &V) { Glb.Vec = &V; } -#define PIPSQUEAK_TESTA_RETURN "LibCall" -#include "ExportedFuncs.cxx" + +static void LibPassRegistration(const llvm::PassManagerBuilder &, + llvm::legacy::PassManagerBase &) {} + +extern "C" PIPSQUEAK_EXPORT void TestPassReg( + void (*addGlobalExtension)(llvm::PassManagerBuilder::ExtensionPointTy, + llvm::PassManagerBuilder::ExtensionProc)) { + addGlobalExtension(llvm::PassManagerBuilder::EP_EarlyAsPossible, + LibPassRegistration); +} |

