52 lines
1.6 KiB
Rust
52 lines
1.6 KiB
Rust
|
|
#![feature(macro_derive)]
|
||
|
|
|
||
|
|
macro_rules! MyDerive {
|
||
|
|
derive() { $($body:tt)* } => {
|
||
|
|
compile_error!(concat!("MyDerive: ", stringify!($($body)*)));
|
||
|
|
};
|
||
|
|
//~^^ ERROR: MyDerive
|
||
|
|
}
|
||
|
|
|
||
|
|
macro_rules! fn_only {
|
||
|
|
//~^ NOTE: `fn_only` exists, but has no `derive` rules
|
||
|
|
//~| NOTE: `fn_only` exists, but has no `derive` rules
|
||
|
|
{} => {}
|
||
|
|
}
|
||
|
|
|
||
|
|
//~v NOTE: `DeriveOnly` exists, but has no rules for function-like invocation
|
||
|
|
macro_rules! DeriveOnly {
|
||
|
|
derive() {} => {}
|
||
|
|
}
|
||
|
|
|
||
|
|
fn main() {
|
||
|
|
//~v NOTE: in this expansion of #[derive(MyDerive)]
|
||
|
|
#[derive(MyDerive)]
|
||
|
|
struct S1;
|
||
|
|
|
||
|
|
//~vv ERROR: cannot find macro `MyDerive` in this scope
|
||
|
|
//~| NOTE: `MyDerive` is in scope, but it is a derive
|
||
|
|
MyDerive!(arg);
|
||
|
|
|
||
|
|
#[derive(fn_only)]
|
||
|
|
struct S2;
|
||
|
|
//~^^ ERROR: cannot find derive macro `fn_only` in this scope
|
||
|
|
//~| ERROR: cannot find derive macro `fn_only` in this scope
|
||
|
|
//~| NOTE: duplicate diagnostic emitted
|
||
|
|
|
||
|
|
DeriveOnly!(); //~ ERROR: cannot find macro `DeriveOnly` in this scope
|
||
|
|
}
|
||
|
|
|
||
|
|
#[derive(ForwardReferencedDerive)]
|
||
|
|
struct S;
|
||
|
|
//~^^ ERROR: cannot find derive macro `ForwardReferencedDerive` in this scope
|
||
|
|
//~| NOTE: consider moving the definition of `ForwardReferencedDerive` before this call
|
||
|
|
//~| ERROR: cannot find derive macro `ForwardReferencedDerive` in this scope
|
||
|
|
//~| NOTE: consider moving the definition of `ForwardReferencedDerive` before this call
|
||
|
|
//~| NOTE: duplicate diagnostic emitted
|
||
|
|
|
||
|
|
macro_rules! ForwardReferencedDerive {
|
||
|
|
//~^ NOTE: a macro with the same name exists, but it appears later
|
||
|
|
//~| NOTE: a macro with the same name exists, but it appears later
|
||
|
|
derive() {} => {}
|
||
|
|
}
|