Compiler crash pattern matching unsized tuple in enum variant · Issue #37685 · rust-lang/rust (original) (raw)

I was trying to get an enum which owns some String or Vec<u8> be able to deref into an unsized enum whose variants have str or [u8] but this appears to be unsupported at the moment.

But I am persistent so I try to make the variants hold refs to their original owners but one of them is a tuple.

I found plenty of issues where tuples are also not allowed to have their tail unsized (which seems odd as tuple structs are perfectly fine having their last member unsized) but I tried it anyway in the context of an enum variant tuple.

I tried this code: playground

enum FooRef<'a> {
    A(&'a (str,))
}

fn foo(f: FooRef) {
    match f {
        FooRef::A(&(ref s,)) => (),
    }
}

fn main() {}

I expected to see this happen: A sane error about tuples not being allowed to have an unsized tail.

Instead, this happened: mysterious exit (error: Could not compile ... without any further explanation) with error code 3221225477. On the playground this results in Segmentation fault (core dumped).

As I wrote this I found out that the above example only breaks in Debug builds, Release builds print Program ended. on any Rust version on the playground.

Meta

rustc 1.12.0 (3191fbae9 2016-09-23)
binary: rustc
commit-hash: 3191fbae9da539442351f883bdabcad0d72efcb6
commit-date: 2016-09-23
host: x86_64-pc-windows-msvc
release: 1.12.0