Revert PR 81473 to resolve (on beta) issues 81626 and 81658.

Revert "Add missing brace"

This reverts commit 85ad773049.

Revert "Simplify base_expr"

This reverts commit 899aae465e.

Revert "Warn write-only fields"

This reverts commit d3c69a4c0d.
This commit is contained in:
Felix S. Klock II 2021-03-15 16:39:41 -04:00 committed by Mark Rousskov
parent cadf901b1d
commit 381f1318ad
4 changed files with 0 additions and 135 deletions

View File

@ -133,22 +133,6 @@ impl<'tcx> MarkSymbolVisitor<'tcx> {
}
}
fn handle_assign(&mut self, expr: &'tcx hir::Expr<'tcx>) {
if self
.typeck_results()
.expr_adjustments(expr)
.iter()
.any(|adj| matches!(adj.kind, ty::adjustment::Adjust::Deref(_)))
{
self.visit_expr(expr);
} else if let hir::ExprKind::Field(base, ..) = expr.kind {
// Ignore write to field
self.handle_assign(base);
} else {
self.visit_expr(expr);
}
}
fn handle_field_pattern_match(
&mut self,
lhs: &hir::Pat<'_>,
@ -277,11 +261,6 @@ impl<'tcx> Visitor<'tcx> for MarkSymbolVisitor<'tcx> {
hir::ExprKind::MethodCall(..) => {
self.lookup_and_handle_method(expr.hir_id);
}
hir::ExprKind::Assign(ref left, ref right, ..) => {
self.handle_assign(left);
self.visit_expr(right);
return;
}
hir::ExprKind::Field(ref lhs, ..) => {
self.handle_field_access(&lhs, expr.hir_id);
}

View File

@ -1,6 +1,5 @@
// run-pass
// pretty-expanded FIXME #23616
#![allow(dead_code)]
pub fn main() {
struct A {

View File

@ -1,69 +0,0 @@
#![deny(dead_code)]
struct S {
f: i32, //~ ERROR: field is never read
sub: Sub, //~ ERROR: field is never read
}
struct Sub {
f: i32, //~ ERROR: field is never read
}
fn field_write(s: &mut S) {
s.f = 1;
s.sub.f = 2;
}
fn main() {
let mut s = S { f: 0, sub: Sub { f: 0 } };
field_write(&mut s);
auto_deref();
nested_boxes();
}
fn auto_deref() {
struct E {
x: bool,
y: bool, //~ ERROR: field is never read
}
struct P<'a> {
e: &'a mut E
}
impl P<'_> {
fn f(&mut self) {
self.e.x = true;
self.e.y = true;
}
}
let mut e = E { x: false, y: false };
let mut p = P { e: &mut e };
p.f();
assert!(e.x);
}
fn nested_boxes() {
struct A {
b: Box<B>,
}
struct B {
c: Box<C>,
}
struct C {
u: u32, //~ ERROR: field is never read
v: u32, //~ ERROR: field is never read
}
let mut a = A {
b: Box::new(B {
c: Box::new(C { u: 0, v: 0 }),
}),
};
a.b.c.v = 10;
a.b.c = Box::new(C { u: 1, v: 2 });
}

View File

@ -1,44 +0,0 @@
error: field is never read: `f`
--> $DIR/write-only-field.rs:4:5
|
LL | f: i32,
| ^^^^^^
|
note: the lint level is defined here
--> $DIR/write-only-field.rs:1:9
|
LL | #![deny(dead_code)]
| ^^^^^^^^^
error: field is never read: `sub`
--> $DIR/write-only-field.rs:5:5
|
LL | sub: Sub,
| ^^^^^^^^
error: field is never read: `f`
--> $DIR/write-only-field.rs:9:5
|
LL | f: i32,
| ^^^^^^
error: field is never read: `y`
--> $DIR/write-only-field.rs:28:9
|
LL | y: bool,
| ^^^^^^^
error: field is never read: `u`
--> $DIR/write-only-field.rs:58:9
|
LL | u: u32,
| ^^^^^^
error: field is never read: `v`
--> $DIR/write-only-field.rs:59:9
|
LL | v: u32,
| ^^^^^^
error: aborting due to 6 previous errors