#![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() {} => {} }