rust-lang / rust

Empowering everyone to build reliable and efficient software.
https://www.rust-lang.org
Other
99.1k stars 12.8k forks source link

Most `extern "*-interrupt-*" fn` should enforce 0-sized signatures #132837

Open workingjubilee opened 3 weeks ago

workingjubilee commented 3 weeks ago

I tried this code with rustc --target riscv64gc-unknown-linux-gnu rust_code.rs:

#![feature(abi_riscv_interrupt)]
pub extern "riscv-interrupt-m" fn interrupt_machine(_a: u8, _b: u8, _c: u8) {
}

pub extern "riscv-interrupt-s" fn interrupt_supervisor(_a: u8, _b: u8, _c: u8) {
}

pub fn main() {
    interrupt_machine(1, 2, 3);
    interrupt_supervisor(4, 5, 6);
}

I expected to see rustc catch this invalid signature.

Instead, this happened:

rustc-LLVM ERROR: Functions with the interrupt attribute cannot have arguments!

My understanding is that the same story applies for non-x86 interrupt ABIs like MSP430's.

Meta

rustc --version --verbose:

rustc 1.84.0-nightly (a0d98ff0e 2024-10-31)
binary: rustc
commit-hash: a0d98ff0e5b6e1f2c63fd26f68484792621b235c
commit-date: 2024-10-31
host: x86_64-unknown-linux-gnu
release: 1.84.0-nightly
LLVM version: 19.1.1

@rustbot label: +A-hardware-interrupts +A-LLVM +O-riscv +O-msp430 +A-ABI +T-compiler

Related Issues

workingjubilee commented 3 weeks ago

@Patryk27 Should AVR also be on the list of nullary interrupt ABIs?

workingjubilee commented 3 weeks ago

I suppose ZSTs in arguments could be fine, for anyone interested in doing weird typestate shenanigans.

Patryk27 commented 3 weeks ago

@Patryk27 Should AVR also be on the list of nullary interrupt ABIs?

Yes, AVR also requires argument-less interrupt handlers.