zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 2b5bd56a67a26cd4adff76b6e3bf542e97f91cc4 (tree)
parent ffc116de78dee6db8b3f2e0474f21bd88ef3895c
Author: Jacob Young <jacobly0@users.noreply.github.com>
Date:   Fri, 11 Aug 2023 22:45:55 -0400

AstGen: fix src loc for invalid coercions in tuple literals

Diffstat:
Msrc/AstGen.zig | 5++++-
Atest/cases/compile_errors/invalid_coercion_in_aggregate_literal.zig | 22++++++++++++++++++++++
2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/src/AstGen.zig b/src/AstGen.zig @@ -11359,7 +11359,10 @@ const GenZir = struct { parent_gz.instructions.items.len -= src - dst; as_scope.instructions_top = GenZir.unstacked_top; // as_scope now unstacked, can add new instructions to parent_gz - const casted_result = try parent_gz.addBin(.as, dest_type, result); + const casted_result = try parent_gz.addPlNode(.as_node, src_node, Zir.Inst.As{ + .dest_type = dest_type, + .operand = result, + }); return rvalue(parent_gz, ri, casted_result, src_node); } else { // implicitly move all as_scope instructions to parent_gz diff --git a/test/cases/compile_errors/invalid_coercion_in_aggregate_literal.zig b/test/cases/compile_errors/invalid_coercion_in_aggregate_literal.zig @@ -0,0 +1,22 @@ +export fn invalidArrayElem() u8 { + const array_literal = [1]u8{@as(u8, 256)}; + return array_literal[0]; +} + +export fn invalidTupleElem() u8 { + const tuple_literal = struct { u8 }{@as(u8, 256)}; + return tuple_literal[0]; +} + +export fn invalidStructField() u8 { + const struct_literal = struct { field: u8 }{ .field = @as(u8, 256) }; + return struct_literal.field; +} + +// error +// backend=stage2 +// target=native +// +// :2:41: error: type 'u8' cannot represent integer value '256' +// :7:49: error: type 'u8' cannot represent integer value '256' +// :12:67: error: type 'u8' cannot represent integer value '256'