Skip to content

Commit

Permalink
Add tests for opaque types
Browse files Browse the repository at this point in the history
  • Loading branch information
lcnr committed May 20, 2020
1 parent ea47fdf commit a5a4ec9
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 0 deletions.
20 changes: 20 additions & 0 deletions src/test/ui/type-alias-impl-trait/structural-match-no-leak.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#![feature(const_fn, type_alias_impl_trait)]

type Bar = impl Send;

// While i32 is structural-match, we do not want to leak this information.
// (See https://github.com/rust-lang/rust/issues/72156)
const fn leak_free() -> Bar {
7i32
}
const LEAK_FREE: Bar = leak_free();

fn leak_free_test() {
match todo!() {
LEAK_FREE => (),
//~^ opaque types cannot be used in patterns
_ => (),
}
}

fn main() { }
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
error: opaque types cannot be used in patterns
--> $DIR/structural-match-no-leak.rs:14:9
|
LL | LEAK_FREE => (),
| ^^^^^^^^^

error: aborting due to previous error

21 changes: 21 additions & 0 deletions src/test/ui/type-alias-impl-trait/structural-match.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#![feature(const_fn, type_alias_impl_trait)]

type Foo = impl Send;

// This is not structural-match
struct A;

const fn value() -> Foo {
A
}
const VALUE: Foo = value();

fn test() {
match todo!() {
VALUE => (),
//~^ opaque types cannot be used in patterns
_ => (),
}
}

fn main() { }
8 changes: 8 additions & 0 deletions src/test/ui/type-alias-impl-trait/structural-match.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
error: opaque types cannot be used in patterns
--> $DIR/structural-match.rs:15:9
|
LL | VALUE => (),
| ^^^^^

error: aborting due to previous error

0 comments on commit a5a4ec9

Please sign in to comment.