2025-07-01 00:43:31 +05:00
|
|
|
//! Checks clean diagnostics for argument count mismatches without unrelated errors.
|
|
|
|
|
//!
|
|
|
|
|
//! `delegate!` part related: <https://github.com/rust-lang/rust/pull/140591>
|
|
|
|
|
|
2025-05-02 21:28:11 +05:00
|
|
|
//@ aux-build: delegate_macro.rs
|
|
|
|
|
extern crate delegate_macro;
|
|
|
|
|
use delegate_macro::delegate;
|
|
|
|
|
|
|
|
|
|
fn foo(a: isize, b: isize, c: isize, d: isize) {
|
|
|
|
|
panic!();
|
2012-03-28 17:01:42 -07:00
|
|
|
}
|
|
|
|
|
|
2025-05-02 21:28:11 +05:00
|
|
|
fn bar(a: i32, b: i32, c: i32, d: i32, e: i32, f: i32) {
|
2020-09-23 22:43:32 -04:00
|
|
|
println!("{}", a);
|
|
|
|
|
println!("{}", b);
|
|
|
|
|
println!("{}", c);
|
|
|
|
|
println!("{}", d);
|
|
|
|
|
println!("{}", e);
|
|
|
|
|
println!("{}", f);
|
|
|
|
|
}
|
|
|
|
|
|
2025-05-02 21:28:11 +05:00
|
|
|
macro_rules! delegate_local {
|
|
|
|
|
($method:ident) => {
|
|
|
|
|
<Self>::$method(8)
|
|
|
|
|
//~^ ERROR function takes 2 arguments but 1
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
macro_rules! delegate_from {
|
|
|
|
|
($from:ident, $method:ident) => {
|
|
|
|
|
<$from>::$method(8)
|
|
|
|
|
//~^ ERROR function takes 2 arguments but 1
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct Bar;
|
|
|
|
|
|
|
|
|
|
impl Bar {
|
|
|
|
|
fn foo(a: u8, b: u8) {}
|
2025-07-01 00:43:31 +05:00
|
|
|
|
2025-05-02 21:28:11 +05:00
|
|
|
fn bar() {
|
|
|
|
|
delegate_local!(foo);
|
|
|
|
|
delegate!(foo);
|
|
|
|
|
//~^ ERROR function takes 2 arguments but 1
|
|
|
|
|
delegate_from!(Bar, foo);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2012-03-28 17:01:42 -07:00
|
|
|
fn main() {
|
2025-05-02 21:28:11 +05:00
|
|
|
foo(1, 2, 3);
|
|
|
|
|
//~^ ERROR function takes 4 arguments but 3
|
|
|
|
|
bar(1, 2, 3);
|
|
|
|
|
//~^ ERROR function takes 6 arguments but 3
|
2012-03-28 17:01:42 -07:00
|
|
|
}
|