| ... | ... | @@ -38,20 +38,39 @@ pub fn addCases(cases: *tests.CompileErrorContext) void { |
| 38 | 38 | "tmp.zig:2:20: error: TypeInfo.Enum.tag_type must be an integer type, not 'bool'", |
| 39 | 39 | }); |
| 40 | 40 | |
| 41 | | cases.add("slice sentinel mismatch", |
| 42 | | \\export fn entry() void { |
| 43 | | \\ const x = @import("std").meta.Vector(3, f32){ 25, 75, 5, 0 }; |
| 44 | | \\} |
| 45 | | , &[_][]const u8{ |
| 46 | | "tmp.zig:2:62: error: index 3 outside vector of size 3", |
| 47 | | }); |
| 48 | | |
| 49 | | cases.add("slice sentinel mismatch", |
| 41 | cases.add("@Type for tagged union with extra enum field", |
| 42 | \\const TypeInfo = @import("builtin").TypeInfo; |
| 43 | \\const Tag = @Type(.{ |
| 44 | \\ .Enum = .{ |
| 45 | \\ .layout = .Auto, |
| 46 | \\ .tag_type = u2, |
| 47 | \\ .fields = &[_]TypeInfo.EnumField{ |
| 48 | \\ .{ .name = "signed", .value = 0 }, |
| 49 | \\ .{ .name = "unsigned", .value = 1 }, |
| 50 | \\ .{ .name = "arst", .value = 2 }, |
| 51 | \\ }, |
| 52 | \\ .decls = &[_]TypeInfo.Declaration{}, |
| 53 | \\ .is_exhaustive = true, |
| 54 | \\ }, |
| 55 | \\}); |
| 56 | \\const Tagged = @Type(.{ |
| 57 | \\ .Union = .{ |
| 58 | \\ .layout = .Auto, |
| 59 | \\ .tag_type = Tag, |
| 60 | \\ .fields = &[_]TypeInfo.UnionField{ |
| 61 | \\ .{ .name = "signed", .field_type = i32, .alignment = @alignOf(i32) }, |
| 62 | \\ .{ .name = "unsigned", .field_type = u32, .alignment = @alignOf(u32) }, |
| 63 | \\ }, |
| 64 | \\ .decls = &[_]TypeInfo.Declaration{}, |
| 65 | \\ }, |
| 66 | \\}); |
| 50 | 67 | \\export fn entry() void { |
| 51 | | \\ const y: [:1]const u8 = &[_:2]u8{ 1, 2 }; |
| 68 | \\ var tagged = Tagged{ .signed = -1 }; |
| 69 | \\ tagged = .{ .unsigned = 1 }; |
| 52 | 70 | \\} |
| 53 | 71 | , &[_][]const u8{ |
| 54 | | "tmp.zig:2:37: error: expected type '[:1]const u8', found '*const [2:2]u8'", |
| 72 | "tmp.zig:15:23: error: enum field missing: 'arst'", |
| 73 | "tmp.zig:27:24: note: referenced here", |
| 55 | 74 | }); |
| 56 | 75 | |
| 57 | 76 | cases.add("@Type for union with opaque field", |
| ... | ... | @@ -61,7 +80,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void { |
| 61 | 80 | \\ .layout = .Auto, |
| 62 | 81 | \\ .tag_type = null, |
| 63 | 82 | \\ .fields = &[_]TypeInfo.UnionField{ |
| 64 | | \\ .{ .name = "foo", .field_type = @Type(.Opaque) }, |
| 83 | \\ .{ .name = "foo", .field_type = @Type(.Opaque), .alignment = 1 }, |
| 65 | 84 | \\ }, |
| 66 | 85 | \\ .decls = &[_]TypeInfo.Declaration{}, |
| 67 | 86 | \\ }, |
| ... | ... | @@ -74,6 +93,22 @@ pub fn addCases(cases: *tests.CompileErrorContext) void { |
| 74 | 93 | "tmp.zig:13:17: note: referenced here", |
| 75 | 94 | }); |
| 76 | 95 | |
| 96 | cases.add("slice sentinel mismatch", |
| 97 | \\export fn entry() void { |
| 98 | \\ const x = @import("std").meta.Vector(3, f32){ 25, 75, 5, 0 }; |
| 99 | \\} |
| 100 | , &[_][]const u8{ |
| 101 | "tmp.zig:2:62: error: index 3 outside vector of size 3", |
| 102 | }); |
| 103 | |
| 104 | cases.add("slice sentinel mismatch", |
| 105 | \\export fn entry() void { |
| 106 | \\ const y: [:1]const u8 = &[_:2]u8{ 1, 2 }; |
| 107 | \\} |
| 108 | , &[_][]const u8{ |
| 109 | "tmp.zig:2:37: error: expected type '[:1]const u8', found '*const [2:2]u8'", |
| 110 | }); |
| 111 | |
| 77 | 112 | cases.add("@Type for union with zero fields", |
| 78 | 113 | \\const TypeInfo = @import("builtin").TypeInfo; |
| 79 | 114 | \\const Untagged = @Type(.{ |
| ... | ... | @@ -130,9 +165,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void { |
| 130 | 165 | \\ .layout = .Auto, |
| 131 | 166 | \\ .tag_type = Tag, |
| 132 | 167 | \\ .fields = &[_]TypeInfo.UnionField{ |
| 133 | | \\ .{ .name = "signed", .field_type = i32 }, |
| 134 | | \\ .{ .name = "unsigned", .field_type = u32 }, |
| 135 | | \\ .{ .name = "arst", .field_type = f32 }, |
| 168 | \\ .{ .name = "signed", .field_type = i32, .alignment = @alignOf(i32) }, |
| 169 | \\ .{ .name = "unsigned", .field_type = u32, .alignment = @alignOf(u32) }, |
| 170 | \\ .{ .name = "arst", .field_type = f32, .alignment = @alignOf(f32) }, |
| 136 | 171 | \\ }, |
| 137 | 172 | \\ .decls = &[_]TypeInfo.Declaration{}, |
| 138 | 173 | \\ }, |
| ... | ... | @@ -147,42 +182,6 @@ pub fn addCases(cases: *tests.CompileErrorContext) void { |
| 147 | 182 | "tmp.zig:27:24: note: referenced here", |
| 148 | 183 | }); |
| 149 | 184 | |
| 150 | | cases.add("@Type for tagged union with extra enum field", |
| 151 | | \\const TypeInfo = @import("builtin").TypeInfo; |
| 152 | | \\const Tag = @Type(.{ |
| 153 | | \\ .Enum = .{ |
| 154 | | \\ .layout = .Auto, |
| 155 | | \\ .tag_type = u2, |
| 156 | | \\ .fields = &[_]TypeInfo.EnumField{ |
| 157 | | \\ .{ .name = "signed", .value = 0 }, |
| 158 | | \\ .{ .name = "unsigned", .value = 1 }, |
| 159 | | \\ .{ .name = "arst", .field_type = 2 }, |
| 160 | | \\ }, |
| 161 | | \\ .decls = &[_]TypeInfo.Declaration{}, |
| 162 | | \\ .is_exhaustive = true, |
| 163 | | \\ }, |
| 164 | | \\}); |
| 165 | | \\const Tagged = @Type(.{ |
| 166 | | \\ .Union = .{ |
| 167 | | \\ .layout = .Auto, |
| 168 | | \\ .tag_type = Tag, |
| 169 | | \\ .fields = &[_]TypeInfo.UnionField{ |
| 170 | | \\ .{ .name = "signed", .field_type = i32 }, |
| 171 | | \\ .{ .name = "unsigned", .field_type = u32 }, |
| 172 | | \\ }, |
| 173 | | \\ .decls = &[_]TypeInfo.Declaration{}, |
| 174 | | \\ }, |
| 175 | | \\}); |
| 176 | | \\export fn entry() void { |
| 177 | | \\ var tagged = Tagged{ .signed = -1 }; |
| 178 | | \\ tagged = .{ .unsigned = 1 }; |
| 179 | | \\} |
| 180 | | , &[_][]const u8{ |
| 181 | | "tmp.zig:9:32: error: no member named 'field_type' in struct 'std.builtin.EnumField'", |
| 182 | | "tmp.zig:18:21: note: referenced here", |
| 183 | | "tmp.zig:27:18: note: referenced here", |
| 184 | | }); |
| 185 | | |
| 186 | 185 | cases.add("@Type with undefined", |
| 187 | 186 | \\comptime { |
| 188 | 187 | \\ _ = @Type(.{ .Array = .{ .len = 0, .child = u8, .sentinel = undefined } }); |
| ... | ... | @@ -7592,7 +7591,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void { |
| 7592 | 7591 | }); |
| 7593 | 7592 | |
| 7594 | 7593 | cases.add( // fixed bug #2032 |
| 7595 | | "compile diagnostic string for top level decl type", |
| 7594 | "compile diagnostic string for top level decl type", |
| 7596 | 7595 | \\export fn entry() void { |
| 7597 | 7596 | \\ var foo: u32 = @This(){}; |
| 7598 | 7597 | \\} |