aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/llvm.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-09-09 10:26:17 -0700
committerAndrew Kelley <andrew@ziglang.org>2022-09-09 10:26:17 -0700
commit37cdb5dbf90acd61584bae4a6661d0a6f9b54295 (patch)
tree6b369bbd58603d40b17b0e16e157a757b4a01616 /src/codegen/llvm.zig
parentb7900de1684021ff86c67105e14e34968821ea02 (diff)
parent9e070b653c89a9216f9dd9f78ed7c78c11460ac7 (diff)
downloadzig-37cdb5dbf90acd61584bae4a6661d0a6f9b54295.tar.gz
zig-37cdb5dbf90acd61584bae4a6661d0a6f9b54295.zip
Merge remote-tracking branch 'origin/master' into llvm15
Diffstat (limited to 'src/codegen/llvm.zig')
-rw-r--r--src/codegen/llvm.zig13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig
index dc43548b80..d20b6f2ab6 100644
--- a/src/codegen/llvm.zig
+++ b/src/codegen/llvm.zig
@@ -3912,7 +3912,7 @@ pub const DeclGen = struct {
var b: usize = 0;
for (parent_ty.structFields().values()[0..field_index]) |field| {
if (field.is_comptime or !field.ty.hasRuntimeBitsIgnoreComptime()) continue;
- b += field.ty.bitSize(target);
+ b += @intCast(usize, field.ty.bitSize(target));
}
break :b b;
};
@@ -9385,6 +9385,12 @@ pub const FuncGen = struct {
return self.builder.buildBitCast(truncated_int, elem_llvm_ty, "");
}
+ if (info.pointee_type.isPtrAtRuntime()) {
+ const same_size_int = self.context.intType(elem_bits);
+ const truncated_int = self.builder.buildTrunc(shifted_value, same_size_int, "");
+ return self.builder.buildIntToPtr(truncated_int, elem_llvm_ty, "");
+ }
+
return self.builder.buildTrunc(shifted_value, elem_llvm_ty, "");
}
@@ -9416,7 +9422,10 @@ pub const FuncGen = struct {
// Convert to equally-sized integer type in order to perform the bit
// operations on the value to store
const value_bits_type = self.context.intType(elem_bits);
- const value_bits = self.builder.buildBitCast(elem, value_bits_type, "");
+ const value_bits = if (elem_ty.isPtrAtRuntime())
+ self.builder.buildPtrToInt(elem, value_bits_type, "")
+ else
+ self.builder.buildBitCast(elem, value_bits_type, "");
var mask_val = value_bits_type.constAllOnes();
mask_val = mask_val.constZExt(containing_int_ty);