diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index e0895bd..188d3fc 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -28,9 +28,9 @@ jobs:
runs-on: ubuntu-latest
env:
LLVM_INSTALL_PATH: ~/llvm
- LLVM_VERSION: "18"
- LLVM_VERSION_IN_FEATURE: "18-1"
- LLVM_LIB_NAME: "libLLVM.so.18.1"
+ LLVM_VERSION: "19"
+ LLVM_VERSION_IN_FEATURE: "19-1"
+ LLVM_LIB_NAME: "libLLVM.so.19.1"
steps:
- name: Checkout Repo
uses: actions/checkout@v2
diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml
index 22d46f7..8075da2 100644
--- a/.github/workflows/linux.yml
+++ b/.github/workflows/linux.yml
@@ -15,7 +15,6 @@ jobs:
strategy:
matrix:
llvm-version:
- - ["10", "10-0", "v10.0.1-rust-1.46/llvm-10.0.1-rust-1.46-linux-x86_64.tar.gz", "libLLVM-10.so"]
- ["11", "11-0", "v11.0.1-rust-1.51/llvm-lld-11.0.1-rust-1.51-linux-x86_64.tar.gz", "libLLVM-11.so"]
- ["12", "12-0", "v12.0.1-rust-1.55/llvm-lld-12.0.1-rust-1.55-linux-x86_64.tar.gz", "libLLVM-12.so"]
- ["13", "13-0", "v13.0.0-rust-1.59/llvm-lld-13.0.0-rust-1.59-linux-x86_64.tar.gz", "libLLVM-13.so"]
@@ -24,6 +23,8 @@ jobs:
- ["16", "16-0", "v16.0.2-rust-1.71/llvm-lld-16.0.2-rust-1.71-linux-x86_64.tar.gz", "libLLVM-16.so"]
- ["17", "17-0", "v17.0.6-rust-1.75/llvm-lld-17.0.6-rust-1.75-linux-x86_64.tar.gz", "libLLVM-17.so"]
- ["18", "18-1", "v18.1.2-rust-1.78/llvm-lld-18.1.2-rust-1.78-linux-x86_64.tar.gz", "libLLVM.so.18.1"]
+ - ["19", "19-1", "v19.1.5-rust-1.84/llvm-lld-19.1.5-rust-1.84-linux-x86_64.tar.gz", "libLLVM.so.19.1"]
+ - ["20", "20-1", "v20.1.1-rust-1.87/llvm-lld-20.1.1-rust-1.87-linux-x86_64.tar.gz", "libLLVM.so.20.1"]
steps:
- name: Checkout Repo
uses: actions/checkout@v2
@@ -114,6 +115,8 @@ jobs:
- ["16", "16-0", "1.71", "v16.0.2-rust-1.71/llvm-lld-16.0.2-rust-1.71-linux-x86_64.tar.gz", "libLLVM-16.so"]
- ["17", "17-0", "1.75", "v17.0.6-rust-1.75/llvm-lld-17.0.6-rust-1.75-linux-x86_64.tar.gz", "libLLVM-17.so"]
- ["18", "18-1", "1.78", "v18.1.2-rust-1.78/llvm-lld-18.1.2-rust-1.78-linux-x86_64.tar.gz", "libLLVM.so.18.1"]
+ - ["19", "19-1", "1.84", "v19.1.5-rust-1.84/llvm-lld-19.1.5-rust-1.84-linux-x86_64.tar.gz", "libLLVM.so.19.1"]
+ - ["20", "20-1", "1.87", "v20.1.1-rust-1.87/llvm-lld-20.1.1-rust-1.87-linux-x86_64.tar.gz", "libLLVM.so.20.1"]
steps:
- name: Checkout Repo
uses: actions/checkout@v2
diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml
index ea2fd58..1b4463f 100644
--- a/.github/workflows/macos.yml
+++ b/.github/workflows/macos.yml
@@ -23,6 +23,8 @@ jobs:
- ["16", "16-0", "v16.0.2-rust-1.71/llvm-lld-16.0.2-rust-1.71-macos-x86_64.tar.gz", "macos-13"]
- ["17", "17-0", "v17.0.6-rust-1.75/llvm-lld-17.0.6-rust-1.75-macos-x86_64.tar.gz", "macos-13"]
- ["18", "18-1", "v18.1.2-rust-1.78/llvm-lld-18.1.2-rust-1.78-macos-arm64.tar.gz", "macos-latest"]
+ - ["19", "19-1", "v19.1.5-rust-1.84/llvm-lld-19.1.5-rust-1.84-macos-arm64.tar.gz", "macos-latest"]
+ - ["20", "20-1", "v20.1.1-rust-1.87/llvm-lld-20.1.1-rust-1.87-macos-arm64.tar.gz", "macos-latest"]
steps:
- name: Checkout Repo
uses: actions/checkout@v2
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 612647b..2942aff 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -36,9 +36,9 @@ jobs:
runs-on: ubuntu-latest
env:
LLVM_INSTALL_PATH: ~/llvm
- LLVM_VERSION: "18"
- LLVM_VERSION_IN_FEATURE: "18-1"
- LLVM_LIB_NAME: "libLLVM.so.18.1"
+ LLVM_VERSION: "19"
+ LLVM_VERSION_IN_FEATURE: "19-1"
+ LLVM_LIB_NAME: "libLLVM.so.19.1"
steps:
- name: Checkout the repository
uses: actions/checkout@v4
diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml
index c38f613..3780603 100644
--- a/.github/workflows/windows.yml
+++ b/.github/workflows/windows.yml
@@ -23,6 +23,8 @@ jobs:
- ["16", "16-0", "v16.0.2-rust-1.71/llvm-lld-16.0.2-rust-1.71-windows-x86_64.7z"]
- ["17", "17-0", "v17.0.6-rust-1.75/llvm-lld-17.0.6-rust-1.75-windows-x86_64.7z"]
- ["18", "18-1", "v18.1.2-rust-1.78/llvm-lld-18.1.2-rust-1.78-windows-x86_64.7z"]
+ - ["19", "19-1", "v19.1.5-rust-1.84/llvm-lld-19.1.5-rust-1.84-windows-x86_64.7z"]
+ - ["20", "20-1", "v20.1.1-rust-1.87/llvm-lld-20.1.1-rust-1.87-windows-x86_64.7z"]
steps:
- name: Checkout Repo
uses: actions/checkout@v2
@@ -112,6 +114,8 @@ jobs:
- ["16", "16-0", "1.71", "v16.0.2-rust-1.71/llvm-lld-16.0.2-rust-1.71-windows-x86_64.7z"]
- ["17", "17-0", "1.75", "v17.0.6-rust-1.75/llvm-lld-17.0.6-rust-1.75-windows-x86_64.7z"]
- ["18", "18-1", "1.78", "v18.1.2-rust-1.78/llvm-lld-18.1.2-rust-1.78-windows-x86_64.7z"]
+ - ["19", "19-1", "1.84", "v19.1.5-rust-1.84/llvm-lld-19.1.5-rust-1.84-windows-x86_64.7z"]
+ - ["20", "20-1", "1.87", "v20.1.1-rust-1.87/llvm-lld-20.1.1-rust-1.87-windows-x86_64.7z"]
steps:
- name: Checkout Repo
uses: actions/checkout@v2
diff --git a/Cargo.toml b/Cargo.toml
index 3061bb4..5c2d779 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,3 +1,6 @@
[workspace]
resolver = "2"
members = ["llvm-plugin", "llvm-plugin-macros"]
+
+[patch.crates-io]
+inkwell = { git = "https://github.com/stevefan1999-personal/inkwell" }
diff --git a/README.md b/README.md
index 725a64c..b8a8f77 100644
--- a/README.md
+++ b/README.md
@@ -27,10 +27,10 @@ When importing this crate in your `Cargo.toml`, you will need to specify the LLV
```toml
[dependencies]
-llvm-plugin = { version = "0.6", features = ["llvm18-1"] }
+llvm-plugin = { version = "0.6", features = ["llvm20-1"] }
```
-Supported versions: LLVM 10-18 mapping to a cargo feature flag `llvmX-Y` where `X` and `Y` are the LLVM major and minor versions.
+Supported versions: LLVM 11-20 mapping to a cargo feature flag `llvmX-Y` where `X` and `Y` are the LLVM major and minor versions.
## Getting Started
diff --git a/examples/README.md b/examples/README.md
index b801c80..7a9cf5d 100644
--- a/examples/README.md
+++ b/examples/README.md
@@ -9,7 +9,7 @@ achieved with simple LLVM passes.
Execute the example
```shell
- $ cargo b --example hello-world --features llvm10-0
+ $ cargo b --example hello-world --features llvm20-1
$ opt --load-pass-plugin=target/debug/examples/libhello_world.so --passes=hello-world in.ll -S -o out.ll
```
@@ -21,7 +21,7 @@ achieved with simple LLVM passes.
Execute the example
```shell
- $ cargo b --example opcode-counter --features llvm10-0
+ $ cargo b --example opcode-counter --features llvm20-1
$ opt --load-pass-plugin=target/debug/examples/libopcode_counter.so --passes=opcode-counter-printer in.ll -S -o out.ll
```
@@ -33,7 +33,7 @@ achieved with simple LLVM passes.
Execute the example
```shell
- $ cargo b --example inject-printf --features llvm10-0
+ $ cargo b --example inject-printf --features llvm20-1
$ opt --load-pass-plugin=target/debug/examples/libinject_printf.so --passes=inject-func-call in.ll -S -o out.ll
```
@@ -45,7 +45,7 @@ achieved with simple LLVM passes.
Execute the example
```shell
- $ cargo b --example static-call-counter --features llvm10-0
+ $ cargo b --example static-call-counter --features llvm20-1
$ opt --load-pass-plugin=target/debug/examples/libstatic_call_counter.so --passes=static-cc-printer in.ll -S -o out.ll
```
@@ -57,7 +57,7 @@ achieved with simple LLVM passes.
Execute the example
```shell
- $ cargo b --example string-obf --features llvm10-0
+ $ cargo b --example string-obf --features llvm20-1
$ opt --load-pass-plugin=target/debug/examples/libstring_obf.so --passes=string-obfuscator-pass in.ll -S -o out.ll
```
diff --git a/examples/strings.rs b/examples/strings.rs
index 7b8cfb8..265424c 100644
--- a/examples/strings.rs
+++ b/examples/strings.rs
@@ -71,12 +71,12 @@ fn encode_global_strings<'a>(module: &mut Module<'a>) -> Vec> {
_ => None,
})
.filter(|(_, _, arr)| {
- // needs to be called before `get_string_constant`, otherwise it may crash
+ // needs to be called before `as_const_string`, otherwise it may crash
arr.is_const_string()
})
.filter_map(|(global, stru, arr)| {
// we ignore non-UTF8 strings, since they are probably not human-readable
- let s = arr.get_string_constant().and_then(|s| s.to_str().ok())?;
+ let s = arr.as_const_string().and_then(|s| str::from_utf8(s).ok())?;
let encoded_str = s.bytes().map(|c| c + 1).collect::>();
Some((global, stru, encoded_str))
})
@@ -156,6 +156,8 @@ fn create_decode_fn<'a>(module: &mut Module<'a>) -> FunctionValue<'a> {
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
)))]
let var10 = unsafe {
builder.build_gep(
@@ -170,6 +172,8 @@ fn create_decode_fn<'a>(module: &mut Module<'a>) -> FunctionValue<'a> {
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
))]
let var10 = unsafe {
builder.build_gep(
@@ -185,6 +189,8 @@ fn create_decode_fn<'a>(module: &mut Module<'a>) -> FunctionValue<'a> {
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
)))]
let var11 = builder.build_load(phi1.as_basic_value().into_pointer_value(), "");
#[cfg(any(
@@ -192,6 +198,8 @@ fn create_decode_fn<'a>(module: &mut Module<'a>) -> FunctionValue<'a> {
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
))]
let var11 = builder
.build_load(cx.i8_type(), phi1.as_basic_value().into_pointer_value(), "")
@@ -254,6 +262,8 @@ fn create_decode_stub<'a>(
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
)))]
let s = builder
.build_struct_gep(gs.as_pointer_value(), id, "")
@@ -263,6 +273,8 @@ fn create_decode_stub<'a>(
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
))]
let s = {
let i8_ty_ptr = cx.i8_type().ptr_type(AddressSpace::default());
diff --git a/llvm-plugin/Cargo.toml b/llvm-plugin/Cargo.toml
index ac49a8f..ef28b70 100644
--- a/llvm-plugin/Cargo.toml
+++ b/llvm-plugin/Cargo.toml
@@ -12,7 +12,7 @@ readme = "README.md"
repository = "https://github.com/jamesmth/llvm-plugin-rs"
[package.metadata.docs.rs]
-features = ["llvm15-0"] # any version >10 will do
+features = ["llvm15-0"]
rustdoc-args = ["--cfg", "docsrs"]
[features]
@@ -24,7 +24,6 @@ macros = ["llvm-plugin-macros"]
win-link-opt = []
win-link-lld = []
-llvm10-0 = ["inkwell/llvm10-0-no-llvm-linking"]
llvm11-0 = ["inkwell/llvm11-0-no-llvm-linking"]
llvm12-0 = ["inkwell/llvm12-0-no-llvm-linking"]
llvm13-0 = ["inkwell/llvm13-0-no-llvm-linking"]
@@ -32,7 +31,9 @@ llvm14-0 = ["inkwell/llvm14-0-no-llvm-linking"]
llvm15-0 = ["inkwell/llvm15-0-no-llvm-linking"]
llvm16-0 = ["inkwell/llvm16-0-no-llvm-linking"]
llvm17-0 = ["inkwell/llvm17-0-no-llvm-linking"]
-llvm18-1 = ["inkwell/llvm18-0-no-llvm-linking"]
+llvm18-1 = ["inkwell/llvm18-1-no-llvm-linking"]
+llvm19-1 = ["inkwell/llvm19-1-no-llvm-linking"]
+llvm20-1 = ["inkwell/llvm20-1-no-llvm-linking"]
target-x86 = ["inkwell/target-x86"]
target-arm = ["inkwell/target-arm"]
@@ -53,7 +54,7 @@ target-riscv = ["inkwell/target-riscv"]
target-all = ["inkwell/target-all"]
[dependencies]
-inkwell = "0.5"
+inkwell = "0.6"
llvm-plugin-macros = { path = "../llvm-plugin-macros", version = "0.2", optional = true }
[build-dependencies]
diff --git a/llvm-plugin/build.rs b/llvm-plugin/build.rs
index 6ca43b5..dbb4977 100644
--- a/llvm-plugin/build.rs
+++ b/llvm-plugin/build.rs
@@ -199,9 +199,7 @@ mod llvm_sys {
}
fn llvm_version_from_features() -> (u32, u32) {
- if cfg!(feature = "llvm10-0") {
- (10, 0)
- } else if cfg!(feature = "llvm11-0") {
+ if cfg!(feature = "llvm11-0") {
(11, 0)
} else if cfg!(feature = "llvm12-0") {
(12, 0)
@@ -217,6 +215,10 @@ mod llvm_sys {
(17, 0)
} else if cfg!(feature = "llvm18-1") {
(18, 1)
+ } else if cfg!(feature = "llvm19-1") {
+ (19, 1)
+ } else if cfg!(feature = "llvm20-1") {
+ (20, 1)
} else {
panic!("Missing llvm* feature")
}
diff --git a/llvm-plugin/cpp/.clang-tidy b/llvm-plugin/cpp/.clang-tidy
index 33a45c9..51dc04f 100644
--- a/llvm-plugin/cpp/.clang-tidy
+++ b/llvm-plugin/cpp/.clang-tidy
@@ -1,5 +1,5 @@
# https://github.com/llvm/llvm-project/blob/main/.clang-tidy
-Checks: '-*,clang-diagnostic-*,llvm-*,misc-*,-misc-unused-parameters,-misc-non-private-member-variables-in-classes,-misc-no-recursion,readability-identifier-naming'
+Checks: '-*,clang-diagnostic-*,llvm-*,misc-*,-misc-const-correctness,-misc-unused-parameters,-misc-non-private-member-variables-in-classes,-misc-no-recursion,-misc-use-anonymous-namespace,readability-identifier-naming,-misc-include-cleaner'
CheckOptions:
- key: readability-identifier-naming.ClassCase
value: CamelCase
@@ -7,6 +7,10 @@ CheckOptions:
value: CamelCase
- key: readability-identifier-naming.FunctionCase
value: camelBack
+ # Exclude from scanning as this is an exported symbol used for fuzzing
+ # throughout the code base.
+ - key: readability-identifier-naming.FunctionIgnoredRegexp
+ value: "LLVMFuzzerTestOneInput"
- key: readability-identifier-naming.MemberCase
value: CamelCase
- key: readability-identifier-naming.ParameterCase
diff --git a/llvm-plugin/cpp/ffi.cc b/llvm-plugin/cpp/ffi.cc
index 39b3e6f..a52aae1 100644
--- a/llvm-plugin/cpp/ffi.cc
+++ b/llvm-plugin/cpp/ffi.cc
@@ -25,23 +25,6 @@ enum class OptimizationLevel { kO0, kO1, kO2, kO3, kOs, kOz };
namespace {
auto getFFIOptimizationLevel(LlvmOptLevel Opt) -> OptimizationLevel {
-#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR == 10)
- if (Opt == LlvmOptLevel::O0) {
- return OptimizationLevel::kO0;
- }
- if (Opt == LlvmOptLevel::O1) {
- return OptimizationLevel::kO1;
- }
- if (Opt == LlvmOptLevel::O2) {
- return OptimizationLevel::kO2;
- }
- if (Opt == LlvmOptLevel::O3) {
- return OptimizationLevel::kO3;
- }
- if (Opt == LlvmOptLevel::Os) {
- return OptimizationLevel::kOs;
- }
-#else
// Starting from LLVM-11, llvm::OptimizationLevel::Ox is no longer
// an enum but a global static. Using these global statics on Windows
// would not compile, because an LLVM plugin links to opt.exe. The
@@ -64,7 +47,6 @@ auto getFFIOptimizationLevel(LlvmOptLevel Opt) -> OptimizationLevel {
if (Opt.getSpeedupLevel() == 2 && Opt.getSizeLevel() == 2) {
return OptimizationLevel::kOz;
}
-#endif
return OptimizationLevel::kOz;
}
} // namespace
@@ -127,7 +109,6 @@ auto passBuilderAddFullLinkTimeOptimizationEarlyEPCallback(
}
#endif
-#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 11)
auto passBuilderAddOptimizerLastEPCallback(
llvm::PassBuilder &Builder, const void *DataPtr,
void (*Deleter)(const void *),
@@ -137,12 +118,16 @@ auto passBuilderAddOptimizerLastEPCallback(
Builder.registerOptimizerLastEPCallback(
[Data = std::move(Data), Callback](llvm::ModulePassManager &PassManager,
+#if (LLVM_VERSION_MAJOR >= 20)
+ LlvmOptLevel Opt,
+ llvm::ThinOrFullLTOPhase) {
+#else
LlvmOptLevel Opt) {
+#endif
const auto OptFFI = getFFIOptimizationLevel(Opt);
Callback(Data.get(), PassManager, OptFFI);
});
}
-#endif
#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 15)
auto passBuilderAddOptimizerEarlyEPCallback(
@@ -154,7 +139,12 @@ auto passBuilderAddOptimizerEarlyEPCallback(
Builder.registerOptimizerEarlyEPCallback(
[Data = std::move(Data), Callback](llvm::ModulePassManager &PassManager,
+#if (LLVM_VERSION_MAJOR >= 20)
+ LlvmOptLevel Opt,
+ llvm::ThinOrFullLTOPhase) {
+#else
LlvmOptLevel Opt) {
+#endif
const auto OptFFI = getFFIOptimizationLevel(Opt);
Callback(Data.get(), PassManager, OptFFI);
});
@@ -171,7 +161,12 @@ auto passBuilderAddPipelineEarlySimplificationEPCallback(
Builder.registerPipelineEarlySimplificationEPCallback(
[Data = std::move(Data), Callback](llvm::ModulePassManager &PassManager,
+#if (LLVM_VERSION_MAJOR >= 20)
+ LlvmOptLevel Opt,
+ llvm::ThinOrFullLTOPhase) {
+#else
LlvmOptLevel Opt) {
+#endif
const auto OptFFI = getFFIOptimizationLevel(Opt);
Callback(Data.get(), PassManager, OptFFI);
});
diff --git a/llvm-plugin/src/ffi.rs b/llvm-plugin/src/ffi.rs
index 59d1f05..501d45a 100644
--- a/llvm-plugin/src/ffi.rs
+++ b/llvm-plugin/src/ffi.rs
@@ -9,6 +9,8 @@ extern "C" {
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
))]
pub(crate) fn passBuilderAddFullLinkTimeOptimizationLastEPCallback(
builder: *mut c_void,
@@ -22,6 +24,8 @@ extern "C" {
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
))]
pub(crate) fn passBuilderAddFullLinkTimeOptimizationEarlyEPCallback(
builder: *mut c_void,
@@ -35,6 +39,8 @@ extern "C" {
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
))]
pub(crate) fn passBuilderAddOptimizerEarlyEPCallback(
builder: *mut c_void,
@@ -43,16 +49,6 @@ extern "C" {
cb_sys: extern "C" fn(*const c_void, *mut c_void, crate::OptimizationLevel),
);
- #[cfg(any(
- feature = "llvm11-0",
- feature = "llvm12-0",
- feature = "llvm13-0",
- feature = "llvm14-0",
- feature = "llvm15-0",
- feature = "llvm16-0",
- feature = "llvm17-0",
- feature = "llvm18-1",
- ))]
pub(crate) fn passBuilderAddOptimizerLastEPCallback(
builder: *mut c_void,
cb: *const c_void,
@@ -68,6 +64,8 @@ extern "C" {
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
))]
pub(crate) fn passBuilderAddPipelineEarlySimplificationEPCallback(
builder: *mut c_void,
@@ -84,6 +82,8 @@ extern "C" {
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
))]
pub(crate) fn passBuilderAddPipelineStartEPCallback(
builder: *mut c_void,
@@ -156,6 +156,8 @@ extern "C" {
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
))]
pub(crate) fn modulePassManagerIsEmpty(manager: *mut c_void) -> bool;
@@ -174,6 +176,8 @@ extern "C" {
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
))]
pub(crate) fn functionPassManagerIsEmpty(manager: *mut c_void) -> bool;
diff --git a/llvm-plugin/src/lib.rs b/llvm-plugin/src/lib.rs
index 1fcc7ca..23bac64 100644
--- a/llvm-plugin/src/lib.rs
+++ b/llvm-plugin/src/lib.rs
@@ -308,10 +308,6 @@ pub struct PassPluginLibraryInfo {
#[cfg(feature = "macros")]
pub use llvm_plugin_macros::*;
-// See https://github.com/jamesmth/llvm-plugin-rs/issues/3
-#[cfg(all(target_os = "windows", feature = "llvm10-0"))]
-compile_error!("LLVM 10 not supported on Windows");
-
#[cfg(all(
target_os = "windows",
any(
diff --git a/llvm-plugin/src/pass_builder.rs b/llvm-plugin/src/pass_builder.rs
index 86059ac..7bd863d 100644
--- a/llvm-plugin/src/pass_builder.rs
+++ b/llvm-plugin/src/pass_builder.rs
@@ -324,6 +324,8 @@ impl PassBuilder {
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
))]
pub fn add_pipeline_start_ep_callback(&mut self, cb: T)
where
@@ -375,6 +377,8 @@ impl PassBuilder {
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
))]
pub fn add_pipeline_early_simplification_ep_callback(&mut self, cb: T)
where
@@ -418,16 +422,6 @@ impl PassBuilder {
///
/// This extension point allows adding passes that run after everything
/// else.
- #[cfg(any(
- feature = "llvm11-0",
- feature = "llvm12-0",
- feature = "llvm13-0",
- feature = "llvm14-0",
- feature = "llvm15-0",
- feature = "llvm16-0",
- feature = "llvm17-0",
- feature = "llvm18-1",
- ))]
pub fn add_optimizer_last_ep_callback(&mut self, cb: T)
where
T: Fn(&mut ModulePassManager, OptimizationLevel) + 'static,
@@ -475,6 +469,8 @@ impl PassBuilder {
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
))]
pub fn add_full_lto_early_ep_callback(&mut self, cb: T)
where
@@ -523,6 +519,8 @@ impl PassBuilder {
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
))]
pub fn add_full_lto_last_ep_callback(&mut self, cb: T)
where
@@ -571,6 +569,8 @@ impl PassBuilder {
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
))]
pub fn add_optimizer_early_ep_callback(&mut self, cb: T)
where
diff --git a/llvm-plugin/src/pass_manager.rs b/llvm-plugin/src/pass_manager.rs
index c3e6251..317c9b2 100644
--- a/llvm-plugin/src/pass_manager.rs
+++ b/llvm-plugin/src/pass_manager.rs
@@ -72,6 +72,8 @@ impl ModulePassManager {
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
))]
pub fn is_empty(&self) -> bool {
unsafe { super::modulePassManagerIsEmpty(self.inner) }
@@ -143,6 +145,8 @@ impl FunctionPassManager {
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
))]
pub fn is_empty(&self) -> bool {
unsafe { super::functionPassManagerIsEmpty(self.inner) }
diff --git a/tests/plugins/Cargo.toml b/tests/plugins/Cargo.toml
index 719540d..ff67b0c 100644
--- a/tests/plugins/Cargo.toml
+++ b/tests/plugins/Cargo.toml
@@ -10,3 +10,6 @@ members = [
"plugin6",
"plugin7",
]
+
+[patch.crates-io]
+inkwell = { git = "https://github.com/stevefan1999-personal/inkwell" }
diff --git a/tests/plugins/plugin1-lld/Cargo.toml b/tests/plugins/plugin1-lld/Cargo.toml
index 1b4c90a..e29fcf7 100644
--- a/tests/plugins/plugin1-lld/Cargo.toml
+++ b/tests/plugins/plugin1-lld/Cargo.toml
@@ -18,6 +18,8 @@ llvm15-0 = ["llvm-plugin/llvm15-0"]
llvm16-0 = ["llvm-plugin/llvm16-0"]
llvm17-0 = ["llvm-plugin/llvm17-0"]
llvm18-1 = ["llvm-plugin/llvm18-1"]
+llvm19-1 = ["llvm-plugin/llvm19-1"]
+llvm20-1 = ["llvm-plugin/llvm20-1"]
target-x86 = ["llvm-plugin/target-x86"]
target-arm = ["llvm-plugin/target-arm"]
diff --git a/tests/plugins/plugin1/Cargo.toml b/tests/plugins/plugin1/Cargo.toml
index aa50e4d..377c6eb 100644
--- a/tests/plugins/plugin1/Cargo.toml
+++ b/tests/plugins/plugin1/Cargo.toml
@@ -10,7 +10,6 @@ crate-type = ["cdylib"]
default = ["target-all"]
win-link-opt = ["llvm-plugin/win-link-opt"]
-llvm10-0 = ["llvm-plugin/llvm10-0"]
llvm11-0 = ["llvm-plugin/llvm11-0"]
llvm12-0 = ["llvm-plugin/llvm12-0"]
llvm13-0 = ["llvm-plugin/llvm13-0"]
@@ -19,6 +18,8 @@ llvm15-0 = ["llvm-plugin/llvm15-0"]
llvm16-0 = ["llvm-plugin/llvm16-0"]
llvm17-0 = ["llvm-plugin/llvm17-0"]
llvm18-1 = ["llvm-plugin/llvm18-1"]
+llvm19-1 = ["llvm-plugin/llvm19-1"]
+llvm20-1 = ["llvm-plugin/llvm20-1"]
target-x86 = ["llvm-plugin/target-x86"]
target-arm = ["llvm-plugin/target-arm"]
diff --git a/tests/plugins/plugin2/Cargo.toml b/tests/plugins/plugin2/Cargo.toml
index 11a2a9a..dc9ae68 100644
--- a/tests/plugins/plugin2/Cargo.toml
+++ b/tests/plugins/plugin2/Cargo.toml
@@ -10,7 +10,6 @@ crate-type = ["cdylib"]
default = ["target-all"]
win-link-opt = ["llvm-plugin/win-link-opt"]
-llvm10-0 = ["llvm-plugin/llvm10-0"]
llvm11-0 = ["llvm-plugin/llvm11-0"]
llvm12-0 = ["llvm-plugin/llvm12-0"]
llvm13-0 = ["llvm-plugin/llvm13-0"]
@@ -19,6 +18,8 @@ llvm15-0 = ["llvm-plugin/llvm15-0"]
llvm16-0 = ["llvm-plugin/llvm16-0"]
llvm17-0 = ["llvm-plugin/llvm17-0"]
llvm18-1 = ["llvm-plugin/llvm18-1"]
+llvm19-1 = ["llvm-plugin/llvm19-1"]
+llvm20-1 = ["llvm-plugin/llvm20-1"]
target-x86 = ["llvm-plugin/target-x86"]
target-arm = ["llvm-plugin/target-arm"]
diff --git a/tests/plugins/plugin3/Cargo.toml b/tests/plugins/plugin3/Cargo.toml
index 246c5f6..54ddfde 100644
--- a/tests/plugins/plugin3/Cargo.toml
+++ b/tests/plugins/plugin3/Cargo.toml
@@ -10,7 +10,6 @@ crate-type = ["cdylib"]
default = ["target-all"]
win-link-opt = ["llvm-plugin/win-link-opt"]
-llvm10-0 = ["llvm-plugin/llvm10-0"]
llvm11-0 = ["llvm-plugin/llvm11-0"]
llvm12-0 = ["llvm-plugin/llvm12-0"]
llvm13-0 = ["llvm-plugin/llvm13-0"]
@@ -19,6 +18,8 @@ llvm15-0 = ["llvm-plugin/llvm15-0"]
llvm16-0 = ["llvm-plugin/llvm16-0"]
llvm17-0 = ["llvm-plugin/llvm17-0"]
llvm18-1 = ["llvm-plugin/llvm18-1"]
+llvm19-1 = ["llvm-plugin/llvm19-1"]
+llvm20-1 = ["llvm-plugin/llvm20-1"]
target-x86 = ["llvm-plugin/target-x86"]
target-arm = ["llvm-plugin/target-arm"]
diff --git a/tests/plugins/plugin4/Cargo.toml b/tests/plugins/plugin4/Cargo.toml
index a024b40..ab7dfa1 100644
--- a/tests/plugins/plugin4/Cargo.toml
+++ b/tests/plugins/plugin4/Cargo.toml
@@ -10,7 +10,6 @@ crate-type = ["cdylib"]
default = ["target-all"]
win-link-opt = ["llvm-plugin/win-link-opt"]
-llvm10-0 = ["llvm-plugin/llvm10-0"]
llvm11-0 = ["llvm-plugin/llvm11-0"]
llvm12-0 = ["llvm-plugin/llvm12-0"]
llvm13-0 = ["llvm-plugin/llvm13-0"]
@@ -19,6 +18,8 @@ llvm15-0 = ["llvm-plugin/llvm15-0"]
llvm16-0 = ["llvm-plugin/llvm16-0"]
llvm17-0 = ["llvm-plugin/llvm17-0"]
llvm18-1 = ["llvm-plugin/llvm18-1"]
+llvm19-1 = ["llvm-plugin/llvm19-1"]
+llvm20-1 = ["llvm-plugin/llvm20-1"]
target-x86 = ["llvm-plugin/target-x86"]
target-arm = ["llvm-plugin/target-arm"]
diff --git a/tests/plugins/plugin5/Cargo.toml b/tests/plugins/plugin5/Cargo.toml
index a10c583..3059bdb 100644
--- a/tests/plugins/plugin5/Cargo.toml
+++ b/tests/plugins/plugin5/Cargo.toml
@@ -10,7 +10,6 @@ crate-type = ["cdylib"]
default = ["target-all"]
win-link-opt = ["llvm-plugin/win-link-opt"]
-llvm10-0 = ["llvm-plugin/llvm10-0"]
llvm11-0 = ["llvm-plugin/llvm11-0"]
llvm12-0 = ["llvm-plugin/llvm12-0"]
llvm13-0 = ["llvm-plugin/llvm13-0"]
@@ -19,6 +18,8 @@ llvm15-0 = ["llvm-plugin/llvm15-0"]
llvm16-0 = ["llvm-plugin/llvm16-0"]
llvm17-0 = ["llvm-plugin/llvm17-0"]
llvm18-1 = ["llvm-plugin/llvm18-1"]
+llvm19-1 = ["llvm-plugin/llvm19-1"]
+llvm20-1 = ["llvm-plugin/llvm20-1"]
target-x86 = ["llvm-plugin/target-x86"]
target-arm = ["llvm-plugin/target-arm"]
diff --git a/tests/plugins/plugin6/Cargo.toml b/tests/plugins/plugin6/Cargo.toml
index 3a34fc4..76594ca 100644
--- a/tests/plugins/plugin6/Cargo.toml
+++ b/tests/plugins/plugin6/Cargo.toml
@@ -10,7 +10,6 @@ crate-type = ["cdylib"]
default = ["target-all"]
win-link-opt = ["llvm-plugin/win-link-opt"]
-llvm10-0 = ["llvm-plugin/llvm10-0"]
llvm11-0 = ["llvm-plugin/llvm11-0"]
llvm12-0 = ["llvm-plugin/llvm12-0"]
llvm13-0 = ["llvm-plugin/llvm13-0"]
@@ -19,6 +18,8 @@ llvm15-0 = ["llvm-plugin/llvm15-0"]
llvm16-0 = ["llvm-plugin/llvm16-0"]
llvm17-0 = ["llvm-plugin/llvm17-0"]
llvm18-1 = ["llvm-plugin/llvm18-1"]
+llvm19-1 = ["llvm-plugin/llvm19-1"]
+llvm20-1 = ["llvm-plugin/llvm20-1"]
target-x86 = ["llvm-plugin/target-x86"]
target-arm = ["llvm-plugin/target-arm"]
diff --git a/tests/plugins/plugin6/src/lib.rs b/tests/plugins/plugin6/src/lib.rs
index c1b54e6..ec4d129 100644
--- a/tests/plugins/plugin6/src/lib.rs
+++ b/tests/plugins/plugin6/src/lib.rs
@@ -30,6 +30,8 @@ fn plugin_registrar(builder: &mut PassBuilder) {
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
))]
builder.add_pipeline_start_ep_callback(|manager, opt| {
assert!(matches!(opt, OptimizationLevel::O3));
@@ -44,22 +46,14 @@ fn plugin_registrar(builder: &mut PassBuilder) {
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
))]
builder.add_pipeline_early_simplification_ep_callback(|manager, opt| {
assert!(matches!(opt, OptimizationLevel::O3));
manager.add_pass(PipelineEarlySimpPass);
});
- #[cfg(any(
- feature = "llvm11-0",
- feature = "llvm12-0",
- feature = "llvm13-0",
- feature = "llvm14-0",
- feature = "llvm15-0",
- feature = "llvm16-0",
- feature = "llvm17-0",
- feature = "llvm18-1",
- ))]
builder.add_optimizer_last_ep_callback(|manager, opt| {
assert!(matches!(opt, OptimizationLevel::O3));
manager.add_pass(OptimizerLastPass);
@@ -70,6 +64,8 @@ fn plugin_registrar(builder: &mut PassBuilder) {
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
))]
builder.add_optimizer_early_ep_callback(|manager, opt| {
assert!(matches!(opt, OptimizationLevel::O3));
diff --git a/tests/plugins/plugin7/Cargo.toml b/tests/plugins/plugin7/Cargo.toml
index f9b5ab1..f77b30f 100644
--- a/tests/plugins/plugin7/Cargo.toml
+++ b/tests/plugins/plugin7/Cargo.toml
@@ -10,7 +10,6 @@ crate-type = ["cdylib"]
default = ["target-all"]
win-link-opt = ["llvm-plugin/win-link-opt"]
-llvm10-0 = ["llvm-plugin/llvm10-0"]
llvm11-0 = ["llvm-plugin/llvm11-0"]
llvm12-0 = ["llvm-plugin/llvm12-0"]
llvm13-0 = ["llvm-plugin/llvm13-0"]
@@ -19,6 +18,8 @@ llvm15-0 = ["llvm-plugin/llvm15-0"]
llvm16-0 = ["llvm-plugin/llvm16-0"]
llvm17-0 = ["llvm-plugin/llvm17-0"]
llvm18-1 = ["llvm-plugin/llvm18-1"]
+llvm19-1 = ["llvm-plugin/llvm19-1"]
+llvm20-1 = ["llvm-plugin/llvm20-1"]
target-x86 = ["llvm-plugin/target-x86"]
target-arm = ["llvm-plugin/target-arm"]
@@ -40,5 +41,5 @@ target-all = ["llvm-plugin/target-all"]
[dependencies]
llvm-plugin = { path = "../../../llvm-plugin", default-features = false, features = [
- "macros",
+ "macros",
] }
diff --git a/tests/plugins/plugin7/src/lib.rs b/tests/plugins/plugin7/src/lib.rs
index 9baa749..581fb7c 100644
--- a/tests/plugins/plugin7/src/lib.rs
+++ b/tests/plugins/plugin7/src/lib.rs
@@ -8,6 +8,8 @@ fn plugin_registrar(builder: &mut PassBuilder) {
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
))]
builder.add_full_lto_early_ep_callback(|manager, opt| {
assert!(matches!(opt, llvm_plugin::OptimizationLevel::O3));
@@ -19,6 +21,8 @@ fn plugin_registrar(builder: &mut PassBuilder) {
feature = "llvm16-0",
feature = "llvm17-0",
feature = "llvm18-1",
+ feature = "llvm19-1",
+ feature = "llvm20-1",
))]
builder.add_full_lto_last_ep_callback(|manager, opt| {
assert!(matches!(opt, llvm_plugin::OptimizationLevel::O3));