-
Notifications
You must be signed in to change notification settings - Fork 12.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
expand: Preserve order of inert attributes during expansion #82419
Conversation
@bors r+ |
📌 Commit fc9d578 has been approved by |
@@ -1,4 +1,4 @@ | |||
PRINT-ATTR INPUT (DISPLAY): #[allow(dead_code)] #[derive(Print)] #[print_helper(b)] #[print_helper(a)] | |||
PRINT-ATTR INPUT (DISPLAY): #[print_helper(a)] #[allow(dead_code)] #[derive(Print)] #[print_helper(b)] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a subtle detail that I just noticed - since we perform cfg-stripping before invoking custom attributes (e.g. #[my_attr] #[cfg(FALSE)] struct Foo {}
does nothing), we also expand #[cfg_attr]
. So, an attribute macro sees expanded #[cfg_attr]
attributes (e.g. the #[allow(dead_code)]
) at the 'top level' of the attribute target, but not anywhere else. For example, you can see #[cfg_attr(not(FALSE), allow(warnings))]
in the input below.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
since we perform cfg-stripping before invoking custom attributes
This is something I want to change, btw (and make the expansion order fully left-to-right).
It will certainly needs a crater run, but I think we'll be able to do this in practice, similarly to #79078.
expand: Preserve order of inert attributes during expansion Fixes rust-lang#67839 Fixes rust-lang#81871 r? `@Aaron1011`
expand: Preserve order of inert attributes during expansion Fixes rust-lang#67839 Fixes rust-lang#81871 r? ``@Aaron1011``
expand: Preserve order of inert attributes during expansion Fixes rust-lang#67839 Fixes rust-lang#81871 r? ```@Aaron1011```
expand: Preserve order of inert attributes during expansion Fixes rust-lang#67839 Fixes rust-lang#81871 r? ````@Aaron1011````
Rollup of 14 pull requests Successful merges: - rust-lang#81794 (update tracking issue for `relaxed_struct_unsize`) - rust-lang#82057 (Replace const_cstr with cstr crate) - rust-lang#82370 (Improve anonymous lifetime note to indicate the target span) - rust-lang#82394 (:arrow_up: rust-analyzer) - rust-lang#82396 (Add Future trait for doc_spotlight feature doc) - rust-lang#82404 (Test hexagon-enum only when llvm target is present) - rust-lang#82419 (expand: Preserve order of inert attributes during expansion) - rust-lang#82420 (Enable API documentation for `std::os::wasi`.) - rust-lang#82421 (Add a `size()` function to WASI's `MetadataExt`.) - rust-lang#82442 (Skip emitting closure diagnostic when closure_kind_origins has no entry) - rust-lang#82473 (Use libc::accept4 on Android instead of raw syscall.) - rust-lang#82482 (Use small hash set in `mir_inliner_callees`) - rust-lang#82490 (Update cargo) - rust-lang#82494 (Substitute erased lifetimes on bad placeholder type) Failed merges: - rust-lang#82448 (Combine HasAttrs and HasTokens into AstLike) r? `@ghost` `@rustbot` modify labels: rollup
Fixes #67839
Fixes #81871
r? @Aaron1011