-
Notifications
You must be signed in to change notification settings - Fork 13.8k
Closed
Closed
Copy link
Labels
A-macrosArea: All kinds of macros (custom derive, macro_rules!, proc macros, ..)Area: All kinds of macros (custom derive, macro_rules!, proc macros, ..)A-proc-macrosArea: Procedural macrosArea: Procedural macrosC-bugCategory: This is a bug.Category: This is a bug.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.
Description
The following code:
// src/lib.rs
use proc_macro::{TokenStream};
#[proc_macro_derive(MyDerive, attributes(my_helper))]
pub fn my_derive(_target: TokenStream) -> TokenStream {
TokenStream::new()
}
// src/main.rs
#![dummy]
use derive_helper::*;
#[derive(MyDerive)]
#[my_helper]
struct Foo {}
fn main() {}
produces the following errors:
error: cannot find attribute `dummy` in this scope
--> src/main.rs:1:4
|
1 | #![dummy]
| ^^^^^
error: cannot determine resolution for the attribute macro `derive`
--> src/main.rs:5:3
|
5 | #[derive(MyDerive)]
| ^^^^^^
|
= note: import resolution is stuck, try simplifying macro imports
error: cannot determine resolution for the derive macro `MyDerive`
--> src/main.rs:5:10
|
5 | #[derive(MyDerive)]
| ^^^^^^^^
|
= note: import resolution is stuck, try simplifying macro imports
error: cannot determine resolution for the attribute macro `my_helper`
--> src/main.rs:6:3
|
6 | #[my_helper]
| ^^^^^^^^^
|
= note: import resolution is stuck, try simplifying macro imports
warning: derive helper attribute `my_helper` is used before it is introduced
--> src/main.rs:6:3
|
5 | #[derive(MyDerive)]
| -------- the attribute is introduced here
6 | #[my_helper]
| ^^^^^^^^^
|
= note: `#[warn(legacy_derive_helpers)]` on by default
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #79202 <https://github.com/rust-lang/rust/issues/79202>
error: aborting due to 4 previous errors; 1 warning emitted
The legacy_derive_helpers
warning is spurious and will disappear if #![dummy]
is removed.
Metadata
Metadata
Assignees
Labels
A-macrosArea: All kinds of macros (custom derive, macro_rules!, proc macros, ..)Area: All kinds of macros (custom derive, macro_rules!, proc macros, ..)A-proc-macrosArea: Procedural macrosArea: Procedural macrosC-bugCategory: This is a bug.Category: This is a bug.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.
Type
Projects
Milestone
Relationships
Development
Select code repository
Activity
Aaron1011 commentedon Feb 8, 2021
Caused by #79078
cc @petrochenkov
derive
in this scope taiki-e/pin-project#315petrochenkov commentedon Feb 13, 2021
This looks like a consequence of #67839.
Initial resolution of
derive
fails, so it's recovered as an unresolved inert attribute, but due to the linked issue the order of attributes swaps during the "inert attribute expansion".So we have this code before resolving
my_helper
:and
my_derive
gets resolved as a legacy helper.A fix for #67839 is one of direct follow ups to #79078, so it is in my queue and pretty close to the top.
petrochenkov commentedon Feb 13, 2021
Copypasting a future test for the ui test suite:
petrochenkov commentedon Feb 22, 2021
Fixed in #82419.
Rollup merge of rust-lang#82419 - petrochenkov:inertord, r=Aaron1011
Rollup merge of rust-lang#82419 - petrochenkov:inertord, r=Aaron1011
Rollup merge of rust-lang#82419 - petrochenkov:inertord, r=Aaron1011
Rollup merge of rust-lang#82419 - petrochenkov:inertord, r=Aaron1011
Rollup merge of rust-lang#82419 - petrochenkov:inertord, r=Aaron1011