zig

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

commit f4afeb3ffd7f968d2c93839dc5a1f2a744e114ff (tree)
parent 7be6f352e395b1fdc5cc7c3c91067cf4e473d753
Author: Veikka Tuominen <git@vexu.eu>
Date:   Wed, 30 Nov 2022 15:22:34 +0200

AstGen: fix incorrect handling of source cursor with shift builtins

Closes #13714

Diffstat:
Msrc/AstGen.zig | 13++++++++++---
Mtest/behavior.zig | 1+
Atest/behavior/bugs/13714.zig | 4++++
3 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/AstGen.zig b/src/AstGen.zig @@ -8551,11 +8551,18 @@ fn shiftOp( rhs_node: Ast.Node.Index, tag: Zir.Inst.Tag, ) InnerError!Zir.Inst.Ref { + var line = gz.astgen.source_line - gz.decl_line; + var column = gz.astgen.source_column; const lhs = try expr(gz, scope, .{ .rl = .none }, lhs_node); - maybeAdvanceSourceCursorToMainToken(gz, node); - const line = gz.astgen.source_line - gz.decl_line; - const column = gz.astgen.source_column; + switch (gz.astgen.tree.nodes.items(.tag)[node]) { + .shl, .shr => { + maybeAdvanceSourceCursorToMainToken(gz, node); + line = gz.astgen.source_line - gz.decl_line; + column = gz.astgen.source_column; + }, + else => {}, + } const log2_int_type = try gz.addUnNode(.typeof_log2_int_type, lhs, lhs_node); const rhs = try expr(gz, scope, .{ .rl = .{ .ty = log2_int_type }, .ctx = .shift_op }, rhs_node); diff --git a/test/behavior.zig b/test/behavior.zig @@ -117,6 +117,7 @@ test { _ = @import("behavior/bugs/13285.zig"); _ = @import("behavior/bugs/13435.zig"); _ = @import("behavior/bugs/13664.zig"); + _ = @import("behavior/bugs/13714.zig"); _ = @import("behavior/byteswap.zig"); _ = @import("behavior/byval_arg_var.zig"); _ = @import("behavior/call.zig"); diff --git a/test/behavior/bugs/13714.zig b/test/behavior/bugs/13714.zig @@ -0,0 +1,4 @@ +comptime { + var image: [1]u8 = undefined; + _ = @shlExact(@as(u16, image[0]), 8); +}