diff options
| author | Veikka Tuominen <git@vexu.eu> | 2022-10-05 16:49:12 +0300 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2022-10-06 20:09:45 +0300 |
| commit | 446deb31a80a2bd046633fb087d8caee3ed41021 (patch) | |
| tree | 800acec67f7a982dddfa52b5f011a3d96554932d /src | |
| parent | 775e055b59366f60badfb77a420219691846314b (diff) | |
| download | zig-446deb31a80a2bd046633fb087d8caee3ed41021.tar.gz zig-446deb31a80a2bd046633fb087d8caee3ed41021.zip | |
Sema: validate bitSizeOf operand type
Closes #13080
Diffstat (limited to 'src')
| -rw-r--r-- | src/Sema.zig | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/Sema.zig b/src/Sema.zig index 01c8b395bc..55fd296ff7 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -14286,6 +14286,38 @@ fn zirBitSizeOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A const src = inst_data.src(); const operand_src: LazySrcLoc = .{ .node_offset_builtin_call_arg0 = inst_data.src_node }; const operand_ty = try sema.resolveType(block, operand_src, inst_data.operand); + switch (operand_ty.zigTypeTag()) { + .Fn, + .NoReturn, + .Undefined, + .Null, + .BoundFn, + .Opaque, + => return sema.fail(block, operand_src, "no size available for type '{}'", .{operand_ty.fmt(sema.mod)}), + + .Type, + .EnumLiteral, + .ComptimeFloat, + .ComptimeInt, + .Void, + => return sema.addIntUnsigned(Type.comptime_int, 0), + + .Bool, + .Int, + .Float, + .Pointer, + .Array, + .Struct, + .Optional, + .ErrorUnion, + .ErrorSet, + .Enum, + .Union, + .Vector, + .Frame, + .AnyFrame, + => {}, + } const target = sema.mod.getTarget(); const bit_size = try operand_ty.bitSizeAdvanced(target, sema.kit(block, src)); return sema.addIntUnsigned(Type.comptime_int, bit_size); |
