提交 df37678b 编写于 作者: N Niko Matsakis

add FIXME related to `ref x` bindings

上级 2b6f9664
......@@ -475,7 +475,7 @@ pub fn schedule_drop_for_binding(&mut self, var: NodeId, span: Span, for_guard:
pub fn visit_bindings(
&mut self,
pattern: &Pattern<'tcx>,
pattern_user_ty: Option<CanonicalTy<'tcx>>,
mut pattern_user_ty: Option<CanonicalTy<'tcx>>,
f: &mut impl FnMut(
&mut Self,
Mutability,
......@@ -497,6 +497,19 @@ pub fn visit_bindings(
ref subpattern,
..
} => {
match mode {
BindingMode::ByValue => { }
BindingMode::ByRef(..) => {
// If this is a `ref` binding (e.g., `let ref
// x: T = ..`), then the type of `x` is not
// `T` but rather `&T`, so ignore
// `pattern_user_ty` for now.
//
// FIXME(#47184): extract or handle `pattern_user_ty` somehow
pattern_user_ty = None;
}
}
f(self, mutability, name, mode, var, pattern.span, ty, pattern_user_ty);
if let Some(subpattern) = subpattern.as_ref() {
self.visit_bindings(subpattern, pattern_user_ty, f);
......
......@@ -20,7 +20,7 @@ fn ref_with_ascribed_static_type() -> u32 {
// Check the behavior in some wacky cases.
let x = 22;
let y = &x; //~ ERROR
let ref z: &'static u32 = y; //~ ERROR
let ref z: &'static u32 = y;
**z
}
......
......@@ -19,17 +19,6 @@ LL | }
|
= note: borrowed value must be valid for the static lifetime...
error[E0597]: `y` does not live long enough
--> $DIR/patterns.rs:23:9
|
LL | let ref z: &'static u32 = y; //~ ERROR
| ^^^^^ borrowed value does not live long enough
LL | **z
LL | }
| - `y` dropped here while still borrowed
|
= note: borrowed value must be valid for the static lifetime...
error[E0597]: `x` does not live long enough
--> $DIR/patterns.rs:46:27
|
......@@ -149,6 +138,6 @@ LL | fn a_to_static_then_static<'a>(x: &'a u32) -> &'static u32 {
LL | let (y, _z): (&'static u32, u32) = (x, 44); //~ ERROR
| ^^^^^^^ requires that `'a` must outlive `'static`
error: aborting due to 15 previous errors
error: aborting due to 14 previous errors
For more information about this error, try `rustc --explain E0597`.
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册