Skip to content

Commit

Permalink
crater run
Browse files Browse the repository at this point in the history
  • Loading branch information
dingxiangfei2009 committed Sep 17, 2024
1 parent e9e13a6 commit 1544905
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 1 deletion.
2 changes: 1 addition & 1 deletion compiler/rustc_lint/src/if_let_rescope.rs
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ impl_lint_pass!(

impl<'tcx> LateLintPass<'tcx> for IfLetRescope {
fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx hir::Expr<'tcx>) {
if expr.span.edition().at_least_rust_2024() || !cx.tcx.features().if_let_rescope {
if expr.span.edition().at_least_rust_2024() {
return;
}
if let (Level::Allow, _) = cx.tcx.lint_level_at_node(IF_LET_RESCOPE, expr.hir_id) {
Expand Down
26 changes: 26 additions & 0 deletions tests/ui/drop/if-let-rescope-suggestions.fixed
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
//@ edition:2024
//@ compile-flags: -Z validate-mir -Zunstable-options
//@ run-rustfix

#![deny(if_let_rescope)]
#![feature(if_let_rescope)]

struct Droppy;
impl Drop for Droppy {
fn drop(&mut self) {
println!("dropped");
}
}
impl Droppy {
fn get_ref(&self) -> Option<&u8> {
None
}
}

fn do_something<T>(_: &T) {}

fn main() {
let binding = Droppy;
do_something(match binding.get_ref() { Some(value) => { value } _ => { &0 }});
//~^ ERROR: temporary value dropped while borrowed
}
25 changes: 25 additions & 0 deletions tests/ui/drop/if-let-rescope-suggestions.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
//@ edition:2024
//@ compile-flags: -Z validate-mir -Zunstable-options
//@ run-rustfix

#![deny(if_let_rescope)]
#![feature(if_let_rescope)]

struct Droppy;
impl Drop for Droppy {
fn drop(&mut self) {
println!("dropped");
}
}
impl Droppy {
fn get_ref(&self) -> Option<&u8> {
None
}
}

fn do_something<T>(_: &T) {}

fn main() {
do_something(if let Some(value) = Droppy.get_ref() { value } else { &0 });
//~^ ERROR: temporary value dropped while borrowed
}
26 changes: 26 additions & 0 deletions tests/ui/drop/if-let-rescope-suggestions.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
error[E0716]: temporary value dropped while borrowed
--> $DIR/if-let-rescope-suggestions.rs:23:39
|
LL | do_something(if let Some(value) = Droppy.get_ref() { value } else { &0 });
| ^^^^^^ - temporary value is freed at the end of this statement
| |
| creates a temporary value which is freed while still in use
|
note: lifetime for temporaries generated in `if let`s have been shorted in Edition 2024
--> $DIR/if-let-rescope-suggestions.rs:23:65
|
LL | do_something(if let Some(value) = Droppy.get_ref() { value } else { &0 });
| ^
help: consider using a `let` binding to create a longer lived value
|
LL ~ let binding = Droppy;
LL ~ do_something(if let Some(value) = binding.get_ref() { value } else { &0 });
|
help: consider rewriting the `if` into `match` which preserves the extended lifetime
|
LL | do_something(match Droppy.get_ref() { Some(value) => { value } _ => { &0 }});
| ~~~~~ ++++++++++++++++ ~~~~ +

error: aborting due to 1 previous error

For more information about this error, try `rustc --explain E0716`.

0 comments on commit 1544905

Please sign in to comment.