-
Notifications
You must be signed in to change notification settings - Fork 13.7k
Open
Labels
C-bugCategory: This is a bug.Category: This is a bug.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️P-mediumMedium priorityMedium priorityT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.needs-triageThis issue may need triage. Remove it if it has been sufficiently triaged.This issue may need triage. Remove it if it has been sufficiently triaged.regression-from-stable-to-stablePerformance or correctness regression from one stable version to another.Performance or correctness regression from one stable version to another.
Description
Code
I think a cherry-pick into 1.89.0 (7e0eb3b) produces a valid ICE error message due to calling a function with an unsupported abi. Though, the place where the expected error should be generated is only a warning in 1.89. I think the warning will be an error in 1.90.
# Setup rust 1.89.0
git clone https://github.com/rust-osdev/uefi-rs.git
cd uefi-rs/uefi
cargo build
Generates warnings like:
warning: the calling convention "efiapi" is not supported on this target
--> uefi-raw/src/protocol/acpi.rs:9:29
|
9 | pub install_acpi_table: unsafe extern "efiapi" fn(
| _____________________________^
10 | | this: *const Self,
11 | | acpi_table_buffer: *const c_void,
12 | | acpi_table_size: usize,
13 | | table_key: *mut usize,
14 | | ) -> Status,
| |_______________^
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #130260 <https://github.com/rust-lang/rust/issues/130260>
= note: `#[warn(unsupported_fn_ptr_calling_conventions)]` on by default
And if the function is called, generates an ICE:
error: internal compiler error: invalid abi for platform should have reported an error: "efiapi"
--> uefi/src/proto/acpi.rs:53:13
|
53 | (self.0.install_acpi_table)(&self.0, acpi_table_ptr, acpi_table_size, &mut table_key)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
And a simplified reproducer:
pub struct Foo {
x: extern "efiapi" fn(),
}
pub fn foo_func(f: Foo) {
(f.x)();
}
Meta
rustc --version --verbose
:
rustc 1.89.0 (29483883e 2025-08-04)
binary: rustc
commit-hash: 29483883eed69d5fb4db01964cdf2af4d86e9cb2
commit-date: 2025-08-04
host: powerpc64le-unknown-linux-gnu
release: 1.89.0
LLVM version: 20.1.7
Error output
note: delayed at compiler/rustc_hir_typeck/src/callee.rs:162:39 - disabled backtrace
--> uefi/src/proto/pci/root_bridge.rs:127:13
|
127 | / (self.io_access.read)(
128 | | self.proto,
129 | | width_mode,
130 | | addr.into(),
131 | | data.len(),
132 | | data.as_mut_ptr().cast(),
133 | | )
| |_____________^
error: internal compiler error: invalid abi for platform should have reported an error: "efiapi"
--> uefi/src/proto/pci/root_bridge.rs:150:13
|
150 | / (self.io_access.write)(
151 | | self.proto,
152 | | width_mode,
153 | | addr.into(),
154 | | data.len(),
155 | | data.as_ptr().cast(),
156 | | )
| |_____________^
|
Metadata
Metadata
Assignees
Labels
C-bugCategory: This is a bug.Category: This is a bug.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️P-mediumMedium priorityMedium priorityT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.needs-triageThis issue may need triage. Remove it if it has been sufficiently triaged.This issue may need triage. Remove it if it has been sufficiently triaged.regression-from-stable-to-stablePerformance or correctness regression from one stable version to another.Performance or correctness regression from one stable version to another.