diff --git a/deps/aro/aro/Attribute.zig b/deps/aro/aro/Attribute.zig index 349270fefc..3a812ab7be 100644 --- a/deps/aro/aro/Attribute.zig +++ b/deps/aro/aro/Attribute.zig @@ -643,7 +643,7 @@ pub const Tag = std.meta.DeclEnum(attributes); pub const Arguments = blk: { const decls = @typeInfo(attributes).Struct.decls; var union_fields: [decls.len]ZigType.UnionField = undefined; - inline for (decls, &union_fields) |decl, *field| { + for (decls, &union_fields) |decl, *field| { field.* = .{ .name = decl.name, .type = @field(attributes, decl.name), diff --git a/lib/std/hash/wyhash.zig b/lib/std/hash/wyhash.zig index 4dda2b9b14..dc1167d79a 100644 --- a/lib/std/hash/wyhash.zig +++ b/lib/std/hash/wyhash.zig @@ -224,7 +224,7 @@ test "test vectors" { test "test vectors at comptime" { comptime { - inline for (vectors) |e| { + for (vectors) |e| { try expectEqual(e.expected, Wyhash.hash(e.seed, e.input)); } } diff --git a/lib/std/meta.zig b/lib/std/meta.zig index eb296fe4b5..5531242e30 100644 --- a/lib/std/meta.zig +++ b/lib/std/meta.zig @@ -29,7 +29,7 @@ pub fn stringToEnum(comptime T: type, str: []const u8) ?T { const kvs = comptime build_kvs: { const EnumKV = struct { []const u8, T }; var kvs_array: [@typeInfo(T).Enum.fields.len]EnumKV = undefined; - inline for (@typeInfo(T).Enum.fields, 0..) |enumField, i| { + for (@typeInfo(T).Enum.fields, 0..) |enumField, i| { kvs_array[i] = .{ enumField.name, @field(T, enumField.name) }; } break :build_kvs kvs_array[0..]; diff --git a/lib/std/meta/trailer_flags.zig b/lib/std/meta/trailer_flags.zig index d028f88066..2b9dcd546e 100644 --- a/lib/std/meta/trailer_flags.zig +++ b/lib/std/meta/trailer_flags.zig @@ -21,7 +21,7 @@ pub fn TrailerFlags(comptime Fields: type) type { pub const ActiveFields = std.enums.EnumFieldStruct(FieldEnum, bool, false); pub const FieldValues = blk: { comptime var fields: [bit_count]Type.StructField = undefined; - inline for (@typeInfo(Fields).Struct.fields, 0..) |struct_field, i| { + for (@typeInfo(Fields).Struct.fields, 0..) |struct_field, i| { fields[i] = Type.StructField{ .name = struct_field.name, .type = ?struct_field.type, diff --git a/lib/std/zig/system/NativeTargetInfo.zig b/lib/std/zig/system/NativeTargetInfo.zig index 5089b74c68..080f18bf0a 100644 --- a/lib/std/zig/system/NativeTargetInfo.zig +++ b/lib/std/zig/system/NativeTargetInfo.zig @@ -280,7 +280,7 @@ fn detectAbiAndDynamicLinker( assert(@intFromEnum(Target.Abi.none) == 0); const fields = std.meta.fields(Target.Abi)[1..]; var array: [fields.len]Target.Abi = undefined; - inline for (fields, 0..) |field, i| { + for (fields, 0..) |field, i| { array[i] = @field(Target.Abi, field.name); } break :blk array; diff --git a/src/AstGen.zig b/src/AstGen.zig index 060e2af62b..4fceb5d84e 100644 --- a/src/AstGen.zig +++ b/src/AstGen.zig @@ -6306,6 +6306,9 @@ fn whileExpr( } const is_inline = while_full.inline_token != null; + if (parent_gz.is_comptime and is_inline) { + return astgen.failTok(while_full.inline_token.?, "redundant inline keyword in comptime scope", .{}); + } const loop_tag: Zir.Inst.Tag = if (is_inline) .block_inline else .loop; const loop_block = try parent_gz.makeBlockInst(loop_tag, node); try parent_gz.instructions.append(astgen.gpa, loop_block); @@ -6580,6 +6583,9 @@ fn forExpr( const need_result_rvalue = @as(LocTag, block_ri.rl) != @as(LocTag, ri.rl); const is_inline = for_full.inline_token != null; + if (parent_gz.is_comptime and is_inline) { + return astgen.failTok(for_full.inline_token.?, "redundant inline keyword in comptime scope", .{}); + } const tree = astgen.tree; const token_tags = tree.tokens.items(.tag); const node_tags = tree.nodes.items(.tag); diff --git a/src/arch/x86/bits.zig b/src/arch/x86/bits.zig index 0bb2cbea30..b69e610d12 100644 --- a/src/arch/x86/bits.zig +++ b/src/arch/x86/bits.zig @@ -26,22 +26,22 @@ pub const Register = enum(u8) { /// x86 has. It is embedded in some instructions, such as the `B8 +rd` move /// instruction, and is used in the R/M byte. pub fn id(self: Register) u3 { - return @truncate(u3, @intFromEnum(self)); + return @truncate(@intFromEnum(self)); } /// Convert from any register to its 32 bit alias. pub fn to32(self: Register) Register { - return @enumFromInt(Register, @as(u8, self.id())); + return @enumFromInt(@as(u8, self.id())); } /// Convert from any register to its 16 bit alias. pub fn to16(self: Register) Register { - return @enumFromInt(Register, @as(u8, self.id()) + 8); + return @enumFromInt(@as(u8, self.id()) + 8); } /// Convert from any register to its 8 bit alias. pub fn to8(self: Register) Register { - return @enumFromInt(Register, @as(u8, self.id()) + 16); + return @enumFromInt(@as(u8, self.id()) + 16); } pub fn dwarfLocOp(reg: Register) u8 { diff --git a/test/cases/compile_errors/redundant_inline.zig b/test/cases/compile_errors/redundant_inline.zig new file mode 100644 index 0000000000..8844ba78a3 --- /dev/null +++ b/test/cases/compile_errors/redundant_inline.zig @@ -0,0 +1,7 @@ +comptime { + inline for ("foo") |_| {} +} + +// error +// +// :2:5: error: redundant inline keyword in comptime scope diff --git a/test/src/Cases.zig b/test/src/Cases.zig index d69c389bc2..262f8e9ac7 100644 --- a/test/src/Cases.zig +++ b/test/src/Cases.zig @@ -908,11 +908,11 @@ const TestManifestConfigDefaults = struct { // TODO we should also specify ABIs explicitly as the backends are // getting more and more complete // Linux - inline for (&[_][]const u8{ "x86_64", "arm", "aarch64" }) |arch| { + for (&[_][]const u8{ "x86_64", "arm", "aarch64" }) |arch| { defaults = defaults ++ arch ++ "-linux" ++ ","; } // macOS - inline for (&[_][]const u8{ "x86_64", "aarch64" }) |arch| { + for (&[_][]const u8{ "x86_64", "aarch64" }) |arch| { defaults = defaults ++ arch ++ "-macos" ++ ","; } // Windows