Closed
Description
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.