|  | fn empty() {} | 
|  | fn one_arg<T>(_a: T) {} | 
|  | fn two_arg_same(_a: i32, _b: i32) {} | 
|  | fn two_arg_diff(_a: i32, _b: &str) {} | 
|  |  | 
|  | macro_rules! foo { | 
|  | ($x:expr, ~) => { | 
|  | empty($x, 1); //~ ERROR function takes | 
|  | }; | 
|  | ($x:expr, $y:expr) => { | 
|  | empty($x, $y); //~ ERROR function takes | 
|  | }; | 
|  | (~, $y:expr) => { | 
|  | empty(1, $y); //~ ERROR function takes | 
|  | }; | 
|  | } | 
|  |  | 
|  | fn main() { | 
|  | empty(""); //~ ERROR function takes | 
|  | empty(1, 1); //~ ERROR function takes | 
|  |  | 
|  | one_arg(1, 1); //~ ERROR function takes | 
|  | one_arg(1, ""); //~ ERROR function takes | 
|  | one_arg(1, "", 1.0); //~ ERROR function takes | 
|  |  | 
|  | two_arg_same(1, 1, 1); //~ ERROR function takes | 
|  | two_arg_same(1, 1, 1.0); //~ ERROR function takes | 
|  |  | 
|  | two_arg_diff(1, 1, ""); //~ ERROR function takes | 
|  | two_arg_diff(1, "", ""); //~ ERROR function takes | 
|  | two_arg_diff(1, 1, "", ""); //~ ERROR function takes | 
|  | two_arg_diff(1, "", 1, ""); //~ ERROR function takes | 
|  |  | 
|  | // Check with weird spacing and newlines | 
|  | two_arg_same(1, 1,     ""); //~ ERROR function takes | 
|  | two_arg_diff(1, 1,     ""); //~ ERROR function takes | 
|  | two_arg_same( //~ ERROR function takes | 
|  | 1, | 
|  | 1, | 
|  | "" | 
|  | ); | 
|  |  | 
|  | two_arg_diff( //~ ERROR function takes | 
|  | 1, | 
|  | 1, | 
|  | "" | 
|  | ); | 
|  |  | 
|  | // Check with macro expansions | 
|  | foo!(1, ~); | 
|  | foo!(~, 1); | 
|  | foo!(1, 1); | 
|  | one_arg(1, panic!()); //~ ERROR function takes | 
|  | one_arg(panic!(), 1); //~ ERROR function takes | 
|  | one_arg(stringify!($e), 1); //~ ERROR function takes | 
|  |  | 
|  | // Not a macro, but this also has multiple spans with equal source code, | 
|  | // but different expansion contexts. | 
|  | // https://github.com/rust-lang/rust/issues/114255 | 
|  | one_arg(for _ in 1.. {}, 1); //~ ERROR function takes | 
|  | } |