Skip to content

Commit ef514df

Browse files
committed
add tests for fixed stage1 bugs
Closes ziglang#1957 Closes ziglang#1994 Closes ziglang#2140 Closes ziglang#2746 Closes ziglang#2802 Closes ziglang#2855 Closes ziglang#2895 Closes ziglang#2981 Closes ziglang#3054 Closes ziglang#3158 Closes ziglang#3234 Closes ziglang#3259 Closes ziglang#3371 Closes ziglang#3376 Closes ziglang#3387 Closes ziglang#3529 Closes ziglang#3653 Closes ziglang#3750 Closes ziglang#3778 Closes ziglang#3882 Closes ziglang#3915 Closes ziglang#3929 Closes ziglang#3961 Closes ziglang#3988 Closes ziglang#4123 Closes ziglang#7448
1 parent 2b5bd50 commit ef514df

3 files changed

+50
-0
lines changed

compile_errors/control_flow_uses_comptime_var_at_runtime.zig

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,35 @@ export fn foo() void {
66
}
77

88
fn bar() void { }
9+
export fn baz() void {
10+
comptime var idx: u32 = 0;
11+
while (idx < 1) {
12+
const not_null: ?u32 = 1;
13+
_ = not_null orelse return;
14+
idx += 1;
15+
}
16+
}
17+
18+
export fn qux() void {
19+
comptime var i = 0;
20+
while (i < 3) : (i += 1) {
21+
const T = switch (i) {
22+
0 => f32,
23+
1 => i8,
24+
2 => bool,
25+
else => unreachable,
26+
};
27+
_ = T;
28+
}
29+
}
930

1031
// error
1132
// backend=stage2
1233
// target=native
1334
//
1435
// :3:24: error: cannot store to comptime variable in non-inline loop
1536
// :3:5: note: non-inline loop here
37+
// :14:13: error: cannot store to comptime variable in non-inline loop
38+
// :11:5: note: non-inline loop here
39+
// :20:24: error: cannot store to comptime variable in non-inline loop
40+
// :20:5: note: non-inline loop here

compile_errors/reference_to_const_data.zig

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ export fn qux() void {
1818
var ptr = &S{.x=1,.y=2};
1919
ptr.x = 2;
2020
}
21+
export fn quux() void {
22+
var x = &@returnAddress();
23+
x.* = 6;
24+
}
2125

2226
// error
2327
// backend=stage2
@@ -27,3 +31,4 @@ export fn qux() void {
2731
// :7:8: error: cannot assign to constant
2832
// :11:8: error: cannot assign to constant
2933
// :19:8: error: cannot assign to constant
34+
// :23:6: error: cannot assign to constant
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
fn A(comptime T: type) type {
2+
return struct { a: T };
3+
}
4+
fn B(comptime T: type) type {
5+
return struct { b: T };
6+
}
7+
fn foo() A(u32) {
8+
return B(u32){ .b = 1 };
9+
}
10+
export fn entry() void {
11+
_ = foo();
12+
}
13+
14+
// error
15+
// backend=stage2
16+
// target=native
17+
//
18+
// :8:18: error: expected type 'tmp.A(u32)', found 'tmp.B(u32)'
19+
// :5:12: note: struct declared here
20+
// :2:12: note: struct declared here

0 commit comments

Comments
 (0)