authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-10-08 10:49:58+03:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-10-08 16:58:26+03:00
log1500b9ddc3579a0581eb97b71da9baf30fb9149c
treeb18d2781bb9a46d06a4a0f9fc0f2b040d4cdbf8f
parentdffce980451379e0a829e130cd09e2c934b75e28

Sema: restore sema.src after inline call

Closes #13099

2 files changed, 27 insertions(+), 0 deletions(-)

src/Sema.zig+1
...@@ -6048,6 +6048,7 @@ fn analyzeCall(...@@ -6048,6 +6048,7 @@ fn analyzeCall(
6048 const parent_inst_map = sema.inst_map;6048 const parent_inst_map = sema.inst_map;
6049 sema.inst_map = .{};6049 sema.inst_map = .{};
6050 defer {6050 defer {
6051 sema.src = call_src;
6051 sema.inst_map.deinit(gpa);6052 sema.inst_map.deinit(gpa);
6052 sema.inst_map = parent_inst_map;6053 sema.inst_map = parent_inst_map;
6053 }6054 }
test/cases/compile_errors/sema_src_used_after_inline_call.zig created+26
...@@ -0,0 +1,26 @@
1inline fn bit_count(value: i32) i32 {
2 var i = value;
3 // Algo from : http://aggregate.ee.engr.uky.edu/MAGIC/#Population%20Count%20(ones%20Count)
4 i -= ((i >> 1) & 0x55555555);
5 i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
6 i = (((i >> 4) + i) & 0x0F0F0F0F);
7 i += (i >> 8);
8 i += (i >> 16);
9 return (i & 0x0000003F);
10}
11
12inline fn number_of_trailing_zeros(i: i32) u32 {
13 return @as(u32, bit_count((i & -i) - 1));
14}
15
16export fn entry() void {
17 _ = number_of_trailing_zeros(0);
18}
19
20// error
21// backend=stage2
22// target=native
23//
24// :13:30: error: expected type 'u32', found 'i32'
25// :13:30: note: unsigned 32-bit int cannot represent all possible signed 32-bit values
26// :17:33: note: called from here