diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2022-03-09 18:47:42 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2022-03-09 18:49:37 -0700 |
| commit | f736cde397a6abb1399827ed5988c43001706580 (patch) | |
| tree | c1ce080f82846a4322eac7be653a78044338e740 /src/codegen | |
| parent | 017d3864de1f337d01726e87534a4e2093c7265f (diff) | |
| download | zig-f736cde397a6abb1399827ed5988c43001706580.tar.gz zig-f736cde397a6abb1399827ed5988c43001706580.zip | |
Sema: implement pointer to tuple to pointer to array coercion
This involved an LLVM backend fix for the aggregate_init instruction.
Diffstat (limited to 'src/codegen')
| -rw-r--r-- | src/codegen/llvm.zig | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index fb7daa80ec..aacb3af47d 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -5838,8 +5838,15 @@ pub const FuncGen = struct { const llvm_i = llvmFieldIndex(result_ty, i, target, &ptr_ty_buf).?; indices[1] = llvm_u32.constInt(llvm_i, .False); const field_ptr = self.builder.buildInBoundsGEP(alloca_inst, &indices, indices.len, ""); - const store_inst = self.builder.buildStore(llvm_elem, field_ptr); - store_inst.setAlignment(result_ty.structFieldAlign(i, target)); + var field_ptr_payload: Type.Payload.Pointer = .{ + .data = .{ + .pointee_type = self.air.typeOf(elem), + .@"align" = result_ty.structFieldAlign(i, target), + .@"addrspace" = .generic, + }, + }; + const field_ptr_ty = Type.initPayload(&field_ptr_payload.base); + self.store(field_ptr, field_ptr_ty, llvm_elem, .NotAtomic); } return alloca_inst; @@ -5871,8 +5878,14 @@ pub const FuncGen = struct { }; const elem_ptr = self.builder.buildInBoundsGEP(alloca_inst, &indices, indices.len, ""); const llvm_elem = try self.resolveInst(elem); - const store_inst = self.builder.buildStore(llvm_elem, elem_ptr); - store_inst.setAlignment(elem_ty.abiAlignment(target)); + var elem_ptr_payload: Type.Payload.Pointer = .{ + .data = .{ + .pointee_type = elem_ty, + .@"addrspace" = .generic, + }, + }; + const elem_ptr_ty = Type.initPayload(&elem_ptr_payload.base); + self.store(elem_ptr, elem_ptr_ty, llvm_elem, .NotAtomic); } return alloca_inst; |
