Skip to content

ICE using enum variant constructor in borrowed vector initializer #10228

Closed
@jdm

Description

@jdm

The number of restrictions on this testcase are pretty bizarre:

enum StdioContainer {
    CreatePipe(bool)
}

struct Test<'self> {
    args: &'self [~str],
    io: &'self [StdioContainer]
}

fn main() {
    let test = Test {
        args: [],
        io: [CreatePipe(true)]
    };
}

This is as reduced as I could make it. There needs to be two borrowed vectors, and one of them needs to contain ~str elements (u8 didn't work). The other needs to contain an enum variant with a constructor that's called in the initializer. The end result is an LLVM assertion for the call:

rustc: /run/media/jdm/ssd/rust/src/llvm/lib/IR/Instructions.cpp:281: void llvm::CallInst::init(llvm::Value*, llvm::ArrayRef<llvm::Value*>, const llvm::Twine&): Assertion `(i >= FTy->getNumParams() || FTy->getParamType(i) == Args[i]->getType()) && "Calling a function with a bad signature!"' failed.

Metadata

Metadata

Assignees

No one assigned

    Labels

    E-needs-testCall for participation: An issue has been fixed and does not reproduce, but no test has been added.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions