diff options
| author | Veikka Tuominen <git@vexu.eu> | 2023-01-18 12:56:48 +0200 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2023-01-22 00:12:36 +0200 |
| commit | d284c00fda45b943f4ed5244ae1cb9e7f90f481f (patch) | |
| tree | bfec199eade94e25e173b0150b565bd1123f7764 /test | |
| parent | 7f635ae7bdf63da19d09763c7fdbdc61fa035282 (diff) | |
| download | zig-d284c00fda45b943f4ed5244ae1cb9e7f90f481f.tar.gz zig-d284c00fda45b943f4ed5244ae1cb9e7f90f481f.zip | |
Sema: handle lazy values in more places
* resolve lazy values in anon structs being passed to anytype params
* use `resolveMaybeUndefValIntable` where appropriate
Closes #14356
Diffstat (limited to 'test')
| -rw-r--r-- | test/behavior.zig | 1 | ||||
| -rw-r--r-- | test/behavior/bugs/12488.zig | 13 | ||||
| -rw-r--r-- | test/behavior/fn.zig | 23 |
3 files changed, 23 insertions, 14 deletions
diff --git a/test/behavior.zig b/test/behavior.zig index 51a261cc5c..4f8ad67203 100644 --- a/test/behavior.zig +++ b/test/behavior.zig @@ -106,7 +106,6 @@ test { _ = @import("behavior/bugs/12430.zig"); _ = @import("behavior/bugs/12450.zig"); _ = @import("behavior/bugs/12486.zig"); - _ = @import("behavior/bugs/12488.zig"); _ = @import("behavior/bugs/12498.zig"); _ = @import("behavior/bugs/12551.zig"); _ = @import("behavior/bugs/12571.zig"); diff --git a/test/behavior/bugs/12488.zig b/test/behavior/bugs/12488.zig deleted file mode 100644 index b05197b24f..0000000000 --- a/test/behavior/bugs/12488.zig +++ /dev/null @@ -1,13 +0,0 @@ -const expect = @import("std").testing.expect; - -const A = struct { - a: u32, -}; - -fn foo(comptime a: anytype) !void { - try expect(a[0][0] == @sizeOf(A)); -} - -test { - try foo(.{[_]usize{@sizeOf(A)}}); -} diff --git a/test/behavior/fn.zig b/test/behavior/fn.zig index 8dca94a656..d5f959e507 100644 --- a/test/behavior/fn.zig +++ b/test/behavior/fn.zig @@ -517,3 +517,26 @@ test "peer type resolution of inferred error set with non-void payload" { }; try expect(try S.openDataFile(.read) == 1); } + +test "lazy values passed to anytype parameter" { + const A = struct { + a: u32, + fn foo(comptime a: anytype) !void { + try expect(a[0][0] == @sizeOf(@This())); + } + }; + try A.foo(.{[_]usize{@sizeOf(A)}}); + + const B = struct { + fn foo(comptime a: anytype) !void { + try expect(a.x == 0); + } + }; + try B.foo(.{ .x = @sizeOf(B) }); + + const C = struct {}; + try expect(@truncate(u32, @sizeOf(C)) == 0); + + const D = struct {}; + try expect(@sizeOf(D) << 1 == 0); +} |
