AnyDSL / artic

The AlteRnaTive Impala Compiler
MIT License
25 stars 6 forks source link

calling cuda()/nvvm() functions with empty body triggers assertion… #11

Closed michael-kenzel closed 2 years ago

michael-kenzel commented 2 years ago

…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), @||{});
}

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.

when compiled with --emit-llvm

michael-kenzel commented 2 years ago

just realized that this is actually a thorin problem so I opened an issue there…