braid icon indicating copy to clipboard operation
braid copied to clipboard

Use i8* instead of void* for generated LLVM IR

Open sampsyo opened this issue 8 years ago • 2 comments
trafficstars

It looks like LLVM doesn't like using void* for opaque pointers. Trying to compile some LLVM IR actually gave me a useful hint:

$ /usr/local/Cellar/llvm/4.0.0_1/bin/opt add.ll             
/usr/local/Cellar/llvm/4.0.0_1/bin/opt: add.ll:6:22: error: pointers to void are invalid - use i8* instead
define i32 @main(void*) {

Apparently, at least until opaque pointer types come to LLVM IR, the right type to use for this sort of thing is a pointer to 8-bit integers.

One easy way to do this would be to define a constant for the i8* type (called FUNCTION_ENV_TYPE?) and then use it wherever we currently have llvm.PointerType.create(llvm.VoidType.create(), 0).

sampsyo avatar May 16 '17 14:05 sampsyo

Got it! I'll try fixing that within the next day or two a put in a new pull request.

If you remember, I mentioned the other day that there was also a bug where the function environment function pointer was not being initialized properly. So I'll try including the fix for that in my pull request as well.

rhenwood39 avatar May 20 '17 17:05 rhenwood39

Cool! I'd be happy to take a look at that separately too if it would be helpful.

sampsyo avatar May 21 '17 04:05 sampsyo