Skip to content

[WIP] - moving trivial field reads attr to macros - #160666

Draft
josetorrs wants to merge 2 commits into
rust-lang:mainfrom
josetorrs:move-trivial-reads-to-macros
Draft

[WIP] - moving trivial field reads attr to macros#160666
josetorrs wants to merge 2 commits into
rust-lang:mainfrom
josetorrs:move-trivial-reads-to-macros

Conversation

@josetorrs

Copy link
Copy Markdown
Contributor

part of #160621. also discussion in #t-lang > diagnostics attribute to ignore code for unused_code lints

  • I did not use an LLM to create a change in this PR.
  • I used an LLM to create a change in this PR, and I have explained below how it was used.

r? @mejrs

@rustbot rustbot added A-attributes Area: Attributes (`#[…]`, `#![…]`) S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. labels Aug 7, 2026
Comment on lines +441 to +442
&& let Some(macro_def_id) = impl_item.span.ctxt().outer_expn_data().macro_def_id
&& find_attr!(self.tcx, macro_def_id, RustcTrivialFieldReads)

@josetorrs josetorrs Aug 7, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TBH not really sure about this but my computer has been really slow so wanted to see what CI would do

View changes since the review

@rust-log-analyzer

Copy link
Copy Markdown
Collaborator

The job aarch64-gnu-llvm-21-1 failed! Check out the build log: (web) (plain enhanced) (plain)

Click to see the possible cause of the failure (guessed by this bot)
---- [ui] tests/ui/traits/const-traits/minicore-const-fn-early-bound.rs stdout ----

error: auxiliary build of /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs failed to compile: 
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/aarch64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/aarch64-unknown-linux-gnu/stage2" "--target=aarch64-unknown-linux-gnu" "--check-cfg" "cfg(test,FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--out-dir" "/checkout/obj/build/aarch64-unknown-linux-gnu/test/ui/traits/const-traits/minicore-const-fn-early-bound/auxiliary" "-A" "internal_features" "-A" "incomplete_features" "-A" "unused_parens" "-A" "unused_braces" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/aarch64-unknown-linux-gnu/native/rust-test-helpers" "-Znext-solver" "-Cpanic=abort" "-L" "/checkout/obj/build/aarch64-unknown-linux-gnu/test/ui/traits/const-traits/minicore-const-fn-early-bound/auxiliary"
stdout: none
--- stderr -------------------------------
error: the `rustc_trivial_field_reads` attribute cannot be used on traits
##[error]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:448:3
   |
---

warning: unused variable: `x`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:52:9
   |
LL |     let x = 42_i32 + 43_i32;
   |         ^ help: if this is intentional, prefix it with an underscore: `_x`

warning: unused variable: `x`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:56:9
   |
LL |     let x = 42_i32 + 43_i32;
   |         ^ help: if this is intentional, prefix it with an underscore: `_x`

warning: unused variable: `bytes`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:149:28
   |
LL |     const fn from_ne_bytes(bytes: [u8; size_of::<Self>()]) -> Self {
   |                            ^^^^^ help: if this is intentional, prefix it with an underscore: `_bytes`

warning: unused variable: `other`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:319:18
   |
LL |     fn eq(&self, other: &str) -> bool {
   |                  ^^^^^ help: if this is intentional, prefix it with an underscore: `_other`

warning: unused variable: `value`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:417:18
   |
LL |     const fn new(value: T) -> RefCell<T> {
---
---- [ui] tests/ui/traits/const-traits/minicore-deref-fail.rs stdout ----

error: auxiliary build of /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs failed to compile: 
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/aarch64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/aarch64-unknown-linux-gnu/stage2" "--target=aarch64-unknown-linux-gnu" "--check-cfg" "cfg(test,FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--out-dir" "/checkout/obj/build/aarch64-unknown-linux-gnu/test/ui/traits/const-traits/minicore-deref-fail/auxiliary" "-A" "internal_features" "-A" "incomplete_features" "-A" "unused_parens" "-A" "unused_braces" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/aarch64-unknown-linux-gnu/native/rust-test-helpers" "-Znext-solver" "-Cpanic=abort" "-L" "/checkout/obj/build/aarch64-unknown-linux-gnu/test/ui/traits/const-traits/minicore-deref-fail/auxiliary"
stdout: none
--- stderr -------------------------------
error: the `rustc_trivial_field_reads` attribute cannot be used on traits
##[error]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:448:3
   |
---

warning: unused variable: `x`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:52:9
   |
LL |     let x = 42_i32 + 43_i32;
   |         ^ help: if this is intentional, prefix it with an underscore: `_x`

warning: unused variable: `x`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:56:9
   |
LL |     let x = 42_i32 + 43_i32;
   |         ^ help: if this is intentional, prefix it with an underscore: `_x`

warning: unused variable: `bytes`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:149:28
   |
LL |     const fn from_ne_bytes(bytes: [u8; size_of::<Self>()]) -> Self {
   |                            ^^^^^ help: if this is intentional, prefix it with an underscore: `_bytes`

warning: unused variable: `other`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:319:18
   |
LL |     fn eq(&self, other: &str) -> bool {
   |                  ^^^^^ help: if this is intentional, prefix it with an underscore: `_other`

warning: unused variable: `value`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:417:18
   |
LL |     const fn new(value: T) -> RefCell<T> {
---
---- [ui] tests/ui/traits/const-traits/minicore-drop-fail.rs stdout ----

error: auxiliary build of /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs failed to compile: 
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/aarch64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/aarch64-unknown-linux-gnu/stage2" "--target=aarch64-unknown-linux-gnu" "--check-cfg" "cfg(test,FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--out-dir" "/checkout/obj/build/aarch64-unknown-linux-gnu/test/ui/traits/const-traits/minicore-drop-fail/auxiliary" "-A" "internal_features" "-A" "incomplete_features" "-A" "unused_parens" "-A" "unused_braces" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/aarch64-unknown-linux-gnu/native/rust-test-helpers" "-Znext-solver" "-Cpanic=abort" "-L" "/checkout/obj/build/aarch64-unknown-linux-gnu/test/ui/traits/const-traits/minicore-drop-fail/auxiliary"
stdout: none
--- stderr -------------------------------
error: the `rustc_trivial_field_reads` attribute cannot be used on traits
##[error]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:448:3
   |
---

warning: unused variable: `x`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:52:9
   |
LL |     let x = 42_i32 + 43_i32;
   |         ^ help: if this is intentional, prefix it with an underscore: `_x`

warning: unused variable: `x`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:56:9
   |
LL |     let x = 42_i32 + 43_i32;
   |         ^ help: if this is intentional, prefix it with an underscore: `_x`

warning: unused variable: `bytes`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:149:28
   |
LL |     const fn from_ne_bytes(bytes: [u8; size_of::<Self>()]) -> Self {
   |                            ^^^^^ help: if this is intentional, prefix it with an underscore: `_bytes`

warning: unused variable: `other`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:319:18
   |
LL |     fn eq(&self, other: &str) -> bool {
   |                  ^^^^^ help: if this is intentional, prefix it with an underscore: `_other`

warning: unused variable: `value`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:417:18
   |
LL |     const fn new(value: T) -> RefCell<T> {
---
---- [ui] tests/ui/traits/const-traits/minicore-drop-without-feature-gate.rs#no stdout ----

error in revision `no`: auxiliary build of /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs failed to compile: 
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/aarch64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/aarch64-unknown-linux-gnu/stage2" "--target=aarch64-unknown-linux-gnu" "--cfg" "no" "--check-cfg" "cfg(test,FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--out-dir" "/checkout/obj/build/aarch64-unknown-linux-gnu/test/ui/traits/const-traits/minicore-drop-without-feature-gate.no/auxiliary" "-A" "internal_features" "-A" "incomplete_features" "-A" "unused_parens" "-A" "unused_braces" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/aarch64-unknown-linux-gnu/native/rust-test-helpers" "-Znext-solver" "-Cpanic=abort" "-L" "/checkout/obj/build/aarch64-unknown-linux-gnu/test/ui/traits/const-traits/minicore-drop-without-feature-gate.no/auxiliary"
stdout: none
--- stderr -------------------------------
error: the `rustc_trivial_field_reads` attribute cannot be used on traits
##[error]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:448:3
   |
---

warning: unused variable: `x`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:52:9
   |
LL |     let x = 42_i32 + 43_i32;
   |         ^ help: if this is intentional, prefix it with an underscore: `_x`

warning: unused variable: `x`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:56:9
   |
LL |     let x = 42_i32 + 43_i32;
   |         ^ help: if this is intentional, prefix it with an underscore: `_x`

warning: unused variable: `bytes`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:149:28
   |
LL |     const fn from_ne_bytes(bytes: [u8; size_of::<Self>()]) -> Self {
   |                            ^^^^^ help: if this is intentional, prefix it with an underscore: `_bytes`

warning: unused variable: `other`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:319:18
   |
LL |     fn eq(&self, other: &str) -> bool {
   |                  ^^^^^ help: if this is intentional, prefix it with an underscore: `_other`

warning: unused variable: `value`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:417:18
   |
LL |     const fn new(value: T) -> RefCell<T> {
---
---- [ui] tests/ui/traits/const-traits/minicore-fn-fail.rs stdout ----

error: auxiliary build of /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs failed to compile: 
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/aarch64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/aarch64-unknown-linux-gnu/stage2" "--target=aarch64-unknown-linux-gnu" "--check-cfg" "cfg(test,FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--out-dir" "/checkout/obj/build/aarch64-unknown-linux-gnu/test/ui/traits/const-traits/minicore-fn-fail/auxiliary" "-A" "internal_features" "-A" "incomplete_features" "-A" "unused_parens" "-A" "unused_braces" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/aarch64-unknown-linux-gnu/native/rust-test-helpers" "-Znext-solver" "-Cpanic=abort" "-L" "/checkout/obj/build/aarch64-unknown-linux-gnu/test/ui/traits/const-traits/minicore-fn-fail/auxiliary"
stdout: none
--- stderr -------------------------------
error: the `rustc_trivial_field_reads` attribute cannot be used on traits
##[error]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:448:3
   |
---

warning: unused variable: `x`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:52:9
   |
LL |     let x = 42_i32 + 43_i32;
   |         ^ help: if this is intentional, prefix it with an underscore: `_x`

warning: unused variable: `x`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:56:9
   |
LL |     let x = 42_i32 + 43_i32;
   |         ^ help: if this is intentional, prefix it with an underscore: `_x`

warning: unused variable: `bytes`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:149:28
   |
LL |     const fn from_ne_bytes(bytes: [u8; size_of::<Self>()]) -> Self {
   |                            ^^^^^ help: if this is intentional, prefix it with an underscore: `_bytes`

warning: unused variable: `other`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:319:18
   |
LL |     fn eq(&self, other: &str) -> bool {
   |                  ^^^^^ help: if this is intentional, prefix it with an underscore: `_other`

warning: unused variable: `value`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:417:18
   |
LL |     const fn new(value: T) -> RefCell<T> {
---

---- [ui] tests/ui/traits/const-traits/minicore-fn-fail.rs stdout end ----
---- [ui] tests/ui/traits/const-traits/minicore-drop-without-feature-gate.rs#yes stdout ----

error in revision `yes`: auxiliary build of /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs failed to compile: 
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/aarch64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/aarch64-unknown-linux-gnu/stage2" "--target=aarch64-unknown-linux-gnu" "--cfg" "yes" "--check-cfg" "cfg(test,FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--out-dir" "/checkout/obj/build/aarch64-unknown-linux-gnu/test/ui/traits/const-traits/minicore-drop-without-feature-gate.yes/auxiliary" "-A" "internal_features" "-A" "incomplete_features" "-A" "unused_parens" "-A" "unused_braces" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/aarch64-unknown-linux-gnu/native/rust-test-helpers" "-Znext-solver" "-Cpanic=abort" "-L" "/checkout/obj/build/aarch64-unknown-linux-gnu/test/ui/traits/const-traits/minicore-drop-without-feature-gate.yes/auxiliary"
stdout: none
--- stderr -------------------------------
error: the `rustc_trivial_field_reads` attribute cannot be used on traits
##[error]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:448:3
   |
---

warning: unused variable: `x`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:52:9
   |
LL |     let x = 42_i32 + 43_i32;
   |         ^ help: if this is intentional, prefix it with an underscore: `_x`

warning: unused variable: `x`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:56:9
   |
LL |     let x = 42_i32 + 43_i32;
   |         ^ help: if this is intentional, prefix it with an underscore: `_x`

warning: unused variable: `bytes`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:149:28
   |
LL |     const fn from_ne_bytes(bytes: [u8; size_of::<Self>()]) -> Self {
   |                            ^^^^^ help: if this is intentional, prefix it with an underscore: `_bytes`

warning: unused variable: `other`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:319:18
   |
LL |     fn eq(&self, other: &str) -> bool {
   |                  ^^^^^ help: if this is intentional, prefix it with an underscore: `_other`

warning: unused variable: `value`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:417:18
   |
LL |     const fn new(value: T) -> RefCell<T> {
---
---- [ui] tests/ui/traits/const-traits/minicore-works.rs stdout ----

error: auxiliary build of /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs failed to compile: 
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/aarch64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/aarch64-unknown-linux-gnu/stage2" "--target=aarch64-unknown-linux-gnu" "--check-cfg" "cfg(test,FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--out-dir" "/checkout/obj/build/aarch64-unknown-linux-gnu/test/ui/traits/const-traits/minicore-works/auxiliary" "-A" "internal_features" "-A" "incomplete_features" "-A" "unused_parens" "-A" "unused_braces" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/aarch64-unknown-linux-gnu/native/rust-test-helpers" "-Znext-solver" "-Cpanic=abort" "-L" "/checkout/obj/build/aarch64-unknown-linux-gnu/test/ui/traits/const-traits/minicore-works/auxiliary"
stdout: none
--- stderr -------------------------------
error: the `rustc_trivial_field_reads` attribute cannot be used on traits
##[error]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:448:3
   |
---

warning: unused variable: `x`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:52:9
   |
LL |     let x = 42_i32 + 43_i32;
   |         ^ help: if this is intentional, prefix it with an underscore: `_x`

warning: unused variable: `x`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:56:9
   |
LL |     let x = 42_i32 + 43_i32;
   |         ^ help: if this is intentional, prefix it with an underscore: `_x`

warning: unused variable: `bytes`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:149:28
   |
LL |     const fn from_ne_bytes(bytes: [u8; size_of::<Self>()]) -> Self {
   |                            ^^^^^ help: if this is intentional, prefix it with an underscore: `_bytes`

warning: unused variable: `other`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:319:18
   |
LL |     fn eq(&self, other: &str) -> bool {
   |                  ^^^^^ help: if this is intentional, prefix it with an underscore: `_other`

warning: unused variable: `value`
##[warning]  --> /checkout/tests/ui/traits/const-traits/auxiliary/minicore.rs:417:18
   |
LL |     const fn new(value: T) -> RefCell<T> {

@mejrs

mejrs commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

The changes look correct so far, you just need to delete the #[rustc_trivial_field_reads] in the minicore.rs file.

@mejrs

mejrs commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Let's see whether this affects perf so far.

@bors try @rust-timer queue

@rust-timer

This comment has been minimized.

@rustbot rustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Aug 8, 2026
@rust-bors

This comment has been minimized.

rust-bors Bot pushed a commit that referenced this pull request Aug 8, 2026
[WIP] - moving trivial field reads attr to macros
@rust-bors

rust-bors Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

☀️ Try build successful (CI)
Build commit: af61126 (af61126db7562afad7eb31247e4ba2d8968c4766)
Base parent: 8b798d4 (8b798d41cc5d215ef8d5424f61b6dc2575ac738b)

@rust-timer

This comment has been minimized.

@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (af61126): comparison URL.

Overall result: ❌✅ regressions and improvements - please read:

Benchmarking means the PR may be perf-sensitive. It's automatically marked not fit for rolling up. Overriding is possible but disadvised: it risks changing compiler perf.

Next, please: If you can, justify the regressions found in this try perf run in writing along with @rustbot label: +perf-regression-triaged. If not, fix the regressions and do another perf run. Neutral or positive results will clear the label automatically.

@bors rollup=never rustc-perf
@rustbot label: -S-waiting-on-perf +perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
0.3% [0.2%, 0.4%] 9
Improvements ✅
(primary)
-0.3% [-0.4%, -0.1%] 2
Improvements ✅
(secondary)
-0.6% [-0.6%, -0.6%] 1
All ❌✅ (primary) -0.3% [-0.4%, -0.1%] 2

Max RSS (memory usage)

Results (primary 2.1%, secondary 0.7%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
2.1% [2.1%, 2.1%] 1
Regressions ❌
(secondary)
1.6% [0.4%, 8.3%] 8
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-0.7% [-1.4%, -0.4%] 5
All ❌✅ (primary) 2.1% [2.1%, 2.1%] 1

Cycles

Results (secondary 0.1%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
0.7% [0.5%, 1.1%] 12
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-0.9% [-2.3%, -0.5%] 7
All ❌✅ (primary) - - 0

Binary size

Results (primary 0.1%, secondary 0.1%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
0.1% [0.0%, 0.1%] 40
Regressions ❌
(secondary)
0.1% [0.0%, 0.1%] 23
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) 0.1% [0.0%, 0.1%] 40

Bootstrap: 459.298s -> 462.975s (0.80%)
Artifact size: 398.58 MiB -> 399.35 MiB (0.19%)

@rustbot rustbot added perf-regression Performance regression. and removed S-waiting-on-perf Status: Waiting on a perf run to be completed. labels Aug 8, 2026
@mejrs

mejrs commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Hmm that's not going to get better if we extend this to more places than implitems. Also, I've been thinking and I don't think this is the right approach.

I've been looking at the prior history of this (much discussion in #85200) and the derive expansion of tracing macros, and I think it makes most sense to implement it as suggested in #85200 (comment). Then you can also put it on manually written Debug impls for example and macros can more easily use it in a more granular way.

Meaning, this attribute shouldn't go on the macro (or the trait); the macro should put the attribute on the items it emits. To do that you'd have to

  • adjust what the attribute is allowed on
  • change the implementations (located in rustc_expand) of Debug/Clone to emit the attribute
  • change the macro shims in the standard library to allow the use of this attribute inside them, with #[allow_internal_unstable]
  • adjust the dead code pass to check for the presence of the attribute on more items

What do you think?

@josetorrs

josetorrs commented Aug 10, 2026

Copy link
Copy Markdown
Contributor Author

Yeah I was looking at that PR Friday night while exploring the changes for this. Also while looking the linked issues, do you think that would alleviate some of the concerns in #88900?

What do you think?

I'm using this issue as a learning experience for something a little more involved and very much appreciate your pointers but I may be the wrong person to bounce ideas off of 😅

@mejrs

mejrs commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Also while looking the linked issues, do you think that would alleviate some of the concerns in #88900?

The changes in this PR shouldn't be user visible, so it shouldn't change anything in that respect.

That said we get issues like that with every noticeable addition of lints, I wouldn't worry about it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-attributes Area: Attributes (`#[…]`, `#![…]`) perf-regression Performance regression. S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants