diff options
| author | mlugg <mlugg@mlugg.co.uk> | 2023-08-27 17:28:37 +0100 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2023-08-28 12:33:36 -0700 |
| commit | b8e6c426887e92cc5a841a7dd58eb10ebfbe0d77 (patch) | |
| tree | bda2f894bffbc95f62920f94121bf0f4e33cfae5 /src/Sema.zig | |
| parent | 8d036d1d78bd6db5fd39b30c6182196c1e49a3db (diff) | |
| download | zig-b8e6c426887e92cc5a841a7dd58eb10ebfbe0d77.tar.gz zig-b8e6c426887e92cc5a841a7dd58eb10ebfbe0d77.zip | |
compiler: provide result type for @memset value
Resolves: #16986
Diffstat (limited to 'src/Sema.zig')
| -rw-r--r-- | src/Sema.zig | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/Sema.zig b/src/Sema.zig index 09e13664ea..a0af64fc83 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -1023,6 +1023,7 @@ fn analyzeBodyInner( .elem_val_node => try sema.zirElemValNode(block, inst), .elem_type_index => try sema.zirElemTypeIndex(block, inst), .elem_type => try sema.zirElemType(block, inst), + .indexable_ptr_elem_type => try sema.zirIndexablePtrElemType(block, inst), .vector_elem_type => try sema.zirVectorElemType(block, inst), .enum_literal => try sema.zirEnumLiteral(block, inst), .int_from_enum => try sema.zirIntFromEnum(block, inst), @@ -8106,6 +8107,22 @@ fn zirElemType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai return Air.internedToRef(ptr_ty.childType(mod).toIntern()); } +fn zirIndexablePtrElemType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { + const mod = sema.mod; + const un_node = sema.code.instructions.items(.data)[inst].un_node; + const src = un_node.src(); + const ptr_ty = sema.resolveType(block, src, un_node.operand) catch |err| switch (err) { + error.GenericPoison => return .generic_poison_type, + else => |e| return e, + }; + try sema.checkMemOperand(block, src, ptr_ty); + const elem_ty = switch (ptr_ty.ptrSize(mod)) { + .Slice, .Many, .C => ptr_ty.childType(mod), + .One => ptr_ty.childType(mod).childType(mod), + }; + return Air.internedToRef(elem_ty.toIntern()); +} + fn zirVectorElemType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { const mod = sema.mod; const un_node = sema.code.instructions.items(.data)[inst].un_node; |
