diff --git a/lib/std/crypto/benchmark.zig b/lib/std/crypto/benchmark.zig index 9fd3c425444f8376f188ecd5f3c96c0a69b8d6bf..50a031af8411724e4e3fef1be913c42ae8ed1dd4 100644 --- a/lib/std/crypto/benchmark.zig +++ b/lib/std/crypto/benchmark.zig @@ -297,8 +297,8 @@ pub fn benchmarkAes8(comptime Aes: anytype, comptime count: comptime_int) !u64 { } const CryptoPwhash = struct { - hashFn: anytype, - params: anytype, + hashFn: @compileError("anytype fields are removed from the language"), + params: @compileError("anytype fields are removed from the language"), name: []const u8, }; const bcrypt_params = crypto.pwhash.bcrypt.Params{ .rounds_log = 12 }; diff --git a/lib/std/json.zig b/lib/std/json.zig index 4009bf9c7f62f27a0a7209727a4079ca3eae770a..ec3544364f44a738e40fdbed15528be06556147f 100644 --- a/lib/std/json.zig +++ b/lib/std/json.zig @@ -1791,8 +1791,9 @@ fn parseInternal( } inline for (structInfo.fields) |field, i| { if (!fields_seen[i]) { - if (field.default_value) |default| { + if (field.default_value) |default_ptr| { if (!field.is_comptime) { + const default = @ptrCast(*const field.field_type, default_ptr).*; @field(r, field.name) = default; } } else { diff --git a/lib/std/zig/Ast.zig b/lib/std/zig/Ast.zig index f7a18d2c04abaacde2756346576bb4a1c34042f3..17da4f5315061e6fe196fa5e2904ea3e1a2d4bf1 100644 --- a/lib/std/zig/Ast.zig +++ b/lib/std/zig/Ast.zig @@ -366,7 +366,6 @@ pub fn firstToken(tree: Ast, node: Node.Index) TokenIndex { .builtin_call, .builtin_call_comma, .error_set_decl, - .@"anytype", .@"comptime", .@"nosuspend", .asm_simple, @@ -729,7 +728,6 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex { .error_value, => return datas[n].rhs + end_offset, - .@"anytype", .anyframe_literal, .char_literal, .integer_literal, @@ -2935,9 +2933,6 @@ pub const Node = struct { /// main_token is the field name identifier. /// lastToken() does not include the possible trailing comma. container_field, - /// `anytype`. both lhs and rhs unused. - /// Used by `ContainerField`. - @"anytype", /// `comptime lhs`. rhs unused. @"comptime", /// `nosuspend lhs`. rhs unused. diff --git a/lib/std/zig/parse.zig b/lib/std/zig/parse.zig index 28219fa085282b8ab615636e467b2da464aca531..a70d0309e3b05f0b97f6c04630ab2210672e5973 100644 --- a/lib/std/zig/parse.zig +++ b/lib/std/zig/parse.zig @@ -786,19 +786,8 @@ const Parser = struct { var align_expr: Node.Index = 0; var type_expr: Node.Index = 0; if (p.eatToken(.colon)) |_| { - if (p.eatToken(.keyword_anytype)) |anytype_tok| { - type_expr = try p.addNode(.{ - .tag = .@"anytype", - .main_token = anytype_tok, - .data = .{ - .lhs = undefined, - .rhs = undefined, - }, - }); - } else { - type_expr = try p.expectTypeExpr(); - align_expr = try p.parseByteAlign(); - } + type_expr = try p.expectTypeExpr(); + align_expr = try p.parseByteAlign(); } const value_expr: Node.Index = if (p.eatToken(.equal) == null) 0 else try p.expectExpr(); diff --git a/lib/std/zig/render.zig b/lib/std/zig/render.zig index de33f380f8c14ca417d25877ba9d210b88fee25a..f17ee1e097491b9487674ac337cf8a57cf33bf7a 100644 --- a/lib/std/zig/render.zig +++ b/lib/std/zig/render.zig @@ -229,8 +229,6 @@ fn renderExpression(gpa: Allocator, ais: *Ais, tree: Ast, node: Ast.Node.Index, return renderToken(ais, tree, main_tokens[node] + 2, space); }, - .@"anytype" => return renderToken(ais, tree, main_tokens[node], space), - .block_two, .block_two_semicolon, => { diff --git a/src/AstGen.zig b/src/AstGen.zig index 4fddc0a3e26c9cf9c19bff3da590b71c333d5f39..59878f940c35f3bf29f0001f130504646f45f78c 100644 --- a/src/AstGen.zig +++ b/src/AstGen.zig @@ -468,7 +468,6 @@ fn lvalExpr(gz: *GenZir, scope: *Scope, node: Ast.Node.Index) InnerError!Zir.Ins .for_simple, .@"suspend", .@"continue", - .@"anytype", .fn_proto_simple, .fn_proto_multi, .fn_proto_one, @@ -558,8 +557,6 @@ fn expr(gz: *GenZir, scope: *Scope, rl: ResultLoc, node: Ast.Node.Index) InnerEr .asm_output => unreachable, // Handled in `asmExpr`. .asm_input => unreachable, // Handled in `asmExpr`. - .@"anytype" => unreachable, // Handled in `containerDecl`. - .assign => { try assign(gz, scope, node); return rvalue(gz, rl, .void_value, node); @@ -3826,7 +3823,6 @@ fn structDeclInner( const astgen = gz.astgen; const gpa = astgen.gpa; const tree = astgen.tree; - const node_tags = tree.nodes.items(.tag); var namespace: Scope.Namespace = .{ .parent = scope, @@ -3875,10 +3871,7 @@ fn structDeclInner( return astgen.failTok(member.ast.name_token, "struct field missing type", .{}); } - const field_type: Zir.Inst.Ref = if (node_tags[member.ast.type_expr] == .@"anytype") - .none - else - try typeExpr(&block_scope, &namespace.base, member.ast.type_expr); + const field_type = try typeExpr(&block_scope, &namespace.base, member.ast.type_expr); wip_members.appendToField(@enumToInt(field_type)); const doc_comment_index = try astgen.docCommentAsString(member.firstToken()); @@ -3951,8 +3944,6 @@ fn unionDeclInner( const astgen = gz.astgen; const gpa = astgen.gpa; - const tree = astgen.tree; - const node_tags = tree.nodes.items(.tag); var namespace: Scope.Namespace = .{ .parent = scope, @@ -4013,10 +4004,7 @@ fn unionDeclInner( wip_members.nextField(bits_per_field, .{ have_type, have_align, have_value, unused }); if (have_type) { - const field_type: Zir.Inst.Ref = if (node_tags[member.ast.type_expr] == .@"anytype") - .none - else - try typeExpr(&block_scope, &namespace.base, member.ast.type_expr); + const field_type = try typeExpr(&block_scope, &namespace.base, member.ast.type_expr); wip_members.appendToField(@enumToInt(field_type)); } else if (arg_inst == .none and !have_auto_enum) { return astgen.failNode(member_node, "union field missing type", .{}); @@ -7791,7 +7779,6 @@ fn nodeMayNeedMemoryLocation(tree: *const Ast, start_node: Ast.Node.Index, have_ .ptr_type, .ptr_type_bit_range, .@"suspend", - .@"anytype", .fn_proto_simple, .fn_proto_multi, .fn_proto_one, @@ -8052,7 +8039,6 @@ fn nodeMayEvalToError(tree: *const Ast, start_node: Ast.Node.Index) BuiltinFn.Ev .ptr_type, .ptr_type_bit_range, .@"suspend", - .@"anytype", .fn_proto_simple, .fn_proto_multi, .fn_proto_one, @@ -8232,7 +8218,6 @@ fn nodeImpliesMoreThanOnePossibleValue(tree: *const Ast, start_node: Ast.Node.In .@"resume", .array_type, .@"suspend", - .@"anytype", .fn_decl, .anyframe_literal, .integer_literal, @@ -8474,7 +8459,6 @@ fn nodeImpliesComptimeOnly(tree: *const Ast, start_node: Ast.Node.Index) bool { .@"resume", .array_type, .@"suspend", - .@"anytype", .fn_decl, .anyframe_literal, .integer_literal, diff --git a/src/stage1/ir.cpp b/src/stage1/ir.cpp index 89f7de9d4d90632268991060ae95a12c01294d2d..5694db22ee09d2159970ccf27f40c3763a11a156 100644 --- a/src/stage1/ir.cpp +++ b/src/stage1/ir.cpp @@ -19048,6 +19048,10 @@ static ZigType *type_info_to_type(IrAnalyze *ira, Scope *scope, AstNode *source_ return ira->codegen->invalid_inst_gen->value->type; } + if ((err = type_resolve(ira->codegen, elem_type, ResolveStatusAlignmentKnown))) { + return ira->codegen->invalid_inst_gen->value->type; + } + ZigType *ptr_type = get_pointer_to_type_extra2(ira->codegen, elem_type, is_const, diff --git a/test/behavior/struct_llvm.zig b/test/behavior/struct_llvm.zig index 5aaefc8b38c9d87368b2369048892722233c0912..eef7b164877c501331dbc25ec9779e7d2047691b 100644 --- a/test/behavior/struct_llvm.zig +++ b/test/behavior/struct_llvm.zig @@ -618,21 +618,6 @@ test "anonymous struct literal assigned to variable" { try expect(vec.@"2" == 99); } -test "struct with var field" { - if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO - - const Point = struct { - x: anytype, - y: anytype, - }; - const pt = Point{ - .x = 1, - .y = 2, - }; - try expect(pt.x == 1); - try expect(pt.y == 2); -} - test "comptime struct field" { if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO diff --git a/test/behavior/type_info.zig b/test/behavior/type_info.zig index ad300dac4ed1559dae3905e2df1cd818515a4d29..14adc4dad5c67ce89f9b7627b7a4f63b490c610e 100644 --- a/test/behavior/type_info.zig +++ b/test/behavior/type_info.zig @@ -436,13 +436,6 @@ test "@typeInfo does not force declarations into existence" { comptime try expect(@typeInfo(S).Struct.fields.len == 1); } -test "default value for a anytype field" { - if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO - - const S = struct { x: anytype }; - try expect(@typeInfo(S).Struct.fields[0].default_value == null); -} - fn add(a: i32, b: i32) i32 { return a + b; } diff --git a/test/behavior/union_stage1.zig b/test/behavior/union_stage1.zig index 2eefa4670512bb34e399204d65ac15eea7540eec..b71a7ac25d29feccbe9e34450381b9e2db991803 100644 --- a/test/behavior/union_stage1.zig +++ b/test/behavior/union_stage1.zig @@ -419,8 +419,3 @@ test "union enum type gets a separate scope" { try S.doTheTest(); } - -test "anytype union field: issue #9233" { - const Quux = union(enum) { bar: anytype }; - _ = Quux; -} diff --git a/test/compile_errors.zig b/test/compile_errors.zig index 88a596a880b188883f99b45d265947d7d50250d4..252ec1496b70a3d8ddafecc6d05de1aaceff7642 100644 --- a/test/compile_errors.zig +++ b/test/compile_errors.zig @@ -4207,16 +4207,6 @@ pub fn addCases(ctx: *TestContext) !void { "tmp.zig:5:17: error: expected type 'void', found 'error{ShouldBeCompileError}'", }); - ctx.objErrStage1("var makes structs required to be comptime known", - \\export fn entry() void { - \\ const S = struct{v: anytype}; - \\ var s = S{.v=@as(i32, 10)}; - \\ _ = s; - \\} - , &[_][]const u8{ - "tmp.zig:3:4: error: variable of type 'S' must be const or comptime", - }); - ctx.objErrStage1("@ptrCast discards const qualifier", \\export fn entry() void { \\ const x: i32 = 1234;