TheDan64 / inkwell

It's a New Kind of Wrapper for Exposing LLVM (Safely)
https://thedan64.github.io/inkwell/
Apache License 2.0
2.22k stars 217 forks source link

Can't Box Token inside BasicValue #494

Open hero-clashes opened 2 months ago

hero-clashes commented 2 months ago

Describe the Bug I am trying to add coroutines inside my compiler and I wanted to use the llvm.coro.id intrinsic but when I tried to call it, it is panicking since in the build_call_help function it checks for the function return type but in that function is tries to box the Token type in BasicTypeEnum which doesn't support the token type Expected Behavior creating a call inst successfully for now I will call it manually by just copying the code for the build_call_help and removing the void return check LLVM Version (please complete the following information):

Desktop (please complete the following information):

Add to that I can't box the id too, so every call that uses it I need to do it manually

TheDan64 commented 2 months ago

Do you have any examples of how token usage might look like? Inkwell pseudo code or llvm sys. Relevant llvm sys functions would help too

hero-clashes commented 2 months ago

the thing their use aren't different from normal values, but they always used with intrinsic as args, for exmaple I call llvm.coro.alloc with a token just like normal call let need_alloc = manual_call(llvm_coro_alloc, vec![id.as_value_ref()], "need_alloc".to_owned()); the manual_call func is the same function as direct call just without the void type return check, and with using the value ref directly, and the id is a token returned from llvm.coro.id call