authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-11-30 15:22:34+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-11-30 17:11:06+02:00
logf4afeb3ffd7f968d2c93839dc5a1f2a744e114ff
tree58dcabde31f00c80a5d81d879cab92e5f1c8ab12
parent7be6f352e395b1fdc5cc7c3c91067cf4e473d753

AstGen: fix incorrect handling of source cursor with shift builtins

Closes #13714

3 files changed, 15 insertions(+), 3 deletions(-)

src/AstGen.zig+10-3
......@@ -8551,11 +8551,18 @@ fn shiftOp(
85518551 rhs_node: Ast.Node.Index,
85528552 tag: Zir.Inst.Tag,
85538553) InnerError!Zir.Inst.Ref {
8554 var line = gz.astgen.source_line - gz.decl_line;
8555 var column = gz.astgen.source_column;
85548556 const lhs = try expr(gz, scope, .{ .rl = .none }, lhs_node);
85558557
8556 maybeAdvanceSourceCursorToMainToken(gz, node);
8557 const line = gz.astgen.source_line - gz.decl_line;
8558 const column = gz.astgen.source_column;
8558 switch (gz.astgen.tree.nodes.items(.tag)[node]) {
8559 .shl, .shr => {
8560 maybeAdvanceSourceCursorToMainToken(gz, node);
8561 line = gz.astgen.source_line - gz.decl_line;
8562 column = gz.astgen.source_column;
8563 },
8564 else => {},
8565 }
85598566
85608567 const log2_int_type = try gz.addUnNode(.typeof_log2_int_type, lhs, lhs_node);
85618568 const rhs = try expr(gz, scope, .{ .rl = .{ .ty = log2_int_type }, .ctx = .shift_op }, rhs_node);
test/behavior.zig+1
......@@ -117,6 +117,7 @@ test {
117117 _ = @import("behavior/bugs/13285.zig");
118118 _ = @import("behavior/bugs/13435.zig");
119119 _ = @import("behavior/bugs/13664.zig");
120 _ = @import("behavior/bugs/13714.zig");
120121 _ = @import("behavior/byteswap.zig");
121122 _ = @import("behavior/byval_arg_var.zig");
122123 _ = @import("behavior/call.zig");
test/behavior/bugs/13714.zig created+4
......@@ -0,0 +1,4 @@
1comptime {
2 var image: [1]u8 = undefined;
3 _ = @shlExact(@as(u16, image[0]), 8);
4}