Add tests for opaque types

This commit is contained in:
Bastian Kauschke 2020-05-13 13:14:53 +02:00
parent ea47fdf785
commit a5a4ec98e2
4 changed files with 57 additions and 0 deletions

View File

@ -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() { }

View File

@ -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

View File

@ -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() { }

View File

@ -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