From a8d6954c23d816121471558990c5dd6bf5f82c89 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 1 Oct 2019 17:39:31 -0400 Subject: [PATCH] fix tripping LLVM assertion in const unions --- src/codegen.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/codegen.cpp b/src/codegen.cpp index 0e528069b11abd0e0b4e8548ad4a95f629b780c1..5d1f2b8bf9e1be623a5f3b23139d92cd6ab8a89e 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -6764,13 +6764,12 @@ check: switch (const_val->special) { assert(LLVMGetTypeKind(field_ty) == LLVMIntegerTypeKind); fields[type_struct_field->gen_index] = val; } else { - const LLVMValueRef MASK = LLVMConstInt(LLVMInt8Type(), 255, false); - const LLVMValueRef AMT = LLVMConstInt(LLVMInt8Type(), 8, false); + const LLVMValueRef AMT = LLVMConstInt(LLVMTypeOf(val), 8, false); LLVMValueRef *values = allocate(size_in_bytes); for (size_t i = 0; i < size_in_bytes; i++) { const size_t idx = is_big_endian ? size_in_bytes - 1 - i : i; - values[idx] = LLVMConstTruncOrBitCast(LLVMConstAnd(val, MASK), LLVMInt8Type()); + values[idx] = LLVMConstTruncOrBitCast(val, LLVMInt8Type()); val = LLVMConstLShr(val, AMT); } -- 2.54.0