calling cuda()/nvvm() intrinsics with empty body triggers assertion…
michael-kenzel opened this issue · comments
…when called from exported function if there is a variable in scope that is initialized to a different lambda depending on function parameter.
repro:
#[import(cc = "thorin")] fn nvvm(_dev: i32, _grid: (i32, i32, i32), _block: (i32, i32, i32), _body: fn() -> ()) -> ();
#[export]
fn test(b: bool) -> () {
let fun = if b { @||{} } else { @||{} };
nvvm(0, (1, 1, 1), (1, 1, 1), @||{});
}
compilation via artic with --emit-llvm
results in
src/thorin/be/codegen.cpp:39: thorin::get_kernel_configs(thorin::Importer&, const std::vector<thorin::Continuation*>&, thorin::Cont2Config&, std::function<std::unique_ptr<thorin::KernelConfig>(thorin::Continuation*, thorin::Continuation*)>)::<lambda(thorin::Continuation*)>: Assertion `p.second && "single kernel config entry expected"' failed.
Most likely related to #128, let's consolidate discussion there