tests: add test for invalid interrupt signatures
This commit is contained in:
parent
513999b936
commit
1045b70304
7 changed files with 304 additions and 0 deletions
28
tests/ui/abi/interrupt-invalid-signature.avr.stderr
Normal file
28
tests/ui/abi/interrupt-invalid-signature.avr.stderr
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
error: invalid signature for `extern "avr-interrupt"` function
|
||||
--> $DIR/interrupt-invalid-signature.rs:44:35
|
||||
|
|
||||
LL | extern "avr-interrupt" fn avr_arg(_byte: u8) {}
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= note: functions with the "avr-interrupt" ABI cannot have any parameters or return type
|
||||
help: remove the parameters and return type
|
||||
|
|
||||
LL - extern "avr-interrupt" fn avr_arg(_byte: u8) {}
|
||||
LL + extern "avr-interrupt" fn avr_arg() {}
|
||||
|
|
||||
|
||||
error: invalid signature for `extern "avr-interrupt"` function
|
||||
--> $DIR/interrupt-invalid-signature.rs:59:40
|
||||
|
|
||||
LL | extern "avr-interrupt" fn avr_ret() -> u8 {
|
||||
| ^^
|
||||
|
|
||||
= note: functions with the "avr-interrupt" ABI cannot have any parameters or return type
|
||||
help: remove the parameters and return type
|
||||
|
|
||||
LL - extern "avr-interrupt" fn avr_ret() -> u8 {
|
||||
LL + extern "avr-interrupt" fn avr_ret() {
|
||||
|
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
15
tests/ui/abi/interrupt-invalid-signature.i686.stderr
Normal file
15
tests/ui/abi/interrupt-invalid-signature.i686.stderr
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
error: invalid signature for `extern "x86-interrupt"` function
|
||||
--> $DIR/interrupt-invalid-signature.rs:83:40
|
||||
|
|
||||
LL | extern "x86-interrupt" fn x86_ret() -> u8 {
|
||||
| ^^
|
||||
|
|
||||
= note: functions with the "custom" ABI cannot have a return type
|
||||
help: remove the return type
|
||||
--> $DIR/interrupt-invalid-signature.rs:83:40
|
||||
|
|
||||
LL | extern "x86-interrupt" fn x86_ret() -> u8 {
|
||||
| ^^
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
28
tests/ui/abi/interrupt-invalid-signature.msp430.stderr
Normal file
28
tests/ui/abi/interrupt-invalid-signature.msp430.stderr
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
error: invalid signature for `extern "msp430-interrupt"` function
|
||||
--> $DIR/interrupt-invalid-signature.rs:40:41
|
||||
|
|
||||
LL | extern "msp430-interrupt" fn msp430_arg(_byte: u8) {}
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= note: functions with the "msp430-interrupt" ABI cannot have any parameters or return type
|
||||
help: remove the parameters and return type
|
||||
|
|
||||
LL - extern "msp430-interrupt" fn msp430_arg(_byte: u8) {}
|
||||
LL + extern "msp430-interrupt" fn msp430_arg() {}
|
||||
|
|
||||
|
||||
error: invalid signature for `extern "msp430-interrupt"` function
|
||||
--> $DIR/interrupt-invalid-signature.rs:65:46
|
||||
|
|
||||
LL | extern "msp430-interrupt" fn msp430_ret() -> u8 {
|
||||
| ^^
|
||||
|
|
||||
= note: functions with the "msp430-interrupt" ABI cannot have any parameters or return type
|
||||
help: remove the parameters and return type
|
||||
|
|
||||
LL - extern "msp430-interrupt" fn msp430_ret() -> u8 {
|
||||
LL + extern "msp430-interrupt" fn msp430_ret() {
|
||||
|
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
54
tests/ui/abi/interrupt-invalid-signature.riscv32.stderr
Normal file
54
tests/ui/abi/interrupt-invalid-signature.riscv32.stderr
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
error: invalid signature for `extern "riscv-interrupt-m"` function
|
||||
--> $DIR/interrupt-invalid-signature.rs:48:43
|
||||
|
|
||||
LL | extern "riscv-interrupt-m" fn riscv_m_arg(_byte: u8) {}
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= note: functions with the "riscv-interrupt-m" ABI cannot have any parameters or return type
|
||||
help: remove the parameters and return type
|
||||
|
|
||||
LL - extern "riscv-interrupt-m" fn riscv_m_arg(_byte: u8) {}
|
||||
LL + extern "riscv-interrupt-m" fn riscv_m_arg() {}
|
||||
|
|
||||
|
||||
error: invalid signature for `extern "riscv-interrupt-s"` function
|
||||
--> $DIR/interrupt-invalid-signature.rs:52:43
|
||||
|
|
||||
LL | extern "riscv-interrupt-s" fn riscv_s_arg(_byte: u8) {}
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= note: functions with the "riscv-interrupt-s" ABI cannot have any parameters or return type
|
||||
help: remove the parameters and return type
|
||||
|
|
||||
LL - extern "riscv-interrupt-s" fn riscv_s_arg(_byte: u8) {}
|
||||
LL + extern "riscv-interrupt-s" fn riscv_s_arg() {}
|
||||
|
|
||||
|
||||
error: invalid signature for `extern "riscv-interrupt-m"` function
|
||||
--> $DIR/interrupt-invalid-signature.rs:71:48
|
||||
|
|
||||
LL | extern "riscv-interrupt-m" fn riscv_m_ret() -> u8 {
|
||||
| ^^
|
||||
|
|
||||
= note: functions with the "riscv-interrupt-m" ABI cannot have any parameters or return type
|
||||
help: remove the parameters and return type
|
||||
|
|
||||
LL - extern "riscv-interrupt-m" fn riscv_m_ret() -> u8 {
|
||||
LL + extern "riscv-interrupt-m" fn riscv_m_ret() {
|
||||
|
|
||||
|
||||
error: invalid signature for `extern "riscv-interrupt-s"` function
|
||||
--> $DIR/interrupt-invalid-signature.rs:77:48
|
||||
|
|
||||
LL | extern "riscv-interrupt-s" fn riscv_s_ret() -> u8 {
|
||||
| ^^
|
||||
|
|
||||
= note: functions with the "riscv-interrupt-s" ABI cannot have any parameters or return type
|
||||
help: remove the parameters and return type
|
||||
|
|
||||
LL - extern "riscv-interrupt-s" fn riscv_s_ret() -> u8 {
|
||||
LL + extern "riscv-interrupt-s" fn riscv_s_ret() {
|
||||
|
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
54
tests/ui/abi/interrupt-invalid-signature.riscv64.stderr
Normal file
54
tests/ui/abi/interrupt-invalid-signature.riscv64.stderr
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
error: invalid signature for `extern "riscv-interrupt-m"` function
|
||||
--> $DIR/interrupt-invalid-signature.rs:48:43
|
||||
|
|
||||
LL | extern "riscv-interrupt-m" fn riscv_m_arg(_byte: u8) {}
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= note: functions with the "riscv-interrupt-m" ABI cannot have any parameters or return type
|
||||
help: remove the parameters and return type
|
||||
|
|
||||
LL - extern "riscv-interrupt-m" fn riscv_m_arg(_byte: u8) {}
|
||||
LL + extern "riscv-interrupt-m" fn riscv_m_arg() {}
|
||||
|
|
||||
|
||||
error: invalid signature for `extern "riscv-interrupt-s"` function
|
||||
--> $DIR/interrupt-invalid-signature.rs:52:43
|
||||
|
|
||||
LL | extern "riscv-interrupt-s" fn riscv_s_arg(_byte: u8) {}
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= note: functions with the "riscv-interrupt-s" ABI cannot have any parameters or return type
|
||||
help: remove the parameters and return type
|
||||
|
|
||||
LL - extern "riscv-interrupt-s" fn riscv_s_arg(_byte: u8) {}
|
||||
LL + extern "riscv-interrupt-s" fn riscv_s_arg() {}
|
||||
|
|
||||
|
||||
error: invalid signature for `extern "riscv-interrupt-m"` function
|
||||
--> $DIR/interrupt-invalid-signature.rs:71:48
|
||||
|
|
||||
LL | extern "riscv-interrupt-m" fn riscv_m_ret() -> u8 {
|
||||
| ^^
|
||||
|
|
||||
= note: functions with the "riscv-interrupt-m" ABI cannot have any parameters or return type
|
||||
help: remove the parameters and return type
|
||||
|
|
||||
LL - extern "riscv-interrupt-m" fn riscv_m_ret() -> u8 {
|
||||
LL + extern "riscv-interrupt-m" fn riscv_m_ret() {
|
||||
|
|
||||
|
||||
error: invalid signature for `extern "riscv-interrupt-s"` function
|
||||
--> $DIR/interrupt-invalid-signature.rs:77:48
|
||||
|
|
||||
LL | extern "riscv-interrupt-s" fn riscv_s_ret() -> u8 {
|
||||
| ^^
|
||||
|
|
||||
= note: functions with the "riscv-interrupt-s" ABI cannot have any parameters or return type
|
||||
help: remove the parameters and return type
|
||||
|
|
||||
LL - extern "riscv-interrupt-s" fn riscv_s_ret() -> u8 {
|
||||
LL + extern "riscv-interrupt-s" fn riscv_s_ret() {
|
||||
|
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
110
tests/ui/abi/interrupt-invalid-signature.rs
Normal file
110
tests/ui/abi/interrupt-invalid-signature.rs
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
/*! Tests interrupt ABIs have a constricted signature
|
||||
|
||||
Most interrupt ABIs share a similar restriction in terms of not allowing most signatures.
|
||||
Specifically, they generally cannot have arguments or return types.
|
||||
So we test that they error in essentially all of the same places.
|
||||
A notable and interesting exception is x86.
|
||||
|
||||
This test uses `cfg` because it is not testing whether these ABIs work on the platform.
|
||||
*/
|
||||
//@ add-core-stubs
|
||||
//@ revisions: x64 i686 riscv32 riscv64 avr msp430
|
||||
//
|
||||
//@ [x64] needs-llvm-components: x86
|
||||
//@ [x64] compile-flags: --target=x86_64-unknown-linux-gnu --crate-type=rlib
|
||||
//@ [i686] needs-llvm-components: x86
|
||||
//@ [i686] compile-flags: --target=i686-unknown-linux-gnu --crate-type=rlib
|
||||
//@ [riscv32] needs-llvm-components: riscv
|
||||
//@ [riscv32] compile-flags: --target=riscv32i-unknown-none-elf --crate-type=rlib
|
||||
//@ [riscv64] needs-llvm-components: riscv
|
||||
//@ [riscv64] compile-flags: --target=riscv64gc-unknown-none-elf --crate-type=rlib
|
||||
//@ [avr] needs-llvm-components: avr
|
||||
//@ [avr] compile-flags: --target=avr-none -C target-cpu=atmega328p --crate-type=rlib
|
||||
//@ [msp430] needs-llvm-components: msp430
|
||||
//@ [msp430] compile-flags: --target=msp430-none-elf --crate-type=rlib
|
||||
#![no_core]
|
||||
#![feature(
|
||||
no_core,
|
||||
abi_msp430_interrupt,
|
||||
abi_avr_interrupt,
|
||||
abi_x86_interrupt,
|
||||
abi_riscv_interrupt
|
||||
)]
|
||||
|
||||
extern crate minicore;
|
||||
use minicore::*;
|
||||
|
||||
/* most extern "interrupt" definitions should not accept args */
|
||||
|
||||
#[cfg(msp430)]
|
||||
extern "msp430-interrupt" fn msp430_arg(_byte: u8) {}
|
||||
//[msp430]~^ ERROR invalid signature
|
||||
|
||||
#[cfg(avr)]
|
||||
extern "avr-interrupt" fn avr_arg(_byte: u8) {}
|
||||
//[avr]~^ ERROR invalid signature
|
||||
|
||||
#[cfg(any(riscv32,riscv64))]
|
||||
extern "riscv-interrupt-m" fn riscv_m_arg(_byte: u8) {}
|
||||
//[riscv32,riscv64]~^ ERROR invalid signature
|
||||
|
||||
#[cfg(any(riscv32,riscv64))]
|
||||
extern "riscv-interrupt-s" fn riscv_s_arg(_byte: u8) {}
|
||||
//[riscv32,riscv64]~^ ERROR invalid signature
|
||||
|
||||
|
||||
/* all extern "interrupt" definitions should not return non-1ZST values */
|
||||
|
||||
#[cfg(avr)]
|
||||
extern "avr-interrupt" fn avr_ret() -> u8 {
|
||||
//[avr]~^ ERROR invalid signature
|
||||
1
|
||||
}
|
||||
|
||||
#[cfg(msp430)]
|
||||
extern "msp430-interrupt" fn msp430_ret() -> u8 {
|
||||
//[msp430]~^ ERROR invalid signature
|
||||
1
|
||||
}
|
||||
|
||||
#[cfg(any(riscv32,riscv64))]
|
||||
extern "riscv-interrupt-m" fn riscv_m_ret() -> u8 {
|
||||
//[riscv32,riscv64]~^ ERROR invalid signature
|
||||
1
|
||||
}
|
||||
|
||||
#[cfg(any(riscv32,riscv64))]
|
||||
extern "riscv-interrupt-s" fn riscv_s_ret() -> u8 {
|
||||
//[riscv32,riscv64]~^ ERROR invalid signature
|
||||
1
|
||||
}
|
||||
|
||||
#[cfg(any(x64,i686))]
|
||||
extern "x86-interrupt" fn x86_ret() -> u8 {
|
||||
//[x64,i686]~^ ERROR invalid signature
|
||||
1
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* extern "interrupt" fnptrs with invalid signatures */
|
||||
|
||||
#[cfg(avr)]
|
||||
fn avr_ptr(_f: extern "avr-interrupt" fn(u8) -> u8) {
|
||||
}
|
||||
|
||||
#[cfg(msp430)]
|
||||
fn msp430_ptr(_f: extern "msp430-interrupt" fn(u8) -> u8) {
|
||||
}
|
||||
|
||||
#[cfg(any(riscv32,riscv64))]
|
||||
fn riscv_m_ptr(_f: extern "riscv-interrupt-m" fn(u8) -> u8) {
|
||||
}
|
||||
|
||||
#[cfg(any(riscv32,riscv64))]
|
||||
fn riscv_s_ptr(_f: extern "riscv-interrupt-s" fn(u8) -> u8) {
|
||||
}
|
||||
|
||||
#[cfg(any(x64,i686))]
|
||||
fn x86_ptr(_f: extern "x86-interrupt" fn() -> u8) {
|
||||
}
|
||||
15
tests/ui/abi/interrupt-invalid-signature.x64.stderr
Normal file
15
tests/ui/abi/interrupt-invalid-signature.x64.stderr
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
error: invalid signature for `extern "x86-interrupt"` function
|
||||
--> $DIR/interrupt-invalid-signature.rs:83:40
|
||||
|
|
||||
LL | extern "x86-interrupt" fn x86_ret() -> u8 {
|
||||
| ^^
|
||||
|
|
||||
= note: functions with the "custom" ABI cannot have a return type
|
||||
help: remove the return type
|
||||
--> $DIR/interrupt-invalid-signature.rs:83:40
|
||||
|
|
||||
LL | extern "x86-interrupt" fn x86_ret() -> u8 {
|
||||
| ^^
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue