| ... | ... | @@ -3260,8 +3260,8 @@ pub const Type = extern union { |
| 3260 | 3260 | |
| 3261 | 3261 | .array_u8 => return AbiSizeAdvanced{ .scalar = ty.castTag(.array_u8).?.data }, |
| 3262 | 3262 | .array_u8_sentinel_0 => return AbiSizeAdvanced{ .scalar = ty.castTag(.array_u8_sentinel_0).?.data + 1 }, |
| 3263 | | .array, .vector => { |
| 3264 | | const payload = ty.cast(Payload.Array).?.data; |
| 3263 | .array => { |
| 3264 | const payload = ty.castTag(.array).?.data; |
| 3265 | 3265 | switch (try payload.elem_type.abiSizeAdvanced(target, strat)) { |
| 3266 | 3266 | .scalar => |elem_size| return AbiSizeAdvanced{ .scalar = payload.len * elem_size }, |
| 3267 | 3267 | .val => switch (strat) { |
| ... | ... | @@ -3283,6 +3283,28 @@ pub const Type = extern union { |
| 3283 | 3283 | } |
| 3284 | 3284 | }, |
| 3285 | 3285 | |
| 3286 | .vector => { |
| 3287 | const payload = ty.castTag(.vector).?.data; |
| 3288 | const sema_kit = switch (strat) { |
| 3289 | .sema_kit => |sk| sk, |
| 3290 | .eager => null, |
| 3291 | .lazy => |arena| return AbiSizeAdvanced{ |
| 3292 | .val = try Value.Tag.lazy_size.create(arena, ty), |
| 3293 | }, |
| 3294 | }; |
| 3295 | const elem_bits = try payload.elem_type.bitSizeAdvanced(target, sema_kit); |
| 3296 | const total_bits = elem_bits * payload.len; |
| 3297 | const total_bytes = (total_bits + 7) / 8; |
| 3298 | const alignment = switch (try ty.abiAlignmentAdvanced(target, strat)) { |
| 3299 | .scalar => |x| x, |
| 3300 | .val => return AbiSizeAdvanced{ |
| 3301 | .val = try Value.Tag.lazy_size.create(strat.lazy, ty), |
| 3302 | }, |
| 3303 | }; |
| 3304 | const result = std.mem.alignForwardGeneric(u64, total_bytes, alignment); |
| 3305 | return AbiSizeAdvanced{ .scalar = result }; |
| 3306 | }, |
| 3307 | |
| 3286 | 3308 | .isize, |
| 3287 | 3309 | .usize, |
| 3288 | 3310 | .@"anyframe", |