authorgravatar for wrongnull@gmail.comBogdan Romanyuk <wrongnull@gmail.com> 2024-01-10 04:09:39+03:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2024-01-09 20:09:39-05:00
log4a1a5ee47b60eb697ed814d7b1eb6f5c45d65f5a
tree05889bfc9bd5be0f10d2fcc3ee343c8c73de5354
parent157cdaee0e508ae0411d6f785456e4273f4fa862
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

AstGen: add error for redundant comptime var in comptime scope (#18242)


4 files changed, 11 insertions(+), 2 deletions(-)

lib/std/json/scanner_test.zig+1-1
...@@ -200,7 +200,7 @@ const number_test_stems = .{...@@ -200,7 +200,7 @@ const number_test_stems = .{
200 .{ "", "e0", "E0", "e+0", "e-0", "e9999999999999999999999999999" },200 .{ "", "e0", "E0", "e+0", "e-0", "e9999999999999999999999999999" },
201};201};
202const number_test_items = blk: {202const number_test_items = blk: {
203 comptime var ret: []const []const u8 = &[_][]const u8{};203 var ret: []const []const u8 = &[_][]const u8{};
204 for (number_test_stems[0]) |s0| {204 for (number_test_stems[0]) |s0| {
205 for (number_test_stems[1]) |s1| {205 for (number_test_stems[1]) |s1| {
206 for (number_test_stems[2]) |s2| {206 for (number_test_stems[2]) |s2| {
lib/std/meta/trailer_flags.zig+1-1
...@@ -20,7 +20,7 @@ pub fn TrailerFlags(comptime Fields: type) type {...@@ -20,7 +20,7 @@ pub fn TrailerFlags(comptime Fields: type) type {
2020
21 pub const ActiveFields = std.enums.EnumFieldStruct(FieldEnum, bool, false);21 pub const ActiveFields = std.enums.EnumFieldStruct(FieldEnum, bool, false);
22 pub const FieldValues = blk: {22 pub const FieldValues = blk: {
23 comptime var fields: [bit_count]Type.StructField = undefined;23 var fields: [bit_count]Type.StructField = undefined;
24 for (@typeInfo(Fields).Struct.fields, 0..) |struct_field, i| {24 for (@typeInfo(Fields).Struct.fields, 0..) |struct_field, i| {
25 fields[i] = Type.StructField{25 fields[i] = Type.StructField{
26 .name = struct_field.name,26 .name = struct_field.name,
src/AstGen.zig+2
...@@ -3235,6 +3235,8 @@ fn varDecl(...@@ -3235,6 +3235,8 @@ fn varDecl(
3235 return &sub_scope.base;3235 return &sub_scope.base;
3236 },3236 },
3237 .keyword_var => {3237 .keyword_var => {
3238 if (var_decl.comptime_token != null and gz.is_comptime)
3239 return astgen.failTok(var_decl.comptime_token.?, "'comptime var' is redundant in comptime scope", .{});
3238 const is_comptime = var_decl.comptime_token != null or gz.is_comptime;3240 const is_comptime = var_decl.comptime_token != null or gz.is_comptime;
3239 var resolve_inferred_alloc: Zir.Inst.Ref = .none;3241 var resolve_inferred_alloc: Zir.Inst.Ref = .none;
3240 const alloc: Zir.Inst.Ref, const result_info: ResultInfo = if (var_decl.ast.type_node != 0) a: {3242 const alloc: Zir.Inst.Ref, const result_info: ResultInfo = if (var_decl.ast.type_node != 0) a: {
test/cases/compile_errors/redundant_comptime_var.zig created+7
...@@ -0,0 +1,7 @@
1comptime {
2 comptime var x = undefined;
3}
4
5// error
6//
7// :2:5: error: 'comptime var' is redundant in comptime scope