Skip to content

Trait objects can be created with lifetime bounds that ignore input lifetimes #18055

Closed
@lifthrasiir

Description

@lifthrasiir
fn foo() -> Box<Reader + 'static> {
    let v = [1, 2, 3];
    box std::io::BufReader::new(v)
}

fn main() {
    let mut foo = foo();
    println!("{}", foo.read_to_end());
}

This should not compile, since v is &'a [u8] for some non-'static 'a and thus BufReader<'a> will contain &'a [u8] as well. It compiles fine however and results in the varying output depending on the optimization level (which shows that this is an UB out of the "safe" code).

Tested with rustc 0.13.0-nightly (1c3ddd297 2014-10-13 23:27:46 +0000) and playpen.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions