diff options
| author | Jan-Erik Rediger <janerik@fnordig.de> | 2016-07-13 00:42:44 +0200 |
|---|---|---|
| committer | Jan-Erik Rediger <janerik@fnordig.de> | 2016-07-29 10:29:44 +0200 |
| commit | 5b44e10fb7e9d1226af11df26ee5fa78b8d54cc3 (patch) | |
| tree | bf10e8d4f50a9278d6e6b84a8e52575f02d4f02e /src/rustllvm/PassWrapper.cpp | |
| parent | 6ed5db8d351038622b180be917ef2e2e3f0727b2 (diff) | |
| download | rust-5b44e10fb7e9d1226af11df26ee5fa78b8d54cc3.tar.gz rust-5b44e10fb7e9d1226af11df26ee5fa78b8d54cc3.zip | |
[LLVM-3.9] Preserve certain functions when internalizing
This makes sure to still use the old way for older LLVM versions.
Diffstat (limited to 'src/rustllvm/PassWrapper.cpp')
| -rw-r--r-- | src/rustllvm/PassWrapper.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/rustllvm/PassWrapper.cpp b/src/rustllvm/PassWrapper.cpp index 95ad686161f..64edc79a86a 100644 --- a/src/rustllvm/PassWrapper.cpp +++ b/src/rustllvm/PassWrapper.cpp @@ -358,9 +358,24 @@ LLVMRustAddAlwaysInlinePass(LLVMPassManagerBuilderRef PMB, bool AddLifetimes) { extern "C" void LLVMRustRunRestrictionPass(LLVMModuleRef M, char **symbols, size_t len) { - PassManager passes; + llvm::legacy::PassManager passes; + +#if LLVM_VERSION_MINOR <= 8 ArrayRef<const char*> ref(symbols, len); passes.add(llvm::createInternalizePass(ref)); +#else + auto PreserveFunctions = [=](const GlobalValue &GV) { + for (size_t i=0; i<len; i++) { + if (GV.getName() == symbols[i]) { + return true; + } + } + return false; + }; + + passes.add(llvm::createInternalizePass(PreserveFunctions)); +#endif + passes.run(*unwrap(M)); } |
