| Issue |
164135
|
| Summary |
Crash with LLVMBuildStore when trying to store a boolean (LLVMInt1Type)
|
| Labels |
new issue
|
| Assignees |
|
| Reporter |
wedesoft
|
Hi, I am using the LLVM C library to do JIT compilation for a Guile extension.
Here is some C code calling `LLVMBuildStore` (see [here](https://github.com/wedesoft/aiscm/blob/83049b599e232ba72da194eb60dad1df791636f5/aiscm/core.c#L418) for complete file).
```C
SCM llvm_build_store(SCM scm_function, SCM scm_type, SCM scm_value, SCM scm_address)
{
struct llvm_function_t *function = get_llvm_function(scm_function);
struct llvm_value_t *value = get_llvm_value(scm_value);
struct llvm_value_t *address = get_llvm_value(scm_address);
int type = scm_to_int(scm_type);
LLVMValueRef pointer = LLVMBuildIntToPtr(function->builder, address->value, LLVMPointerType(llvm_type(type), 0), "x");
LLVMBuildStore(function->builder, value->value, pointer);
return SCM_UNSPECIFIED;
}
```
Basically this code works for most datatypes but when `llvm_type` returns `LLVMInt1Type()` (used for boolean values), it crashes in `llvm::DataLayout::getAlignment(llvm::Type*, bool) const ()`.
The code used to work with LLVM 14. Now I tried to upgrade to LLVM 17, 18, and now 19. With 17 I got infinite recursion (and crash) and with 19 I just get a crash.
```
Thread 1 "guile" received signal SIGSEGV, Segmentation fault.
0x00007fffe596256a in llvm::DataLayout::getAlignment(llvm::Type*, bool) const () from /lib/x86_64-linux-gnu/libLLVM.so.19.1
(gdb) p function->builder
No symbol "function" in current context.
(gdb) up
#1 0x00007fffe596299c in llvm::DataLayout::getPrefTypeAlignment(llvm::Type*) const () from /lib/x86_64-linux-gnu/libLLVM.so.19.1
(gdb)
#2 0x0000000000000000 in ?? ()
```
Let me know if you have any suggestions.
Kind regards
Jan
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs