Skip to content

Conversation

@long-long-float
Copy link
Contributor

@long-long-float long-long-float commented Apr 28, 2024

Close #123068

If an ADT implements Debug trait and it is not used, the compiler says a note that indicates intentionally ignored during dead code analysis as this note.
However this node is not shown for variants that have fields in enum. This PR fixes to show the note.

@rustbot
Copy link
Collaborator

rustbot commented Apr 28, 2024

r? @pnkfelix

rustbot has assigned @pnkfelix.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Apr 28, 2024
let encl_def_id = if let Some(enum_did) = self.tcx.opt_parent(encl_def_id.to_def_id())
&& let Some(enum_local_id) = enum_did.as_local()
&& let Node::Item(item) = self.tcx.hir_node_by_def_id(enum_local_id)
&& let ItemKind::Enum(_, _) = item.kind
Copy link
Contributor

Choose a reason for hiding this comment

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

This logic is making me nervous.

If I understand correctly, this is putting in a bit of an ad-hoc workaround, specifically into the dead-code lint pass, to hop up two parents instead of just one parent if the second parent is itself identified to be an enum.

i infer that is because it is trying to follow a line of reasoning like "the second parent will be an enum if and only if the first parent is an enum variant and the original item is a data field attached to that enum variant.

  1. It is not immediately obvious to me that such an "if and only if" actually holds.

  2. Even if it does hold, my second worry is that I imagine this same mistake probably presents itself in a bunch of other places (i.e., places where people assumed that the parent of a data field would be the ADT type that holds that field, but in fact one has to go up two parent-hops instead of one in cases like this), and I wonder if we would be better off using an API that let one express that intention directly, rather than putting logic like this everywhere it needs to go...

Copy link
Contributor

Choose a reason for hiding this comment

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

Even if it does hold, my second worry is that I imagine this same mistake probably presents itself in a bunch of other places

I've seen issues around the Enum/Variant/CTor trichotomy, where the DefId of the item is expected for some analysis but you get passed one of the other two, so I'm sure there are more lurking around.

Could you let us know what the contents of parent_item (what it points to, really) and of first_item are?

Copy link
Contributor

Choose a reason for hiding this comment

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

I talked to @estebank independently.

While I do think better API's might exist, I don't think I want to block this PR on hypothetical API improvements.

What I do want from this PR is for it to change the code slightly to include a few more, potentially redundant, safe-guards where you have the code check, as it does its double hop, that each item kind it encounters is the one you expect (e.g. taken from Enum/Variant/Ctor as appropriate.)

@rustbot author

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thank you for comment and sorry for the late reply.

I'd like to confirm my understanding. We need to check encl_def_id is a just Variant (or other kind?) because other item such as Ctor also has Enum parent.

Copy link
Contributor

Choose a reason for hiding this comment

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

yes that is what we're asking for.

@rustbot rustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels May 2, 2024
@long-long-float
Copy link
Contributor Author

@pnkfelix
I want to confirm my understanding. Do we need to check encl_def_id is a just Variant (or other kind?) because other item such as Ctor also has Enum parent? If so, I can do it immediately.

@long-long-float
Copy link
Contributor Author

@rustbot ready

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels May 31, 2024
@pnkfelix
Copy link
Contributor

pnkfelix commented Jun 5, 2024

I want to confirm my understanding. Do we need to check encl_def_id is a just Variant (or other kind?) because other item such as Ctor also has Enum parent? If so, I can do it immediately.

Yes, I think this is the sort of (redundant!) double-checking that I was asking for. Its just safe-guarding against future-changes in the representation causing the assumptions in this code to become invalidated.

@pnkfelix
Copy link
Contributor

pnkfelix commented Jun 5, 2024

@rustbot author

(as far as I can tell, the author was waiting for confirmation of what next step to take before they actually took that step. See #124460 (comment) )

@rustbot rustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jun 5, 2024
@long-long-float long-long-float force-pushed the show-notice-about-enum-with-debug branch from 4bd1a5e to d630f5d Compare June 16, 2024 09:36
@long-long-float
Copy link
Contributor Author

@pnkfelix Thank you. I added a checking as let Node::Variant(_) = tcx.hir_node_by_def_id(may_variant).

@long-long-float
Copy link
Contributor Author

@rustbot ready

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Jun 17, 2024
@pnkfelix
Copy link
Contributor

@bors r+ rollup

@bors
Copy link
Collaborator

bors commented Jun 24, 2024

📌 Commit d630f5d has been approved by pnkfelix

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jun 24, 2024
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Jun 24, 2024
…enum-with-debug, r=pnkfelix Show notice about "never used" of Debug for enum Close rust-lang#123068 If an ADT implements `Debug` trait and it is not used, the compiler says a note that indicates intentionally ignored during dead code analysis as [this note](https://github.com/rust-lang/rust/blob/2207179a591f5f252885a94ab014dafeb6e8e9e8/tests/ui/lint/dead-code/unused-variant.stderr#L9). However this node is not shown for variants that have fields in enum. This PR fixes to show the note.
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Jun 24, 2024
…enum-with-debug, r=pnkfelix Show notice about "never used" of Debug for enum Close rust-lang#123068 If an ADT implements `Debug` trait and it is not used, the compiler says a note that indicates intentionally ignored during dead code analysis as [this note](https://github.com/rust-lang/rust/blob/2207179a591f5f252885a94ab014dafeb6e8e9e8/tests/ui/lint/dead-code/unused-variant.stderr#L9). However this node is not shown for variants that have fields in enum. This PR fixes to show the note.
bors added a commit to rust-lang-ci/rust that referenced this pull request Jun 24, 2024
…iaskrgr Rollup of 10 pull requests Successful merges: - rust-lang#124460 (Show notice about "never used" of Debug for enum) - rust-lang#125740 (transmute size check: properly account for alignment) - rust-lang#126413 (compiletest: make the crash test error message abit more informative) - rust-lang#126618 (Mark assoc tys live only if the corresponding trait is live) - rust-lang#126673 (Ensure we don't accidentally succeed when we want to report an error) - rust-lang#126804 (On short error format, append primary span label to message) - rust-lang#126868 (not use offset when there is not ends with brace) - rust-lang#126893 (Eliminate the distinction between PREC_POSTFIX and PREC_PAREN precedence level) - rust-lang#126899 (Suggest inline const blocks for array initialization) - rust-lang#126909 (add `@kobzol` to bootstrap team for triagebot) r? `@ghost` `@rustbot` modify labels: rollup
bors added a commit to rust-lang-ci/rust that referenced this pull request Jun 24, 2024
…mpiler-errors Rollup of 11 pull requests Successful merges: - rust-lang#124460 (Show notice about "never used" of Debug for enum) - rust-lang#124712 (Deprecate no-op codegen option `-Cinline-threshold=...`) - rust-lang#125082 (Remove `MaybeUninit::uninit_array()` and replace it with inline const blocks.) - rust-lang#125575 (SmartPointer derive-macro) - rust-lang#126413 (compiletest: make the crash test error message abit more informative) - rust-lang#126673 (Ensure we don't accidentally succeed when we want to report an error) - rust-lang#126682 (coverage: Overhaul validation of the `#[coverage(..)]` attribute) - rust-lang#126899 (Suggest inline const blocks for array initialization) - rust-lang#126904 (Small fixme in core now that NonZero is generic) - rust-lang#126909 (add `@kobzol` to bootstrap team for triagebot) - rust-lang#126911 (Split the lifetimes of `MirBorrowckCtxt`) r? `@ghost` `@rustbot` modify labels: rollup
@bors bors merged commit 00e5f58 into rust-lang:master Jun 24, 2024
@rustbot rustbot added this to the 1.81.0 milestone Jun 24, 2024
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request Jun 24, 2024
Rollup merge of rust-lang#124460 - long-long-float:show-notice-about-enum-with-debug, r=pnkfelix Show notice about "never used" of Debug for enum Close rust-lang#123068 If an ADT implements `Debug` trait and it is not used, the compiler says a note that indicates intentionally ignored during dead code analysis as [this note](https://github.com/rust-lang/rust/blob/2207179a591f5f252885a94ab014dafeb6e8e9e8/tests/ui/lint/dead-code/unused-variant.stderr#L9). However this node is not shown for variants that have fields in enum. This PR fixes to show the note.
jaisnan pushed a commit to jaisnan/rust-dev that referenced this pull request Jul 29, 2024
Update Rust toolchain from nightly-2024-06-24 to nightly-2024-06-25 without any other source changes. This is an automatically generated pull request. If any of the CI checks fail, manual intervention is required. In such a case, review the changes at https://github.com/rust-lang/rust from rust-lang@bcf94de up to rust-lang@6b0f4b5. The log for this commit range is: rust-lang@6b0f4b5ec3 Auto merge of rust-lang#126914 - compiler-errors:rollup-zx0hchm, r=compiler-errors rust-lang@16bd6e25e1 Rollup merge of rust-lang#126911 - oli-obk:do_not_count_errors, r=compiler-errors rust-lang@59c258f51f Rollup merge of rust-lang#126909 - onur-ozkan:add-kobzol, r=matthiaskrgr rust-lang@85eb835a14 Rollup merge of rust-lang#126904 - GrigorenkoPV:nonzero-fixme, r=joboet rust-lang@a7721a0373 Rollup merge of rust-lang#126899 - GrigorenkoPV:suggest-const-block, r=davidtwco rust-lang@9ce2a070b3 Rollup merge of rust-lang#126682 - Zalathar:coverage-attr, r=lcnr rust-lang@49bdf460a2 Rollup merge of rust-lang#126673 - oli-obk:dont_rely_on_err_reporting, r=compiler-errors rust-lang@46e43984d1 Rollup merge of rust-lang#126413 - matthiaskrgr:crshmsg, r=oli-obk rust-lang@ed460d2eaa Rollup merge of rust-lang#125575 - dingxiangfei2009:derive-smart-ptr, r=davidtwco rust-lang@c77dc28f87 Rollup merge of rust-lang#125082 - kpreid:const-uninit, r=dtolnay rust-lang@faa28be2f1 Rollup merge of rust-lang#124712 - Enselic:deprecate-inline-threshold, r=pnkfelix rust-lang@00e5f5886a Rollup merge of rust-lang#124460 - long-long-float:show-notice-about-enum-with-debug, r=pnkfelix rust-lang@d8d5732456 Auto merge of rust-lang#126784 - scottmcm:smaller-terminator, r=compiler-errors rust-lang@13fca73f49 Replace `MaybeUninit::uninit_array()` with array repeat expression. rust-lang@5a3e2a4e92 Auto merge of rust-lang#126523 - joboet:the_great_big_tls_refactor, r=Mark-Simulacrum rust-lang@45261ff2ec add @Kobzol to bootstrap team for triagebot rust-lang@84474a25a4 Small fixme in core now that NonZero is generic rust-lang@50a02ed789 std: fix wasm builds rust-lang@8fc6b3de19 Separate the mir body lifetime from the other lifetimes rust-lang@1c4d0ced58 Separate the lifetimes of the `BorrowckInferCtxt` from the other borrowed items rust-lang@d371d17496 Auto merge of rust-lang#126900 - matthiaskrgr:rollup-24ah97b, r=matthiaskrgr rust-lang@8ffb5f936a compiletest: make the crash test error message abit more informative rust-lang@a80ee9159b Rollup merge of rust-lang#126882 - estebank:multiline-order, r=WaffleLapkin rust-lang@8bfde609e2 Rollup merge of rust-lang#126414 - ChrisDenton:target-known, r=Nilstrieb rust-lang@94b9ea417d Rollup merge of rust-lang#126213 - zachs18:atomicbool-u8-i8-from-ptr-alignment, r=Nilstrieb rust-lang@9d24ecc37b Rollup merge of rust-lang#125241 - Veykril:tool-rust-analyzer, r=davidtwco rust-lang@ba5ec1fc5c Suggest inline const blocks for array initialization rust-lang@06c072f158 Auto merge of rust-lang#126788 - GuillaumeGomez:migrate-rustdoc-tests-syntax, r=fmease,oli-obk rust-lang@1852141219 coverage: Bless coverage attribute tests rust-lang@b7c057c9b2 coverage: Always error on `#[coverage(..)]` in unexpected places rust-lang@a000fa8b54 coverage: Tighten validation of `#[coverage(off)]` and `#[coverage(on)]` rust-lang@b5dfeba0e1 coverage: Forbid multiple `#[coverage(..)]` attributes rust-lang@6909feab8e Allow numbers in rustdoc tests commands rust-lang@4e258bb4c3 Fix tidy issue for rustdoc tests commands rust-lang@51fedf65ff Remove commands duplication between `compiletest` and `tests/rustdoc` rust-lang@1b67035579 Update `tests/rustdoc` to new test syntax rust-lang@d3ec92e16e Move `tests/rustdoc` testsuite to `//@` syntax rust-lang@2c243d9570 Auto merge of rust-lang#126891 - matthiaskrgr:rollup-p6dl1gk, r=matthiaskrgr rust-lang@b94d2754b5 Rollup merge of rust-lang#126888 - compiler-errors:oops-debug-printing, r=dtolnay rust-lang@9892b3e9fe Rollup merge of rust-lang#126854 - devnexen:std_unix_os_fallback_upd, r=Mark-Simulacrum rust-lang@3108dfaced Rollup merge of rust-lang#126849 - workingjubilee:correctly-classify-arm-low-dregs, r=Amanieu rust-lang@dcace866f0 Rollup merge of rust-lang#126845 - rust-lang:cargo_update, r=Mark-Simulacrum rust-lang@21850f5bd8 Rollup merge of rust-lang#126807 - devnexen:copy_file_macos_simpl, r=Mark-Simulacrum rust-lang@b24e3df0df Rollup merge of rust-lang#126754 - compiler-errors:use-rustfmt, r=calebcartwright rust-lang@ad0531ae0d Rollup merge of rust-lang#126455 - surechen:fix_126222, r=estebank rust-lang@7babf99ea9 Rollup merge of rust-lang#126298 - heiher:loongarch64-musl-ci, r=Mark-Simulacrum rust-lang@9a591ea1ce Rollup merge of rust-lang#126177 - carbotaniuman:unsafe_attr_errors, r=jieyouxu rust-lang@25446c25fc Remove stray println from rustfmt rust-lang@d49994b060 Auto merge of rust-lang#126023 - amandasystems:you-dropped-this-again, r=nikomatsakis rust-lang@a23917cfd0 Add hard error and migration lint for unsafe attrs rust-lang@284437d434 Special case when a code line only has multiline span starts rust-lang@f1be59fa72 SmartPointer derive-macro rust-lang@a426d6fdf0 Implement use<> formatting in rustfmt rust-lang@16fef40896 Promote loongarch64-unknown-linux-musl to Tier 2 with host tools rust-lang@03d73fa6ba ci: Add support for dist-loongarch64-musl rust-lang@fc50acae90 fix build rust-lang@bd9ce3e074 std::unix::os::home_dir: fallback's optimisation. rust-lang@0d8f734172 compiler: Fix arm32 asm issues by hierarchically sorting reg classes rust-lang@e8b5ba1111 For [E0308]: mismatched types, when expr is in an arm's body, not add semicolon ';' at the end of it. rust-lang@990535723d cargo update rust-lang@b28efb11af Save 2 pointers in `TerminatorKind` (96 → 80 bytes) rust-lang@65530ba100 std::unix::fs: copy simplification for apple. rust-lang@339015920d Add `rust_analyzer` as a predefined tool rust-lang@3f2f8438b4 Ensure we don't accidentally succeed when we want to report an error rust-lang@32f9b8bf76 std: rename module for clarity rust-lang@35f050b8da std: update TLS module documentation rust-lang@b2f29edc81 std: use the `c_int` from `core::ffi` instead of `libc` rust-lang@d70f071392 std: simplify `#[cfg]`s for TLS rust-lang@d630f5da7a Show notice about "never used" for enum rust-lang@f3facf1175 std: refactor the TLS implementation rust-lang@f5f067bf9d Deprecate no-op codegen option `-Cinline-threshold=...` rust-lang@651ff643ae Fix typo in `-Cno-stack-check` deprecation warning rust-lang@3af624272a rustc_codegen_ssa: Remove unused ModuleConfig::inline_threshold rust-lang@34e6ea1446 Tier 2 std support must always be known rust-lang@2d4cb7aa5a Update docs for AtomicU8/I8. rust-lang@7885c7b7b2 Update safety docs for AtomicBool::from_ptr. rust-lang@7b5b7a7010 Remove confusing `use_polonius` flag and do less cloning Co-authored-by: tautschnig <1144736+tautschnig@users.noreply.github.com>
compiler-errors added a commit to compiler-errors/rust that referenced this pull request Jul 30, 2024
…e-about-enum-with-debug, r=pnkfelix" This reverts commit 00e5f58, reversing changes made to 5a3e2a4.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

5 participants