mirror of https://github.com/rust-lang/rust
29 lines
1020 B
Rust
29 lines
1020 B
Rust
#![feature(coroutines, stmt_expr_attributes)]
|
|
|
|
// `foo` attempts to dereference `""`, which results in an error being reported. Later, the
|
|
// coroutine transform for `foo` then produces a union which contains a `str` type - unions should
|
|
// not contain unsized types, but this is okay because an error has been reported already.
|
|
// When const propagation happens later in compilation, it attempts to compute the layout of the
|
|
// coroutine (as part of checking whether something can be const propagated) and in turn attempts
|
|
// to compute the layout of `str` in the context of a union - where this caused an ICE. This test
|
|
// makes sure that doesn't happen again.
|
|
|
|
fn foo() {
|
|
let _y = #[coroutine]
|
|
static || {
|
|
let x = &mut 0;
|
|
*{
|
|
yield;
|
|
x
|
|
} += match { *"" }.len() {
|
|
//~^ ERROR cannot move a value of type `str` [E0161]
|
|
//~^^ ERROR cannot move out of a shared reference [E0507]
|
|
_ => 0,
|
|
};
|
|
};
|
|
}
|
|
|
|
fn main() {
|
|
foo()
|
|
}
|