使用`move`创建闭包时的LLVM断言

时间:2014-12-24 09:20:22

标签: rust

我试图创建一个可变引用来克隆捕获的变量。但编译说:

rustc: /home/rustbuild/src/rust-buildbot/slave/nightly-linux/build/src/llvm/lib/IR/Instructions.cpp:2522:
  static llvm::CastInst* llvm::CastInst::CreatePointerCast(llvm::Value*, llvm::Type*, const llvm::Twine&, llvm::Instruction*):
  Assertion `S->getType()->isPtrOrPtrVectorTy() && "Invalid cast"' failed.

我做错了什么?

fn foo(t: &mut int){
    println!("{}", t);
}

fn main() {
    let test = 10;

    let h = move || {
        let mut r = &mut test.clone();
        foo(r);
    };

    h();
}

1 个答案:

答案 0 :(得分:2)

这很可能是编译器中导致LLVM崩溃的错误(断言发生在LLVM代码中,而不是在Rust中 - 否则会有相应的消息并且有可能获得回溯)。我已经提交了一张票here,您可以订阅它以跟踪其进度。