Add test for capturing enums

This commit is contained in:
Aman Arora 2020-11-10 22:54:04 -05:00
parent deeb025f39
commit d0fac05d8f
2 changed files with 134 additions and 0 deletions

View file

@ -0,0 +1,56 @@
#![feature(capture_disjoint_fields)]
//~^ WARNING the feature `capture_disjoint_fields` is incomplete
#![feature(rustc_attrs)]
enum Info {
Point(i32, i32, String),
Meta(String, Vec<(i32, i32)>)
}
fn multi_variant_enum() {
let point = Info::Point(10, -10, "1".into());
let vec = Vec::new();
let meta = Info::Meta("meta".into(), vec);
let c = #[rustc_capture_analysis]
//~^ ERROR: attributes on expressions are experimental
|| {
if let Info::Point(_, _, str) = point {
//~^ Capturing point[] -> ImmBorrow
//~| Capturing point[(2, 0)] -> ByValue
//~| Min Capture point[] -> ByValue
println!("{}", str);
}
if let Info::Meta(_, v) = meta {
//~^ Capturing meta[] -> ImmBorrow
//~| Capturing meta[(1, 1)] -> ByValue
//~| Min Capture meta[] -> ByValue
println!("{:?}", v);
}
};
c();
}
enum SingleVariant {
Point(i32, i32, String),
}
fn single_variant_enum() {
let point = SingleVariant::Point(10, -10, "1".into());
let c = #[rustc_capture_analysis]
//~^ ERROR: attributes on expressions are experimental
|| {
let SingleVariant::Point(_, _, str) = point;
//~^ Capturing point[(2, 0)] -> ByValue
//~| Min Capture point[(2, 0)] -> ByValue
println!("{}", str);
};
c();
}
fn main() {}

View file

@ -0,0 +1,78 @@
error[E0658]: attributes on expressions are experimental
--> $DIR/capture-enums.rs:16:13
|
LL | let c = #[rustc_capture_analysis]
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #15701 <https://github.com/rust-lang/rust/issues/15701> for more information
= help: add `#![feature(stmt_expr_attributes)]` to the crate attributes to enable
error[E0658]: attributes on expressions are experimental
--> $DIR/capture-enums.rs:44:13
|
LL | let c = #[rustc_capture_analysis]
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #15701 <https://github.com/rust-lang/rust/issues/15701> for more information
= help: add `#![feature(stmt_expr_attributes)]` to the crate attributes to enable
warning: the feature `capture_disjoint_fields` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/capture-enums.rs:1:12
|
LL | #![feature(capture_disjoint_fields)]
| ^^^^^^^^^^^^^^^^^^^^^^^
|
= note: `#[warn(incomplete_features)]` on by default
= note: see issue #53488 <https://github.com/rust-lang/rust/issues/53488> for more information
error: Capturing point[] -> ImmBorrow
--> $DIR/capture-enums.rs:19:41
|
LL | if let Info::Point(_, _, str) = point {
| ^^^^^
error: Capturing point[(2, 0)] -> ByValue
--> $DIR/capture-enums.rs:19:41
|
LL | if let Info::Point(_, _, str) = point {
| ^^^^^
error: Capturing meta[] -> ImmBorrow
--> $DIR/capture-enums.rs:26:35
|
LL | if let Info::Meta(_, v) = meta {
| ^^^^
error: Capturing meta[(1, 1)] -> ByValue
--> $DIR/capture-enums.rs:26:35
|
LL | if let Info::Meta(_, v) = meta {
| ^^^^
error: Min Capture point[] -> ByValue
--> $DIR/capture-enums.rs:19:41
|
LL | if let Info::Point(_, _, str) = point {
| ^^^^^
error: Min Capture meta[] -> ByValue
--> $DIR/capture-enums.rs:26:35
|
LL | if let Info::Meta(_, v) = meta {
| ^^^^
error: Capturing point[(2, 0)] -> ByValue
--> $DIR/capture-enums.rs:47:43
|
LL | let SingleVariant::Point(_, _, str) = point;
| ^^^^^
error: Min Capture point[(2, 0)] -> ByValue
--> $DIR/capture-enums.rs:47:43
|
LL | let SingleVariant::Point(_, _, str) = point;
| ^^^^^
error: aborting due to 10 previous errors; 1 warning emitted
For more information about this error, try `rustc --explain E0658`.