Fix LLVMConstIntOfArbitraryPrecision usage for a pointer

This commit is contained in:
gingerBill
2021-04-06 11:07:05 +01:00
parent 050d6f670e
commit 535048e2b3
+8 -3
View File
@@ -5797,12 +5797,17 @@ lbValue lb_const_value(lbModule *m, Type *type, ExactValue value, bool allow_loc
case ExactValue_Integer:
if (is_type_pointer(type)) {
LLVMValueRef i = LLVMConstIntOfArbitraryPrecision(lb_type(m, t_uintptr), cast(unsigned)value.value_integer.len, big_int_ptr(&value.value_integer));
res.value = LLVMConstIntToPtr(i, lb_type(m, original_type));
unsigned len = cast(unsigned)value.value_integer.len;
LLVMTypeRef t = lb_type(m, t_uintptr);
if (len == 0) {
res.value = LLVMConstNull(t);
} else {
LLVMValueRef i = LLVMConstIntOfArbitraryPrecision(t, len, big_int_ptr(&value.value_integer));
res.value = LLVMConstIntToPtr(i, lb_type(m, original_type));
}
} else {
unsigned len = cast(unsigned)value.value_integer.len;
if (len == 0) {
u64 word = 0;
res.value = LLVMConstNull(lb_type(m, original_type));
} else {
u64 *words = big_int_ptr(&value.value_integer);