An externally implementable item is not compatible with its declaration.
Erroneous code example:
#![feature(extern_item_impls)] #[eii(foo)] fn x(); #[foo] fn y(a: u64) -> u64 { //~^ ERROR E0806 a } fn main() {}
The error here is caused by the fact that y implements the externally implementable item foo. It can only do so if the signature of the implementation y matches that of the declaration of foo. So, to fix this, y's signature must be changed to match that of x:
#![feature(extern_item_impls)] #[eii(foo)] fn x(); #[foo] fn y() {} fn main() {}
One common way this can be triggered is by using the wrong signature for #[panic_handler]. The signature is provided by core.
#![no_std] #[panic_handler] fn on_panic() -> ! { //~^ ERROR E0806 loop {} } fn main() {}
Should be:
#![no_std] #[panic_handler] fn on_panic(info: &core::panic::PanicInfo<'_>) -> ! { loop {} } fn main() {}