| ... | @@ -3359,7 +3359,11 @@ pub const DeclGen = struct { | ... | @@ -3359,7 +3359,11 @@ pub const DeclGen = struct { |
| 3359 | else => switch (mod.intern_pool.indexToKey(tv.val.ip_index)) { | 3359 | else => switch (mod.intern_pool.indexToKey(tv.val.ip_index)) { |
| 3360 | .int => |int| return dg.lowerIntAsPtr(int), | 3360 | .int => |int| return dg.lowerIntAsPtr(int), |
| 3361 | .ptr => |ptr| { | 3361 | .ptr => |ptr| { |
| 3362 | const ptr_val = switch (ptr.addr) { | 3362 | const ptr_tv: TypedValue = switch (ptr.len) { |
| | 3363 | .none => tv, |
| | 3364 | else => .{ .ty = tv.ty.slicePtrFieldType(mod), .val = tv.val.slicePtr(mod) }, |
| | 3365 | }; |
| | 3366 | const llvm_ptr_val = switch (ptr.addr) { |
| 3363 | .@"var" => |@"var"| ptr: { | 3367 | .@"var" => |@"var"| ptr: { |
| 3364 | const decl = dg.module.declPtr(@"var".owner_decl); | 3368 | const decl = dg.module.declPtr(@"var".owner_decl); |
| 3365 | dg.module.markDeclAlive(decl); | 3369 | dg.module.markDeclAlive(decl); |
| ... | @@ -3374,21 +3378,21 @@ pub const DeclGen = struct { | ... | @@ -3374,21 +3378,21 @@ pub const DeclGen = struct { |
| 3374 | val; | 3378 | val; |
| 3375 | break :ptr addrspace_casted_ptr; | 3379 | break :ptr addrspace_casted_ptr; |
| 3376 | }, | 3380 | }, |
| 3377 | .decl => |decl| try dg.lowerDeclRefValue(tv, decl), | 3381 | .decl => |decl| try dg.lowerDeclRefValue(ptr_tv, decl), |
| 3378 | .mut_decl => |mut_decl| try dg.lowerDeclRefValue(tv, mut_decl.decl), | 3382 | .mut_decl => |mut_decl| try dg.lowerDeclRefValue(ptr_tv, mut_decl.decl), |
| 3379 | .int => |int| dg.lowerIntAsPtr(mod.intern_pool.indexToKey(int).int), | 3383 | .int => |int| dg.lowerIntAsPtr(mod.intern_pool.indexToKey(int).int), |
| 3380 | .eu_payload, | 3384 | .eu_payload, |
| 3381 | .opt_payload, | 3385 | .opt_payload, |
| 3382 | .elem, | 3386 | .elem, |
| 3383 | .field, | 3387 | .field, |
| 3384 | => try dg.lowerParentPtr(tv.val, tv.ty.ptrInfo(mod).bit_offset % 8 == 0), | 3388 | => try dg.lowerParentPtr(ptr_tv.val, ptr_tv.ty.ptrInfo(mod).bit_offset % 8 == 0), |
| 3385 | .comptime_field => unreachable, | 3389 | .comptime_field => unreachable, |
| 3386 | }; | 3390 | }; |
| 3387 | switch (ptr.len) { | 3391 | switch (ptr.len) { |
| 3388 | .none => return ptr_val, | 3392 | .none => return llvm_ptr_val, |
| 3389 | else => { | 3393 | else => { |
| 3390 | const fields: [2]*llvm.Value = .{ | 3394 | const fields: [2]*llvm.Value = .{ |
| 3391 | ptr_val, | 3395 | llvm_ptr_val, |
| 3392 | try dg.lowerValue(.{ .ty = Type.usize, .val = ptr.len.toValue() }), | 3396 | try dg.lowerValue(.{ .ty = Type.usize, .val = ptr.len.toValue() }), |
| 3393 | }; | 3397 | }; |
| 3394 | return dg.context.constStruct(&fields, fields.len, .False); | 3398 | return dg.context.constStruct(&fields, fields.len, .False); |