Skip to content

Commit

Permalink
Revert "Rollup merge of rust-lang#126618 - mu001999-contrib:dead/enha…
Browse files Browse the repository at this point in the history
…nce, r=pnkfelix"

This reverts commit 2724aea, reversing
changes made to d929a42.
  • Loading branch information
compiler-errors committed Jul 31, 2024
1 parent 641ba86 commit e5667ac
Show file tree
Hide file tree
Showing 9 changed files with 36 additions and 75 deletions.
41 changes: 16 additions & 25 deletions compiler/rustc_passes/src/dead.rs
Original file line number Diff line number Diff line change
Expand Up @@ -156,10 +156,7 @@ impl<'tcx> MarkSymbolVisitor<'tcx> {

fn handle_res(&mut self, res: Res) {
match res {
Res::Def(
DefKind::Const | DefKind::AssocConst | DefKind::AssocTy | DefKind::TyAlias,
def_id,
) => {
Res::Def(DefKind::Const | DefKind::AssocConst | DefKind::TyAlias, def_id) => {
self.check_def_id(def_id);
}
_ if self.in_pat => {}
Expand Down Expand Up @@ -470,7 +467,7 @@ impl<'tcx> MarkSymbolVisitor<'tcx> {
intravisit::walk_item(self, item)
}
hir::ItemKind::ForeignMod { .. } => {}
hir::ItemKind::Trait(_, _, _, _, trait_item_refs) => {
hir::ItemKind::Trait(..) => {
for impl_def_id in self.tcx.all_impls(item.owner_id.to_def_id()) {
if let Some(local_def_id) = impl_def_id.as_local()
&& let ItemKind::Impl(impl_ref) =
Expand All @@ -483,12 +480,7 @@ impl<'tcx> MarkSymbolVisitor<'tcx> {
intravisit::walk_path(self, impl_ref.of_trait.unwrap().path);
}
}
// mark assoc ty live if the trait is live
for trait_item in trait_item_refs {
if let hir::AssocItemKind::Type = trait_item.kind {
self.check_def_id(trait_item.id.owner_id.to_def_id());
}
}

intravisit::walk_item(self, item)
}
_ => intravisit::walk_item(self, item),
Expand All @@ -505,8 +497,9 @@ impl<'tcx> MarkSymbolVisitor<'tcx> {
&& let ItemKind::Impl(impl_ref) =
self.tcx.hir().expect_item(local_impl_id).kind
{
if !ty_ref_to_pub_struct(self.tcx, impl_ref.self_ty)
.ty_and_all_fields_are_public
if !matches!(trait_item.kind, hir::TraitItemKind::Type(..))
&& !ty_ref_to_pub_struct(self.tcx, impl_ref.self_ty)
.ty_and_all_fields_are_public
{
// skip impl-items of non pure pub ty,
// cause we don't know the ty is constructed or not,
Expand Down Expand Up @@ -845,8 +838,9 @@ fn check_item<'tcx>(
// for trait impl blocks,
// mark the method live if the self_ty is public,
// or the method is public and may construct self
if tcx.visibility(local_def_id).is_public()
&& (ty_and_all_fields_are_public || may_construct_self)
if of_trait && matches!(tcx.def_kind(local_def_id), DefKind::AssocTy)
|| tcx.visibility(local_def_id).is_public()
&& (ty_and_all_fields_are_public || may_construct_self)
{
// if the impl item is public,
// and the ty may be constructed or can be constructed in foreign crates,
Expand Down Expand Up @@ -883,13 +877,10 @@ fn check_trait_item(
worklist: &mut Vec<(LocalDefId, ComesFromAllowExpect)>,
id: hir::TraitItemId,
) {
use hir::TraitItemKind::{Const, Fn, Type};
if matches!(
tcx.def_kind(id.owner_id),
DefKind::AssocConst | DefKind::AssocTy | DefKind::AssocFn
) {
use hir::TraitItemKind::{Const, Fn};
if matches!(tcx.def_kind(id.owner_id), DefKind::AssocConst | DefKind::AssocFn) {
let trait_item = tcx.hir().trait_item(id);
if matches!(trait_item.kind, Const(_, Some(_)) | Type(_, Some(_)) | Fn(..))
if matches!(trait_item.kind, Const(_, Some(_)) | Fn(..))
&& let Some(comes_from_allow) =
has_allow_dead_code_or_lang_attr(tcx, trait_item.owner_id.def_id)
{
Expand Down Expand Up @@ -931,7 +922,7 @@ fn create_and_seed_worklist(
// checks impls, impl-items and pub structs with all public fields later
match tcx.def_kind(id) {
DefKind::Impl { .. } => false,
DefKind::AssocConst | DefKind::AssocTy | DefKind::AssocFn => !matches!(tcx.associated_item(id).container, AssocItemContainer::ImplContainer),
DefKind::AssocConst | DefKind::AssocFn => !matches!(tcx.associated_item(id).container, AssocItemContainer::ImplContainer),
DefKind::Struct => struct_all_fields_are_public(tcx, id.to_def_id()) || has_allow_dead_code_or_lang_attr(tcx, id).is_some(),
_ => true
})
Expand Down Expand Up @@ -1218,7 +1209,6 @@ impl<'tcx> DeadVisitor<'tcx> {
}
match self.tcx.def_kind(def_id) {
DefKind::AssocConst
| DefKind::AssocTy
| DefKind::AssocFn
| DefKind::Fn
| DefKind::Static { .. }
Expand Down Expand Up @@ -1260,14 +1250,15 @@ fn check_mod_deathness(tcx: TyCtxt<'_>, module: LocalModDefId) {
|| (def_kind == DefKind::Trait && live_symbols.contains(&item.owner_id.def_id))
{
for &def_id in tcx.associated_item_def_ids(item.owner_id.def_id) {
// We have diagnosed unused assocs in traits
// We have diagnosed unused assoc consts and fns in traits
if matches!(def_kind, DefKind::Impl { of_trait: true })
&& matches!(tcx.def_kind(def_id), DefKind::AssocConst | DefKind::AssocTy | DefKind::AssocFn)
&& matches!(tcx.def_kind(def_id), DefKind::AssocConst | DefKind::AssocFn)
// skip unused public inherent methods,
// cause we have diagnosed unconstructed struct
|| matches!(def_kind, DefKind::Impl { of_trait: false })
&& tcx.visibility(def_id).is_public()
&& ty_ref_to_pub_struct(tcx, tcx.hir().item(item).expect_impl().self_ty).ty_is_public
|| def_kind == DefKind::Trait && tcx.def_kind(def_id) == DefKind::AssocTy
{
continue;
}
Expand Down
1 change: 0 additions & 1 deletion tests/ui/const-generics/cross_crate_complex.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ async fn foo() {
async_in_foo(async_out_foo::<4>().await).await;
}

#[allow(dead_code)]
struct Faz<const N: usize>;

impl<const N: usize> Foo<N> for Faz<N> {}
Expand Down
4 changes: 0 additions & 4 deletions tests/ui/generic-associated-types/missing-bounds.fixed
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

use std::ops::Add;

#[allow(dead_code)]
struct A<B>(B);

impl<B> Add for A<B> where B: Add<Output = B> {
Expand All @@ -13,7 +12,6 @@ impl<B> Add for A<B> where B: Add<Output = B> {
}
}

#[allow(dead_code)]
struct C<B>(B);

impl<B: Add<Output = B>> Add for C<B> {
Expand All @@ -24,7 +22,6 @@ impl<B: Add<Output = B>> Add for C<B> {
}
}

#[allow(dead_code)]
struct D<B>(B);

impl<B: std::ops::Add<Output = B>> Add for D<B> {
Expand All @@ -35,7 +32,6 @@ impl<B: std::ops::Add<Output = B>> Add for D<B> {
}
}

#[allow(dead_code)]
struct E<B>(B);

impl<B: Add<Output = B>> Add for E<B> where B: Add<Output = B> {
Expand Down
4 changes: 0 additions & 4 deletions tests/ui/generic-associated-types/missing-bounds.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

use std::ops::Add;

#[allow(dead_code)]
struct A<B>(B);

impl<B> Add for A<B> where B: Add {
Expand All @@ -13,7 +12,6 @@ impl<B> Add for A<B> where B: Add {
}
}

#[allow(dead_code)]
struct C<B>(B);

impl<B: Add> Add for C<B> {
Expand All @@ -24,7 +22,6 @@ impl<B: Add> Add for C<B> {
}
}

#[allow(dead_code)]
struct D<B>(B);

impl<B> Add for D<B> {
Expand All @@ -35,7 +32,6 @@ impl<B> Add for D<B> {
}
}

#[allow(dead_code)]
struct E<B>(B);

impl<B: Add> Add for E<B> where <B as Add>::Output = B {
Expand Down
18 changes: 9 additions & 9 deletions tests/ui/generic-associated-types/missing-bounds.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error: equality constraints are not yet supported in `where` clauses
--> $DIR/missing-bounds.rs:41:33
--> $DIR/missing-bounds.rs:37:33
|
LL | impl<B: Add> Add for E<B> where <B as Add>::Output = B {
| ^^^^^^^^^^^^^^^^^^^^^^ not supported
Expand All @@ -11,7 +11,7 @@ LL | impl<B: Add> Add for E<B> where B: Add<Output = B> {
| ~~~~~~~~~~~~~~~~~~

error[E0308]: mismatched types
--> $DIR/missing-bounds.rs:12:11
--> $DIR/missing-bounds.rs:11:11
|
LL | impl<B> Add for A<B> where B: Add {
| - expected this type parameter
Expand All @@ -24,14 +24,14 @@ LL | A(self.0 + rhs.0)
= note: expected type parameter `B`
found associated type `<B as Add>::Output`
help: the type constructed contains `<B as Add>::Output` due to the type of the argument passed
--> $DIR/missing-bounds.rs:12:9
--> $DIR/missing-bounds.rs:11:9
|
LL | A(self.0 + rhs.0)
| ^^--------------^
| |
| this argument influences the type of `A`
note: tuple struct defined here
--> $DIR/missing-bounds.rs:6:8
--> $DIR/missing-bounds.rs:5:8
|
LL | struct A<B>(B);
| ^
Expand All @@ -41,7 +41,7 @@ LL | impl<B> Add for A<B> where B: Add<Output = B> {
| ++++++++++++

error[E0308]: mismatched types
--> $DIR/missing-bounds.rs:23:14
--> $DIR/missing-bounds.rs:21:14
|
LL | impl<B: Add> Add for C<B> {
| - expected this type parameter
Expand All @@ -54,7 +54,7 @@ LL | Self(self.0 + rhs.0)
= note: expected type parameter `B`
found associated type `<B as Add>::Output`
note: tuple struct defined here
--> $DIR/missing-bounds.rs:17:8
--> $DIR/missing-bounds.rs:15:8
|
LL | struct C<B>(B);
| ^
Expand All @@ -64,7 +64,7 @@ LL | impl<B: Add<Output = B>> Add for C<B> {
| ++++++++++++

error[E0369]: cannot add `B` to `B`
--> $DIR/missing-bounds.rs:34:21
--> $DIR/missing-bounds.rs:31:21
|
LL | Self(self.0 + rhs.0)
| ------ ^ ----- B
Expand All @@ -77,7 +77,7 @@ LL | impl<B: std::ops::Add<Output = B>> Add for D<B> {
| +++++++++++++++++++++++++++

error[E0308]: mismatched types
--> $DIR/missing-bounds.rs:46:14
--> $DIR/missing-bounds.rs:42:14
|
LL | impl<B: Add> Add for E<B> where <B as Add>::Output = B {
| - expected this type parameter
Expand All @@ -90,7 +90,7 @@ LL | Self(self.0 + rhs.0)
= note: expected type parameter `B`
found associated type `<B as Add>::Output`
note: tuple struct defined here
--> $DIR/missing-bounds.rs:39:8
--> $DIR/missing-bounds.rs:35:8
|
LL | struct E<B>(B);
| ^
Expand Down
11 changes: 0 additions & 11 deletions tests/ui/lint/dead-code/unused-trait-with-assoc-ty.rs

This file was deleted.

20 changes: 0 additions & 20 deletions tests/ui/lint/dead-code/unused-trait-with-assoc-ty.stderr

This file was deleted.

2 changes: 1 addition & 1 deletion tests/ui/pattern/issue-22546.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ impl<T: ::std::fmt::Display> Foo<T> {
}
}

trait Tr {
trait Tr { //~ WARN trait `Tr` is never used
type U;
}

Expand Down
10 changes: 10 additions & 0 deletions tests/ui/pattern/issue-22546.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
warning: trait `Tr` is never used
--> $DIR/issue-22546.rs:18:7
|
LL | trait Tr {
| ^^
|
= note: `#[warn(dead_code)]` on by default

warning: 1 warning emitted

0 comments on commit e5667ac

Please sign in to comment.