forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Tests for
feature(bind_by_move_pattern_guards)
.
Apparently copyright notices are no longer necessary apparently. (See rust-lang#43498 and rust-lang#53654.)
- Loading branch information
Showing
14 changed files
with
208 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
21 changes: 21 additions & 0 deletions
21
src/test/ui/rfc-0107-bind-by-move-pattern-guards/bind-by-move-no-guards.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
// Adaptation of existing ui test (from way back in | ||
// rust-lang/rust#2329), that starts passing with this feature in | ||
// place. | ||
|
||
// compile-pass | ||
|
||
#![feature(nll)] | ||
#![feature(bind_by_move_pattern_guards)] | ||
|
||
use std::sync::mpsc::channel; | ||
|
||
fn main() { | ||
let (tx, rx) = channel(); | ||
let x = Some(rx); | ||
tx.send(false); | ||
match x { | ||
Some(z) if z.recv().unwrap() => { panic!() }, | ||
Some(z) => { assert!(!z.recv().unwrap()); }, | ||
None => panic!() | ||
} | ||
} |
9 changes: 9 additions & 0 deletions
9
src/test/ui/rfc-0107-bind-by-move-pattern-guards/feature-gate.gate_and_2015.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
error[E0008]: cannot bind by-move into a pattern guard | ||
--> $DIR/feature-gate.rs:33:16 | ||
| | ||
LL | A { a: v } if *v == 42 => v, | ||
| ^ moves value into pattern guard | ||
|
||
error: aborting due to previous error | ||
|
||
For more information about this error, try `rustc --explain E0008`. |
10 changes: 10 additions & 0 deletions
10
src/test/ui/rfc-0107-bind-by-move-pattern-guards/feature-gate.gate_and_2018.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
error: compilation successful | ||
--> $DIR/feature-gate.rs:42:1 | ||
| | ||
LL | / fn main() { | ||
LL | | foo(107) | ||
LL | | } | ||
| |_^ | ||
|
||
error: aborting due to previous error | ||
|
10 changes: 10 additions & 0 deletions
10
src/test/ui/rfc-0107-bind-by-move-pattern-guards/feature-gate.gate_and_feature_nll.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
error: compilation successful | ||
--> $DIR/feature-gate.rs:42:1 | ||
| | ||
LL | / fn main() { | ||
LL | | foo(107) | ||
LL | | } | ||
| |_^ | ||
|
||
error: aborting due to previous error | ||
|
10 changes: 10 additions & 0 deletions
10
src/test/ui/rfc-0107-bind-by-move-pattern-guards/feature-gate.gate_and_znll.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
error: compilation successful | ||
--> $DIR/feature-gate.rs:42:1 | ||
| | ||
LL | / fn main() { | ||
LL | | foo(107) | ||
LL | | } | ||
| |_^ | ||
|
||
error: aborting due to previous error | ||
|
9 changes: 9 additions & 0 deletions
9
src/test/ui/rfc-0107-bind-by-move-pattern-guards/feature-gate.no_gate.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
error[E0008]: cannot bind by-move into a pattern guard | ||
--> $DIR/feature-gate.rs:33:16 | ||
| | ||
LL | A { a: v } if *v == 42 => v, | ||
| ^ moves value into pattern guard | ||
|
||
error: aborting due to previous error | ||
|
||
For more information about this error, try `rustc --explain E0008`. |
47 changes: 47 additions & 0 deletions
47
src/test/ui/rfc-0107-bind-by-move-pattern-guards/feature-gate.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
// Check that pattern-guards with move-bound variables is only allowed | ||
// with the appropriate set of feature gates. (Note that we require | ||
// the code to opt into MIR-borrowck in *some* way before the feature | ||
// will work; we use the revision system here to enumerate a number of | ||
// ways that opt-in could occur.) | ||
|
||
// gate-test-bind_by_move_pattern_guards | ||
|
||
// revisions: no_gate gate_and_2015 gate_and_2018 gate_and_znll gate_and_feature_nll | ||
|
||
// (We're already testing NLL behavior quite explicitly, no need for compare-mode=nll.) | ||
// ignore-compare-mode-nll | ||
|
||
#![feature(rustc_attrs)] | ||
|
||
#![cfg_attr(gate_and_2015, feature(bind_by_move_pattern_guards))] | ||
#![cfg_attr(gate_and_2018, feature(bind_by_move_pattern_guards))] | ||
#![cfg_attr(gate_and_znll, feature(bind_by_move_pattern_guards))] | ||
#![cfg_attr(gate_and_feature_nll, feature(bind_by_move_pattern_guards))] | ||
|
||
#![cfg_attr(gate_and_feature_nll, feature(nll))] | ||
|
||
//[gate_and_2015] edition:2015 | ||
//[gate_and_2018] edition:2018 | ||
//[gate_and_znll] compile-flags: -Z borrowck=mir | ||
|
||
struct A { a: Box<i32> } | ||
|
||
fn foo(n: i32) { | ||
let x = A { a: Box::new(n) }; | ||
let _y = match x { | ||
|
||
A { a: v } if *v == 42 => v, | ||
//[no_gate]~^ ERROR cannot bind by-move into a pattern guard | ||
//[gate_and_2015]~^^ ERROR cannot bind by-move into a pattern guard | ||
|
||
_ => Box::new(0) | ||
}; | ||
} | ||
|
||
#[rustc_error] | ||
fn main() { | ||
foo(107) | ||
} | ||
//[gate_and_2018]~^^^ ERROR compilation successful | ||
//[gate_and_znll]~^^^^ ERROR compilation successful | ||
//[gate_and_feature_nll]~^^^^^ ERROR compilation successful |
40 changes: 40 additions & 0 deletions
40
src/test/ui/rfc-0107-bind-by-move-pattern-guards/rfc-basic-examples.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
#![feature(nll)] | ||
#![feature(bind_by_move_pattern_guards)] | ||
|
||
// compile-pass | ||
|
||
struct A { a: Box<i32> } | ||
|
||
impl A { | ||
fn get(&self) -> i32 { *self.a } | ||
} | ||
|
||
fn foo(n: i32) { | ||
let x = A { a: Box::new(n) }; | ||
let y = match x { | ||
A { a: v } if *v == 42 => v, | ||
_ => Box::new(0), | ||
}; | ||
} | ||
|
||
fn bar(n: i32) { | ||
let x = A { a: Box::new(n) }; | ||
let y = match x { | ||
A { a: v } if x.get() == 42 => v, | ||
_ => Box::new(0), | ||
}; | ||
} | ||
|
||
fn baz(n: i32) { | ||
let x = A { a: Box::new(n) }; | ||
let y = match x { | ||
A { a: v } if *v.clone() == 42 => v, | ||
_ => Box::new(0), | ||
}; | ||
} | ||
|
||
fn main() { | ||
foo(107); | ||
bar(107); | ||
baz(107); | ||
} |
16 changes: 16 additions & 0 deletions
16
src/test/ui/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-across-arms.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
#![feature(nll)] | ||
#![feature(bind_by_move_pattern_guards)] | ||
|
||
enum VecWrapper { A(Vec<i32>) } | ||
|
||
fn foo(x: VecWrapper) -> usize { | ||
match x { | ||
VecWrapper::A(v) if { drop(v); false } => 1, | ||
//~^ ERROR cannot move out of borrowed content | ||
VecWrapper::A(v) => v.len() | ||
} | ||
} | ||
|
||
fn main() { | ||
foo(VecWrapper::A(vec![107])); | ||
} |
9 changes: 9 additions & 0 deletions
9
src/test/ui/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-across-arms.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
error[E0507]: cannot move out of borrowed content | ||
--> $DIR/rfc-reject-double-move-across-arms.rs:8:36 | ||
| | ||
LL | VecWrapper::A(v) if { drop(v); false } => 1, | ||
| ^ cannot move out of borrowed content | ||
|
||
error: aborting due to previous error | ||
|
||
For more information about this error, try `rustc --explain E0507`. |
17 changes: 17 additions & 0 deletions
17
src/test/ui/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-in-first-arm.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
#![feature(nll)] | ||
#![feature(bind_by_move_pattern_guards)] | ||
|
||
struct A { a: Box<i32> } | ||
|
||
fn foo(n: i32) { | ||
let x = A { a: Box::new(n) }; | ||
let _y = match x { | ||
A { a: v } if { drop(v); true } => v, | ||
//~^ ERROR cannot move out of borrowed content | ||
_ => Box::new(0), | ||
}; | ||
} | ||
|
||
fn main() { | ||
foo(107); | ||
} |
9 changes: 9 additions & 0 deletions
9
src/test/ui/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-in-first-arm.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
error[E0507]: cannot move out of borrowed content | ||
--> $DIR/rfc-reject-double-move-in-first-arm.rs:9:30 | ||
| | ||
LL | A { a: v } if { drop(v); true } => v, | ||
| ^ cannot move out of borrowed content | ||
|
||
error: aborting due to previous error | ||
|
||
For more information about this error, try `rustc --explain E0507`. |