about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMaybe Waffle <waffle.lapkin@gmail.com>2022-07-31 19:12:53 +0400
committerMaybe Waffle <waffle.lapkin@gmail.com>2022-07-31 19:12:53 +0400
commit1c2ea78f29f6c24d210728ccee177d13d235a9df (patch)
treedd9d4511c3da307d0541bcb70423061b342b382a
parent5e39b35a2f02675d3dce488da1829c3abb21da07 (diff)
downloadrust-1c2ea78f29f6c24d210728ccee177d13d235a9df.tar.gz
rust-1c2ea78f29f6c24d210728ccee177d13d235a9df.zip
Skip unstable fields when suggesting wrapping expression in structs
-rw-r--r--compiler/rustc_typeck/src/check/demand.rs5
1 files changed, 4 insertions, 1 deletions
diff --git a/compiler/rustc_typeck/src/check/demand.rs b/compiler/rustc_typeck/src/check/demand.rs
index 8ed0faddf9e..f0110645551 100644
--- a/compiler/rustc_typeck/src/check/demand.rs
+++ b/compiler/rustc_typeck/src/check/demand.rs
@@ -1,5 +1,6 @@
 use crate::check::FnCtxt;
 use rustc_infer::infer::InferOk;
+use rustc_middle::middle::stability::EvalResult;
 use rustc_trait_selection::infer::InferCtxtExt as _;
 use rustc_trait_selection::traits::ObligationCause;
 
@@ -374,7 +375,9 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
 
                     let field_is_local = sole_field.did.is_local();
                     let field_is_accessible =
-                        sole_field.vis.is_accessible_from(expr.hir_id.owner.to_def_id(), self.tcx);
+                        sole_field.vis.is_accessible_from(expr.hir_id.owner.to_def_id(), self.tcx)
+                        // Skip suggestions for unstable public fields (for example `Pin::pointer`)
+                        && matches!(self.tcx.eval_stability(sole_field.did, None, expr.span, None), EvalResult::Allow | EvalResult::Unmarked);
 
                     if !field_is_local && !field_is_accessible {
                         return None;