aboutsummaryrefslogtreecommitdiff
path: root/src/type.zig
diff options
context:
space:
mode:
authorJimmi Holst Christensen <jhc@dismail.de>2022-01-08 13:00:49 +0100
committerJimmi Holst Christensen <jhc@dismail.de>2022-01-08 13:00:49 +0100
commitd8d5e2d4b959f9627853a9f1248609929f0f0de4 (patch)
treedef51f4b1febf910813575e88043732545b6977d /src/type.zig
parent3f586781b6c8d698468cc58ab64797097323c253 (diff)
downloadzig-d8d5e2d4b959f9627853a9f1248609929f0f0de4.tar.gz
zig-d8d5e2d4b959f9627853a9f1248609929f0f0de4.zip
Implement offsetOf builtin function
Diffstat (limited to 'src/type.zig')
-rw-r--r--src/type.zig10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/type.zig b/src/type.zig
index f4561769e2..5e04a7e304 100644
--- a/src/type.zig
+++ b/src/type.zig
@@ -3777,7 +3777,10 @@ pub const Type = extern union {
var offset: u64 = 0;
var big_align: u32 = 0;
for (struct_obj.fields.values()) |field, i| {
- if (!field.ty.hasCodeGenBits()) continue;
+ if (!field.ty.hasCodeGenBits()) {
+ if (i == index) return offset;
+ continue;
+ }
const field_align = field.normalAlignment(target);
big_align = @maximum(big_align, field_align);
@@ -3794,7 +3797,10 @@ pub const Type = extern union {
var big_align: u32 = 0;
var running_bits: u16 = 0;
for (struct_obj.fields.values()) |field, i| {
- if (!field.ty.hasCodeGenBits()) continue;
+ if (!field.ty.hasCodeGenBits()) {
+ if (i == index) return offset;
+ continue;
+ }
const field_align = field.packedAlignment();
if (field_align == 0) {