| author | |
| committer | |
| log | a2c6ecd6dc0bdbe2396be9b055852324f16d34c9 |
| tree | 4931a3dcef12430f8ef7788db233e74559baea46 |
| parent | 4414f9c46e778a58c6d08df3c6ab604449abf38d |
| parent | d70955b0df92fdd0fdf3680f7f297a4cc676ee5a |
| signature |
x86_64: fix various backend crashes62 files changed, 135 insertions(+), 245 deletions(-)
src/arch/x86_64/CodeGen.zig+134-102| ... | ... | @@ -184,8 +184,7 @@ const Branch = struct { |
| 184 | 184 | _ = options; |
| 185 | 185 | comptime assert(unused_format_string.len == 0); |
| 186 | 186 | try writer.writeAll("Branch {\n"); |
| 187 | for (ctx.insts, 0..) |inst, i| { | |
| 188 | const mcv = ctx.mcvs[i]; | |
| 187 | for (ctx.insts, ctx.mcvs) |inst, mcv| { | |
| 189 | 188 | try writer.print(" %{d} => {}\n", .{ inst, mcv }); |
| 190 | 189 | } |
| 191 | 190 | try writer.writeAll("}"); |
| ... | ... | @@ -208,7 +207,7 @@ const Branch = struct { |
| 208 | 207 | }; |
| 209 | 208 | |
| 210 | 209 | const StackAllocation = struct { |
| 211 | inst: Air.Inst.Index, | |
| 210 | inst: ?Air.Inst.Index, | |
| 212 | 211 | /// TODO do we need size? should be determined by inst.ty.abiSize(self.target.*) |
| 213 | 212 | size: u32, |
| 214 | 213 | }; |
| ... | ... | @@ -1038,9 +1037,9 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { |
| 1038 | 1037 | fn processDeath(self: *Self, inst: Air.Inst.Index) void { |
| 1039 | 1038 | const air_tags = self.air.instructions.items(.tag); |
| 1040 | 1039 | if (air_tags[inst] == .constant) return; // Constants are immortal. |
| 1041 | log.debug("%{d} => {}", .{ inst, MCValue{ .dead = {} } }); | |
| 1040 | const prev_value = self.getResolvedInstValue(inst) orelse return; | |
| 1041 | log.debug("%{d} => {}", .{ inst, MCValue.dead }); | |
| 1042 | 1042 | // When editing this function, note that the logic must synchronize with `reuseOperand`. |
| 1043 | const prev_value = self.getResolvedInstValue(inst); | |
| 1044 | 1043 | const branch = &self.branch_stack.items[self.branch_stack.items.len - 1]; |
| 1045 | 1044 | branch.inst_table.putAssumeCapacity(inst, .dead); |
| 1046 | 1045 | switch (prev_value) { |
| ... | ... | @@ -1109,7 +1108,7 @@ fn ensureProcessDeathCapacity(self: *Self, additional_count: usize) !void { |
| 1109 | 1108 | try table.ensureUnusedCapacity(self.gpa, additional_count); |
| 1110 | 1109 | } |
| 1111 | 1110 | |
| 1112 | fn allocMem(self: *Self, inst: Air.Inst.Index, abi_size: u32, abi_align: u32) !u32 { | |
| 1111 | fn allocMem(self: *Self, inst: ?Air.Inst.Index, abi_size: u32, abi_align: u32) !u32 { | |
| 1113 | 1112 | if (abi_align > self.stack_align) |
| 1114 | 1113 | self.stack_align = abi_align; |
| 1115 | 1114 | // TODO find a free slot instead of always appending |
| ... | ... | @@ -1142,7 +1141,14 @@ fn allocMemPtr(self: *Self, inst: Air.Inst.Index) !u32 { |
| 1142 | 1141 | } |
| 1143 | 1142 | |
| 1144 | 1143 | fn allocRegOrMem(self: *Self, inst: Air.Inst.Index, reg_ok: bool) !MCValue { |
| 1145 | const elem_ty = self.air.typeOfIndex(inst); | |
| 1144 | return self.allocRegOrMemAdvanced(self.air.typeOfIndex(inst), inst, reg_ok); | |
| 1145 | } | |
| 1146 | ||
| 1147 | fn allocTempRegOrMem(self: *Self, elem_ty: Type, reg_ok: bool) !MCValue { | |
| 1148 | return self.allocRegOrMemAdvanced(elem_ty, null, reg_ok); | |
| 1149 | } | |
| 1150 | ||
| 1151 | fn allocRegOrMemAdvanced(self: *Self, elem_ty: Type, inst: ?Air.Inst.Index, reg_ok: bool) !MCValue { | |
| 1146 | 1152 | const abi_size = math.cast(u32, elem_ty.abiSize(self.target.*)) orelse { |
| 1147 | 1153 | const mod = self.bin_file.options.module.?; |
| 1148 | 1154 | return self.fail("type '{}' too big to fit into stack frame", .{elem_ty.fmt(mod)}); |
| ... | ... | @@ -1219,7 +1225,7 @@ fn revertState(self: *Self, state: State) void { |
| 1219 | 1225 | pub fn spillInstruction(self: *Self, reg: Register, inst: Air.Inst.Index) !void { |
| 1220 | 1226 | const stack_mcv = try self.allocRegOrMem(inst, false); |
| 1221 | 1227 | log.debug("spilling %{d} to stack mcv {any}", .{ inst, stack_mcv }); |
| 1222 | const reg_mcv = self.getResolvedInstValue(inst); | |
| 1228 | const reg_mcv = self.getResolvedInstValue(inst).?; | |
| 1223 | 1229 | switch (reg_mcv) { |
| 1224 | 1230 | .register => |other| { |
| 1225 | 1231 | assert(reg.to64() == other.to64()); |
| ... | ... | @@ -1236,7 +1242,7 @@ pub fn spillInstruction(self: *Self, reg: Register, inst: Air.Inst.Index) !void |
| 1236 | 1242 | |
| 1237 | 1243 | pub fn spillEflagsIfOccupied(self: *Self) !void { |
| 1238 | 1244 | if (self.eflags_inst) |inst_to_save| { |
| 1239 | const mcv = self.getResolvedInstValue(inst_to_save); | |
| 1245 | const mcv = self.getResolvedInstValue(inst_to_save).?; | |
| 1240 | 1246 | const new_mcv = switch (mcv) { |
| 1241 | 1247 | .register_overflow => try self.allocRegOrMem(inst_to_save, false), |
| 1242 | 1248 | .eflags => try self.allocRegOrMem(inst_to_save, true), |
| ... | ... | @@ -2861,7 +2867,13 @@ fn store(self: *Self, ptr: MCValue, value: MCValue, ptr_ty: Type, value_ty: Type |
| 2861 | 2867 | .unreach => unreachable, |
| 2862 | 2868 | .eflags => unreachable, |
| 2863 | 2869 | .undef => { |
| 2864 | try self.genSetReg(value_ty, reg, value); | |
| 2870 | switch (abi_size) { | |
| 2871 | 1 => try self.store(ptr, .{ .immediate = 0xaa }, ptr_ty, value_ty), | |
| 2872 | 2 => try self.store(ptr, .{ .immediate = 0xaaaa }, ptr_ty, value_ty), | |
| 2873 | 4 => try self.store(ptr, .{ .immediate = 0xaaaaaaaa }, ptr_ty, value_ty), | |
| 2874 | 8 => try self.store(ptr, .{ .immediate = 0xaaaaaaaaaaaaaaaa }, ptr_ty, value_ty), | |
| 2875 | else => try self.genInlineMemset(ptr, .{ .immediate = 0xaa }, .{ .immediate = abi_size }, .{}), | |
| 2876 | } | |
| 2865 | 2877 | }, |
| 2866 | 2878 | .immediate => |imm| { |
| 2867 | 2879 | switch (abi_size) { |
| ... | ... | @@ -3041,6 +3053,9 @@ fn structFieldPtr(self: *Self, inst: Air.Inst.Index, operand: Air.Inst.Ref, inde |
| 3041 | 3053 | const mcv = try self.resolveInst(operand); |
| 3042 | 3054 | const ptr_ty = self.air.typeOf(operand); |
| 3043 | 3055 | const struct_ty = ptr_ty.childType(); |
| 3056 | if (struct_ty.zigTypeTag() == .Struct and struct_ty.containerLayout() == .Packed) { | |
| 3057 | return self.fail("TODO structFieldPtr implement packed structs", .{}); | |
| 3058 | } | |
| 3044 | 3059 | const struct_field_offset = @intCast(u32, struct_ty.structFieldOffset(index, self.target.*)); |
| 3045 | 3060 | |
| 3046 | 3061 | const dst_mcv: MCValue = result: { |
| ... | ... | @@ -3104,6 +3119,9 @@ fn airStructFieldVal(self: *Self, inst: Air.Inst.Index) !void { |
| 3104 | 3119 | |
| 3105 | 3120 | const mcv = try self.resolveInst(operand); |
| 3106 | 3121 | const struct_ty = self.air.typeOf(operand); |
| 3122 | if (struct_ty.zigTypeTag() == .Struct and struct_ty.containerLayout() == .Packed) { | |
| 3123 | return self.fail("TODO airStructFieldVal implement packed structs", .{}); | |
| 3124 | } | |
| 3107 | 3125 | const struct_field_offset = struct_ty.structFieldOffset(index, self.target.*); |
| 3108 | 3126 | const struct_field_ty = struct_ty.structFieldType(index); |
| 3109 | 3127 | |
| ... | ... | @@ -3625,12 +3643,35 @@ fn genBinOpMir(self: *Self, mir_tag: Mir.Inst.Tag, dst_ty: Type, dst_mcv: MCValu |
| 3625 | 3643 | ), |
| 3626 | 3644 | }, |
| 3627 | 3645 | .immediate => |imm| { |
| 3628 | // TODO | |
| 3629 | try self.asmRegisterImmediate( | |
| 3630 | mir_tag, | |
| 3631 | registerAlias(dst_reg, abi_size), | |
| 3632 | Immediate.u(@intCast(u32, imm)), | |
| 3633 | ); | |
| 3646 | switch (abi_size) { | |
| 3647 | 0 => unreachable, | |
| 3648 | 1...4 => { | |
| 3649 | try self.asmRegisterImmediate( | |
| 3650 | mir_tag, | |
| 3651 | registerAlias(dst_reg, abi_size), | |
| 3652 | Immediate.u(@intCast(u32, imm)), | |
| 3653 | ); | |
| 3654 | }, | |
| 3655 | 5...8 => { | |
| 3656 | if (math.cast(i32, @bitCast(i64, imm))) |small| { | |
| 3657 | try self.asmRegisterImmediate( | |
| 3658 | mir_tag, | |
| 3659 | registerAlias(dst_reg, abi_size), | |
| 3660 | Immediate.s(small), | |
| 3661 | ); | |
| 3662 | } else { | |
| 3663 | const tmp_reg = try self.register_manager.allocReg(null, gp); | |
| 3664 | const tmp_alias = registerAlias(tmp_reg, abi_size); | |
| 3665 | try self.asmRegisterImmediate(.mov, tmp_alias, Immediate.u(imm)); | |
| 3666 | try self.asmRegisterRegister( | |
| 3667 | mir_tag, | |
| 3668 | registerAlias(dst_reg, abi_size), | |
| 3669 | tmp_alias, | |
| 3670 | ); | |
| 3671 | } | |
| 3672 | }, | |
| 3673 | else => return self.fail("TODO getBinOpMir implement large immediate ABI", .{}), | |
| 3674 | } | |
| 3634 | 3675 | }, |
| 3635 | 3676 | .memory, |
| 3636 | 3677 | .linker_load, |
| ... | ... | @@ -3969,10 +4010,10 @@ fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallModifier |
| 3969 | 4010 | }; |
| 3970 | 4011 | defer if (ret_reg_lock) |lock| self.register_manager.unlockReg(lock); |
| 3971 | 4012 | |
| 3972 | for (args, 0..) |arg, arg_i| { | |
| 3973 | const mc_arg = info.args[arg_i]; | |
| 4013 | for (args, info.args) |arg, info_arg| { | |
| 4014 | const mc_arg = info_arg; | |
| 3974 | 4015 | const arg_ty = self.air.typeOf(arg); |
| 3975 | const arg_mcv = try self.resolveInst(args[arg_i]); | |
| 4016 | const arg_mcv = try self.resolveInst(arg); | |
| 3976 | 4017 | // Here we do not use setRegOrMem even though the logic is similar, because |
| 3977 | 4018 | // the function call will move the stack pointer, so the offsets are different. |
| 3978 | 4019 | switch (mc_arg) { |
| ... | ... | @@ -4410,16 +4451,16 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void { |
| 4410 | 4451 | // Capture the state of register and stack allocation state so that we can revert to it. |
| 4411 | 4452 | const saved_state = try self.captureState(); |
| 4412 | 4453 | |
| 4413 | try self.branch_stack.append(.{}); | |
| 4414 | errdefer { | |
| 4415 | _ = self.branch_stack.pop(); | |
| 4416 | } | |
| 4454 | { | |
| 4455 | try self.branch_stack.append(.{}); | |
| 4456 | errdefer _ = self.branch_stack.pop(); | |
| 4417 | 4457 | |
| 4418 | try self.ensureProcessDeathCapacity(liveness_condbr.then_deaths.len); | |
| 4419 | for (liveness_condbr.then_deaths) |operand| { | |
| 4420 | self.processDeath(operand); | |
| 4458 | try self.ensureProcessDeathCapacity(liveness_condbr.then_deaths.len); | |
| 4459 | for (liveness_condbr.then_deaths) |operand| { | |
| 4460 | self.processDeath(operand); | |
| 4461 | } | |
| 4462 | try self.genBody(then_body); | |
| 4421 | 4463 | } |
| 4422 | try self.genBody(then_body); | |
| 4423 | 4464 | |
| 4424 | 4465 | // Revert to the previous register and stack allocation state. |
| 4425 | 4466 | |
| ... | ... | @@ -4430,16 +4471,16 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void { |
| 4430 | 4471 | |
| 4431 | 4472 | try self.performReloc(reloc); |
| 4432 | 4473 | |
| 4433 | try self.branch_stack.append(.{}); | |
| 4434 | errdefer { | |
| 4435 | _ = self.branch_stack.pop(); | |
| 4436 | } | |
| 4474 | { | |
| 4475 | try self.branch_stack.append(.{}); | |
| 4476 | errdefer _ = self.branch_stack.pop(); | |
| 4437 | 4477 | |
| 4438 | try self.ensureProcessDeathCapacity(liveness_condbr.else_deaths.len); | |
| 4439 | for (liveness_condbr.else_deaths) |operand| { | |
| 4440 | self.processDeath(operand); | |
| 4478 | try self.ensureProcessDeathCapacity(liveness_condbr.else_deaths.len); | |
| 4479 | for (liveness_condbr.else_deaths) |operand| { | |
| 4480 | self.processDeath(operand); | |
| 4481 | } | |
| 4482 | try self.genBody(else_body); | |
| 4441 | 4483 | } |
| 4442 | try self.genBody(else_body); | |
| 4443 | 4484 | |
| 4444 | 4485 | var else_branch = self.branch_stack.pop(); |
| 4445 | 4486 | defer else_branch.deinit(self.gpa); |
| ... | ... | @@ -4565,18 +4606,16 @@ fn airIsNullPtr(self: *Self, inst: Air.Inst.Index) !void { |
| 4565 | 4606 | }; |
| 4566 | 4607 | defer if (operand_ptr_lock) |lock| self.register_manager.unlockReg(lock); |
| 4567 | 4608 | |
| 4568 | const operand: MCValue = blk: { | |
| 4569 | if (self.reuseOperand(inst, un_op, 0, operand_ptr)) { | |
| 4570 | // The MCValue that holds the pointer can be re-used as the value. | |
| 4571 | break :blk operand_ptr; | |
| 4572 | } else { | |
| 4573 | break :blk try self.allocRegOrMem(inst, true); | |
| 4574 | } | |
| 4575 | }; | |
| 4576 | 4609 | const ptr_ty = self.air.typeOf(un_op); |
| 4610 | const elem_ty = ptr_ty.childType(); | |
| 4611 | const operand = if (elem_ty.isPtrLikeOptional() and self.reuseOperand(inst, un_op, 0, operand_ptr)) | |
| 4612 | // The MCValue that holds the pointer can be re-used as the value. | |
| 4613 | operand_ptr | |
| 4614 | else | |
| 4615 | try self.allocTempRegOrMem(elem_ty, true); | |
| 4577 | 4616 | try self.load(operand, operand_ptr, ptr_ty); |
| 4578 | 4617 | |
| 4579 | const result = try self.isNull(inst, ptr_ty.elemType(), operand); | |
| 4618 | const result = try self.isNull(inst, elem_ty, operand); | |
| 4580 | 4619 | |
| 4581 | 4620 | return self.finishAir(inst, result, .{ un_op, .none, .none }); |
| 4582 | 4621 | } |
| ... | ... | @@ -4605,15 +4644,13 @@ fn airIsNonNullPtr(self: *Self, inst: Air.Inst.Index) !void { |
| 4605 | 4644 | }; |
| 4606 | 4645 | defer if (operand_ptr_lock) |lock| self.register_manager.unlockReg(lock); |
| 4607 | 4646 | |
| 4608 | const operand: MCValue = blk: { | |
| 4609 | if (self.reuseOperand(inst, un_op, 0, operand_ptr)) { | |
| 4610 | // The MCValue that holds the pointer can be re-used as the value. | |
| 4611 | break :blk operand_ptr; | |
| 4612 | } else { | |
| 4613 | break :blk try self.allocRegOrMem(inst, true); | |
| 4614 | } | |
| 4615 | }; | |
| 4616 | 4647 | const ptr_ty = self.air.typeOf(un_op); |
| 4648 | const elem_ty = ptr_ty.childType(); | |
| 4649 | const operand = if (elem_ty.isPtrLikeOptional() and self.reuseOperand(inst, un_op, 0, operand_ptr)) | |
| 4650 | // The MCValue that holds the pointer can be re-used as the value. | |
| 4651 | operand_ptr | |
| 4652 | else | |
| 4653 | try self.allocTempRegOrMem(elem_ty, true); | |
| 4617 | 4654 | try self.load(operand, operand_ptr, ptr_ty); |
| 4618 | 4655 | |
| 4619 | 4656 | const result = try self.isNonNull(inst, ptr_ty.elemType(), operand); |
| ... | ... | @@ -4721,7 +4758,7 @@ fn airBlock(self: *Self, inst: Air.Inst.Index) !void { |
| 4721 | 4758 | // break instruction will choose a MCValue for the block result and overwrite |
| 4722 | 4759 | // this field. Following break instructions will use that MCValue to put their |
| 4723 | 4760 | // block results. |
| 4724 | .mcv = MCValue{ .none = {} }, | |
| 4761 | .mcv = .none, | |
| 4725 | 4762 | }); |
| 4726 | 4763 | defer self.blocks.getPtr(inst).?.relocs.deinit(self.gpa); |
| 4727 | 4764 | |
| ... | ... | @@ -4842,25 +4879,25 @@ fn airSwitch(self: *Self, inst: Air.Inst.Index) !void { |
| 4842 | 4879 | var relocs = try self.gpa.alloc(u32, items.len); |
| 4843 | 4880 | defer self.gpa.free(relocs); |
| 4844 | 4881 | |
| 4845 | for (items, 0..) |item, item_i| { | |
| 4882 | for (items, relocs) |item, *reloc| { | |
| 4846 | 4883 | const item_mcv = try self.resolveInst(item); |
| 4847 | relocs[item_i] = try self.genCondSwitchMir(condition_ty, condition, item_mcv); | |
| 4884 | reloc.* = try self.genCondSwitchMir(condition_ty, condition, item_mcv); | |
| 4848 | 4885 | } |
| 4849 | 4886 | |
| 4850 | 4887 | // Capture the state of register and stack allocation state so that we can revert to it. |
| 4851 | 4888 | const saved_state = try self.captureState(); |
| 4852 | 4889 | |
| 4853 | try self.branch_stack.append(.{}); | |
| 4854 | errdefer { | |
| 4855 | _ = self.branch_stack.pop(); | |
| 4856 | } | |
| 4890 | { | |
| 4891 | try self.branch_stack.append(.{}); | |
| 4892 | errdefer _ = self.branch_stack.pop(); | |
| 4857 | 4893 | |
| 4858 | try self.ensureProcessDeathCapacity(liveness.deaths[case_i].len); | |
| 4859 | for (liveness.deaths[case_i]) |operand| { | |
| 4860 | self.processDeath(operand); | |
| 4861 | } | |
| 4894 | try self.ensureProcessDeathCapacity(liveness.deaths[case_i].len); | |
| 4895 | for (liveness.deaths[case_i]) |operand| { | |
| 4896 | self.processDeath(operand); | |
| 4897 | } | |
| 4862 | 4898 | |
| 4863 | try self.genBody(case_body); | |
| 4899 | try self.genBody(case_body); | |
| 4900 | } | |
| 4864 | 4901 | |
| 4865 | 4902 | branch_stack.appendAssumeCapacity(self.branch_stack.pop()); |
| 4866 | 4903 | |
| ... | ... | @@ -4878,18 +4915,18 @@ fn airSwitch(self: *Self, inst: Air.Inst.Index) !void { |
| 4878 | 4915 | // Capture the state of register and stack allocation state so that we can revert to it. |
| 4879 | 4916 | const saved_state = try self.captureState(); |
| 4880 | 4917 | |
| 4881 | try self.branch_stack.append(.{}); | |
| 4882 | errdefer { | |
| 4883 | _ = self.branch_stack.pop(); | |
| 4884 | } | |
| 4918 | { | |
| 4919 | try self.branch_stack.append(.{}); | |
| 4920 | errdefer _ = self.branch_stack.pop(); | |
| 4885 | 4921 | |
| 4886 | const else_deaths = liveness.deaths.len - 1; | |
| 4887 | try self.ensureProcessDeathCapacity(liveness.deaths[else_deaths].len); | |
| 4888 | for (liveness.deaths[else_deaths]) |operand| { | |
| 4889 | self.processDeath(operand); | |
| 4890 | } | |
| 4922 | const else_deaths = liveness.deaths.len - 1; | |
| 4923 | try self.ensureProcessDeathCapacity(liveness.deaths[else_deaths].len); | |
| 4924 | for (liveness.deaths[else_deaths]) |operand| { | |
| 4925 | self.processDeath(operand); | |
| 4926 | } | |
| 4891 | 4927 | |
| 4892 | try self.genBody(else_body); | |
| 4928 | try self.genBody(else_body); | |
| 4929 | } | |
| 4893 | 4930 | |
| 4894 | 4931 | branch_stack.appendAssumeCapacity(self.branch_stack.pop()); |
| 4895 | 4932 | |
| ... | ... | @@ -4926,11 +4963,7 @@ fn canonicaliseBranches(self: *Self, parent_branch: *Branch, canon_branch: *Bran |
| 4926 | 4963 | try parent_branch.inst_table.ensureUnusedCapacity(self.gpa, target_branch.inst_table.count()); |
| 4927 | 4964 | |
| 4928 | 4965 | const target_slice = target_branch.inst_table.entries.slice(); |
| 4929 | const target_keys = target_slice.items(.key); | |
| 4930 | const target_values = target_slice.items(.value); | |
| 4931 | ||
| 4932 | for (target_keys, 0..) |target_key, target_idx| { | |
| 4933 | const target_value = target_values[target_idx]; | |
| 4966 | for (target_slice.items(.key), target_slice.items(.value)) |target_key, target_value| { | |
| 4934 | 4967 | const canon_mcv = if (canon_branch.inst_table.fetchSwapRemove(target_key)) |canon_entry| blk: { |
| 4935 | 4968 | // The instruction's MCValue is overridden in both branches. |
| 4936 | 4969 | parent_branch.inst_table.putAssumeCapacity(target_key, canon_entry.value); |
| ... | ... | @@ -4960,10 +4993,7 @@ fn canonicaliseBranches(self: *Self, parent_branch: *Branch, canon_branch: *Bran |
| 4960 | 4993 | } |
| 4961 | 4994 | try parent_branch.inst_table.ensureUnusedCapacity(self.gpa, canon_branch.inst_table.count()); |
| 4962 | 4995 | const canon_slice = canon_branch.inst_table.entries.slice(); |
| 4963 | const canon_keys = canon_slice.items(.key); | |
| 4964 | const canon_values = canon_slice.items(.value); | |
| 4965 | for (canon_keys, 0..) |canon_key, canon_idx| { | |
| 4966 | const canon_value = canon_values[canon_idx]; | |
| 4996 | for (canon_slice.items(.key), canon_slice.items(.value)) |canon_key, canon_value| { | |
| 4967 | 4997 | // We already deleted the items from this table that matched the target_branch. |
| 4968 | 4998 | // So these are all instructions that are only overridden in the canon branch. |
| 4969 | 4999 | parent_branch.inst_table.putAssumeCapacity(canon_key, canon_value); |
| ... | ... | @@ -5144,9 +5174,9 @@ fn airAsm(self: *Self, inst: Air.Inst.Index) !void { |
| 5144 | 5174 | const reg_name = output[2 .. output.len - 1]; |
| 5145 | 5175 | const reg = parseRegName(reg_name) orelse |
| 5146 | 5176 | return self.fail("unrecognized register: '{s}'", .{reg_name}); |
| 5147 | break :result MCValue{ .register = reg }; | |
| 5177 | break :result .{ .register = reg }; | |
| 5148 | 5178 | } else { |
| 5149 | break :result MCValue{ .none = {} }; | |
| 5179 | break :result .none; | |
| 5150 | 5180 | } |
| 5151 | 5181 | }; |
| 5152 | 5182 | |
| ... | ... | @@ -6218,6 +6248,9 @@ fn airAggregateInit(self: *Self, inst: Air.Inst.Index) !void { |
| 6218 | 6248 | if (self.liveness.isUnused(inst)) break :res MCValue.dead; |
| 6219 | 6249 | switch (result_ty.zigTypeTag()) { |
| 6220 | 6250 | .Struct => { |
| 6251 | if (result_ty.containerLayout() == .Packed) { | |
| 6252 | return self.fail("TODO airAggregateInit implement packed structs", .{}); | |
| 6253 | } | |
| 6221 | 6254 | const stack_offset = @intCast(i32, try self.allocMem(inst, abi_size, abi_align)); |
| 6222 | 6255 | for (elements, 0..) |elem, elem_i| { |
| 6223 | 6256 | if (result_ty.structFieldValueComptime(elem_i) != null) continue; // comptime elem |
| ... | ... | @@ -6288,7 +6321,7 @@ fn resolveInst(self: *Self, inst: Air.Inst.Ref) InnerError!MCValue { |
| 6288 | 6321 | if (ref_int < Air.Inst.Ref.typed_value_map.len) { |
| 6289 | 6322 | const tv = Air.Inst.Ref.typed_value_map[ref_int]; |
| 6290 | 6323 | if (!tv.ty.hasRuntimeBitsIgnoreComptime() and !tv.ty.isError()) { |
| 6291 | return MCValue{ .none = {} }; | |
| 6324 | return .none; | |
| 6292 | 6325 | } |
| 6293 | 6326 | return self.genTypedValue(tv); |
| 6294 | 6327 | } |
| ... | ... | @@ -6296,7 +6329,7 @@ fn resolveInst(self: *Self, inst: Air.Inst.Ref) InnerError!MCValue { |
| 6296 | 6329 | // If the type has no codegen bits, no need to store it. |
| 6297 | 6330 | const inst_ty = self.air.typeOf(inst); |
| 6298 | 6331 | if (!inst_ty.hasRuntimeBitsIgnoreComptime() and !inst_ty.isError()) |
| 6299 | return MCValue{ .none = {} }; | |
| 6332 | return .none; | |
| 6300 | 6333 | |
| 6301 | 6334 | const inst_index = @intCast(Air.Inst.Index, ref_int - Air.Inst.Ref.typed_value_map.len); |
| 6302 | 6335 | switch (self.air.instructions.items(.tag)[inst_index]) { |
| ... | ... | @@ -6314,18 +6347,17 @@ fn resolveInst(self: *Self, inst: Air.Inst.Ref) InnerError!MCValue { |
| 6314 | 6347 | return gop.value_ptr.*; |
| 6315 | 6348 | }, |
| 6316 | 6349 | .const_ty => unreachable, |
| 6317 | else => return self.getResolvedInstValue(inst_index), | |
| 6350 | else => return self.getResolvedInstValue(inst_index).?, | |
| 6318 | 6351 | } |
| 6319 | 6352 | } |
| 6320 | 6353 | |
| 6321 | fn getResolvedInstValue(self: *Self, inst: Air.Inst.Index) MCValue { | |
| 6354 | fn getResolvedInstValue(self: *Self, inst: Air.Inst.Index) ?MCValue { | |
| 6322 | 6355 | // Treat each stack item as a "layer" on top of the previous one. |
| 6323 | 6356 | var i: usize = self.branch_stack.items.len; |
| 6324 | 6357 | while (true) { |
| 6325 | 6358 | i -= 1; |
| 6326 | 6359 | if (self.branch_stack.items[i].inst_table.get(inst)) |mcv| { |
| 6327 | assert(mcv != .dead); | |
| 6328 | return mcv; | |
| 6360 | return if (mcv != .dead) mcv else null; | |
| 6329 | 6361 | } |
| 6330 | 6362 | } |
| 6331 | 6363 | } |
| ... | ... | @@ -6405,7 +6437,7 @@ fn resolveCallingConventionValues(self: *Self, fn_ty: Type) !CallMCValues { |
| 6405 | 6437 | switch (cc) { |
| 6406 | 6438 | .Naked => { |
| 6407 | 6439 | assert(result.args.len == 0); |
| 6408 | result.return_value = .{ .unreach = {} }; | |
| 6440 | result.return_value = .unreach; | |
| 6409 | 6441 | result.stack_byte_count = 0; |
| 6410 | 6442 | result.stack_align = 1; |
| 6411 | 6443 | return result; |
| ... | ... | @@ -6413,10 +6445,10 @@ fn resolveCallingConventionValues(self: *Self, fn_ty: Type) !CallMCValues { |
| 6413 | 6445 | .C => { |
| 6414 | 6446 | // Return values |
| 6415 | 6447 | if (ret_ty.zigTypeTag() == .NoReturn) { |
| 6416 | result.return_value = .{ .unreach = {} }; | |
| 6448 | result.return_value = .unreach; | |
| 6417 | 6449 | } else if (!ret_ty.hasRuntimeBitsIgnoreComptime() and !ret_ty.isError()) { |
| 6418 | 6450 | // TODO: is this even possible for C calling convention? |
| 6419 | result.return_value = .{ .none = {} }; | |
| 6451 | result.return_value = .none; | |
| 6420 | 6452 | } else { |
| 6421 | 6453 | const ret_ty_size = @intCast(u32, ret_ty.abiSize(self.target.*)); |
| 6422 | 6454 | if (ret_ty_size == 0) { |
| ... | ... | @@ -6437,7 +6469,7 @@ fn resolveCallingConventionValues(self: *Self, fn_ty: Type) !CallMCValues { |
| 6437 | 6469 | else => 0, |
| 6438 | 6470 | }; |
| 6439 | 6471 | |
| 6440 | for (param_types, 0..) |ty, i| { | |
| 6472 | for (param_types, result.args, 0..) |ty, *arg, i| { | |
| 6441 | 6473 | assert(ty.hasRuntimeBits()); |
| 6442 | 6474 | |
| 6443 | 6475 | const classes: []const abi.Class = switch (self.target.os.tag) { |
| ... | ... | @@ -6450,7 +6482,7 @@ fn resolveCallingConventionValues(self: *Self, fn_ty: Type) !CallMCValues { |
| 6450 | 6482 | switch (classes[0]) { |
| 6451 | 6483 | .integer => blk: { |
| 6452 | 6484 | if (i >= abi.getCAbiIntParamRegs(self.target.*).len) break :blk; // fallthrough |
| 6453 | result.args[i] = .{ .register = abi.getCAbiIntParamRegs(self.target.*)[i] }; | |
| 6485 | arg.* = .{ .register = abi.getCAbiIntParamRegs(self.target.*)[i] }; | |
| 6454 | 6486 | continue; |
| 6455 | 6487 | }, |
| 6456 | 6488 | .memory => {}, // fallthrough |
| ... | ... | @@ -6462,7 +6494,7 @@ fn resolveCallingConventionValues(self: *Self, fn_ty: Type) !CallMCValues { |
| 6462 | 6494 | const param_size = @intCast(u32, ty.abiSize(self.target.*)); |
| 6463 | 6495 | const param_align = @intCast(u32, ty.abiAlignment(self.target.*)); |
| 6464 | 6496 | const offset = mem.alignForwardGeneric(u32, next_stack_offset + param_size, param_align); |
| 6465 | result.args[i] = .{ .stack_offset = @intCast(i32, offset) }; | |
| 6497 | arg.* = .{ .stack_offset = @intCast(i32, offset) }; | |
| 6466 | 6498 | next_stack_offset = offset; |
| 6467 | 6499 | } |
| 6468 | 6500 | |
| ... | ... | @@ -6488,9 +6520,9 @@ fn resolveCallingConventionValues(self: *Self, fn_ty: Type) !CallMCValues { |
| 6488 | 6520 | .Unspecified => { |
| 6489 | 6521 | // Return values |
| 6490 | 6522 | if (ret_ty.zigTypeTag() == .NoReturn) { |
| 6491 | result.return_value = .{ .unreach = {} }; | |
| 6523 | result.return_value = .unreach; | |
| 6492 | 6524 | } else if (!ret_ty.hasRuntimeBitsIgnoreComptime() and !ret_ty.isError()) { |
| 6493 | result.return_value = .{ .none = {} }; | |
| 6525 | result.return_value = .none; | |
| 6494 | 6526 | } else { |
| 6495 | 6527 | const ret_ty_size = @intCast(u32, ret_ty.abiSize(self.target.*)); |
| 6496 | 6528 | if (ret_ty_size == 0) { |
| ... | ... | @@ -6513,15 +6545,15 @@ fn resolveCallingConventionValues(self: *Self, fn_ty: Type) !CallMCValues { |
| 6513 | 6545 | else => 0, |
| 6514 | 6546 | }; |
| 6515 | 6547 | |
| 6516 | for (param_types, 0..) |ty, i| { | |
| 6548 | for (param_types, result.args) |ty, *arg| { | |
| 6517 | 6549 | if (!ty.hasRuntimeBits()) { |
| 6518 | result.args[i] = .{ .none = {} }; | |
| 6550 | arg.* = .none; | |
| 6519 | 6551 | continue; |
| 6520 | 6552 | } |
| 6521 | 6553 | const param_size = @intCast(u32, ty.abiSize(self.target.*)); |
| 6522 | 6554 | const param_align = @intCast(u32, ty.abiAlignment(self.target.*)); |
| 6523 | 6555 | const offset = mem.alignForwardGeneric(u32, next_stack_offset + param_size, param_align); |
| 6524 | result.args[i] = .{ .stack_offset = @intCast(i32, offset) }; | |
| 6556 | arg.* = .{ .stack_offset = @intCast(i32, offset) }; | |
| 6525 | 6557 | next_stack_offset = offset; |
| 6526 | 6558 | } |
| 6527 | 6559 |
test/behavior/align.zig-1| ... | ... | @@ -568,7 +568,6 @@ fn overaligned_fn() align(0x1000) i32 { |
| 568 | 568 | } |
| 569 | 569 | |
| 570 | 570 | test "comptime alloc alignment" { |
| 571 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 572 | 571 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 573 | 572 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 574 | 573 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
test/behavior/array.zig-1| ... | ... | @@ -591,7 +591,6 @@ test "type coercion of anon struct literal to array" { |
| 591 | 591 | test "type coercion of pointer to anon struct literal to pointer to array" { |
| 592 | 592 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 593 | 593 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 594 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 595 | 594 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 596 | 595 | |
| 597 | 596 | const S = struct { |
test/behavior/bit_shifting.zig-1| ... | ... | @@ -63,7 +63,6 @@ fn ShardedTable(comptime Key: type, comptime mask_bit_count: comptime_int, compt |
| 63 | 63 | test "sharded table" { |
| 64 | 64 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 65 | 65 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 66 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 67 | 66 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 68 | 67 | |
| 69 | 68 | // realistic 16-way sharding |
test/behavior/bitreverse.zig-1| ... | ... | @@ -150,7 +150,6 @@ fn vector0() !void { |
| 150 | 150 | |
| 151 | 151 | test "bitReverse vectors u0" { |
| 152 | 152 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; |
| 153 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 154 | 153 | |
| 155 | 154 | comptime try vector0(); |
| 156 | 155 | try vector0(); |
test/behavior/bugs/1076.zig-1| ... | ... | @@ -4,7 +4,6 @@ const mem = std.mem; |
| 4 | 4 | const expect = std.testing.expect; |
| 5 | 5 | |
| 6 | 6 | test "comptime code should not modify constant data" { |
| 7 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 8 | 7 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 9 | 8 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 10 | 9 |
test/behavior/bugs/11046.zig-1| ... | ... | @@ -10,7 +10,6 @@ fn bar() !void { |
| 10 | 10 | } |
| 11 | 11 | |
| 12 | 12 | test "fixed" { |
| 13 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 14 | 13 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 15 | 14 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 16 | 15 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
test/behavior/bugs/11787.zig-1| ... | ... | @@ -4,7 +4,6 @@ const testing = std.testing; |
| 4 | 4 | |
| 5 | 5 | test "slicing zero length array field of struct" { |
| 6 | 6 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 7 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 8 | 7 | if (builtin.zig_backend == .stage2_x86) return error.SkipZigTest; // TODO |
| 9 | 8 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 10 | 9 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
test/behavior/bugs/12000.zig-1| ... | ... | @@ -7,7 +7,6 @@ const T = struct { |
| 7 | 7 | |
| 8 | 8 | test { |
| 9 | 9 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 10 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 11 | 10 | if (builtin.zig_backend == .stage2_x86) return error.SkipZigTest; // TODO |
| 12 | 11 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 13 | 12 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
test/behavior/bugs/12119.zig-1| ... | ... | @@ -6,7 +6,6 @@ const u32x8 = @Vector(8, u32); |
| 6 | 6 | |
| 7 | 7 | test { |
| 8 | 8 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 9 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 10 | 9 | if (builtin.zig_backend == .stage2_x86) return error.SkipZigTest; // TODO |
| 11 | 10 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 12 | 11 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
test/behavior/bugs/12169.zig-1| ... | ... | @@ -3,7 +3,6 @@ const builtin = @import("builtin"); |
| 3 | 3 | |
| 4 | 4 | test { |
| 5 | 5 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 6 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 7 | 6 | if (builtin.zig_backend == .stage2_x86) return error.SkipZigTest; // TODO |
| 8 | 7 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 9 | 8 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
test/behavior/bugs/12890.zig-1| ... | ... | @@ -10,7 +10,6 @@ fn a(b: []u3, c: u3) void { |
| 10 | 10 | } |
| 11 | 11 | test { |
| 12 | 12 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 13 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 14 | 13 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 15 | 14 | |
| 16 | 15 | var arr: [8]u3 = undefined; |
test/behavior/bugs/13113.zig-1| ... | ... | @@ -8,7 +8,6 @@ const Foo = extern struct { |
| 8 | 8 | |
| 9 | 9 | test { |
| 10 | 10 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 11 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 12 | 11 | if (builtin.zig_backend == .stage2_x86) return error.SkipZigTest; // TODO |
| 13 | 12 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 14 | 13 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
test/behavior/bugs/1421.zig-1| ... | ... | @@ -9,7 +9,6 @@ const S = struct { |
| 9 | 9 | }; |
| 10 | 10 | |
| 11 | 11 | test "functions with return type required to be comptime are generic" { |
| 12 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 13 | 12 | const ti = S.method(); |
| 14 | 13 | try expect(@as(std.builtin.TypeId, ti) == std.builtin.TypeId.Struct); |
| 15 | 14 | } |
test/behavior/bugs/1607.zig-1| ... | ... | @@ -13,7 +13,6 @@ fn checkAddress(s: []const u8) !void { |
| 13 | 13 | test "slices pointing at the same address as global array." { |
| 14 | 14 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 15 | 15 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 16 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 17 | 16 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 18 | 17 | try checkAddress(&a); |
| 19 | 18 | comptime try checkAddress(&a); |
test/behavior/bugs/2622.zig-1| ... | ... | @@ -4,7 +4,6 @@ var buf: []u8 = undefined; |
| 4 | 4 | |
| 5 | 5 | test "reslice of undefined global var slice" { |
| 6 | 6 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 7 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 8 | 7 | if (builtin.zig_backend == .stage2_x86) return error.SkipZigTest; // TODO |
| 9 | 8 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 10 | 9 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
test/behavior/bugs/2727.zig-1| ... | ... | @@ -6,7 +6,6 @@ fn t() bool { |
| 6 | 6 | |
| 7 | 7 | test { |
| 8 | 8 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 9 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 10 | 9 | if (builtin.zig_backend == .stage2_x86) return error.SkipZigTest; // TODO |
| 11 | 10 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 12 | 11 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
test/behavior/bugs/3742.zig-1| ... | ... | @@ -37,7 +37,6 @@ pub const ArgSerializer = struct { |
| 37 | 37 | test "fixed" { |
| 38 | 38 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 39 | 39 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 40 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 41 | 40 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 42 | 41 | if (builtin.zig_backend == .stage2_llvm and |
| 43 | 42 | builtin.cpu.arch == .aarch64 and builtin.os.tag == .windows) return error.SkipZigTest; |
test/behavior/bugs/394.zig-1| ... | ... | @@ -11,7 +11,6 @@ const expect = @import("std").testing.expect; |
| 11 | 11 | const builtin = @import("builtin"); |
| 12 | 12 | |
| 13 | 13 | test "fixed" { |
| 14 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 15 | 14 | const x = S{ |
| 16 | 15 | .x = 3, |
| 17 | 16 | .y = E{ .B = 1 }, |
test/behavior/bugs/421.zig-1| ... | ... | @@ -2,7 +2,6 @@ const builtin = @import("builtin"); |
| 2 | 2 | const expect = @import("std").testing.expect; |
| 3 | 3 | |
| 4 | 4 | test "bitCast to array" { |
| 5 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 6 | 5 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 7 | 6 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 8 | 7 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
test/behavior/bugs/5398.zig-1| ... | ... | @@ -21,7 +21,6 @@ var renderable: Renderable = undefined; |
| 21 | 21 | test "assignment of field with padding" { |
| 22 | 22 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 23 | 23 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 24 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 25 | 24 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 26 | 25 | |
| 27 | 26 | renderable = Renderable{ |
test/behavior/bugs/5487.zig-1| ... | ... | @@ -12,7 +12,6 @@ pub fn writer() io.Writer(void, @typeInfo(@typeInfo(@TypeOf(write)).Fn.return_ty |
| 12 | 12 | test "crash" { |
| 13 | 13 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 14 | 14 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 15 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 16 | 15 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 17 | 16 | _ = io.multiWriter(.{writer()}); |
| 18 | 17 | } |
test/behavior/bugs/656.zig-1| ... | ... | @@ -13,7 +13,6 @@ const Value = struct { |
| 13 | 13 | test "optional if after an if in a switch prong of a switch with 2 prongs in an else" { |
| 14 | 14 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 15 | 15 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 16 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 17 | 16 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 18 | 17 | try foo(false, true); |
| 19 | 18 | } |
test/behavior/bugs/6947.zig-1| ... | ... | @@ -6,7 +6,6 @@ fn destroy(ptr: *void) void { |
| 6 | 6 | |
| 7 | 7 | test { |
| 8 | 8 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 9 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 10 | 9 | if (builtin.zig_backend == .stage2_x86) return error.SkipZigTest; // TODO |
| 11 | 10 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 12 | 11 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
test/behavior/byteswap.zig-1| ... | ... | @@ -116,7 +116,6 @@ fn vector0() !void { |
| 116 | 116 | |
| 117 | 117 | test "@byteSwap vectors u0" { |
| 118 | 118 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; |
| 119 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 120 | 119 | |
| 121 | 120 | comptime try vector0(); |
| 122 | 121 | try vector0(); |
test/behavior/byval_arg_var.zig-1| ... | ... | @@ -4,7 +4,6 @@ const builtin = @import("builtin"); |
| 4 | 4 | var result: []const u8 = "wrong"; |
| 5 | 5 | |
| 6 | 6 | test "pass string literal byvalue to a generic var param" { |
| 7 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 8 | 7 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 9 | 8 | |
| 10 | 9 | start(); |
test/behavior/call.zig-2| ... | ... | @@ -21,7 +21,6 @@ test "super basic invocations" { |
| 21 | 21 | test "basic invocations" { |
| 22 | 22 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 23 | 23 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO |
| 24 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 25 | 24 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 26 | 25 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 27 | 26 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -56,7 +55,6 @@ test "basic invocations" { |
| 56 | 55 | test "tuple parameters" { |
| 57 | 56 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 58 | 57 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 59 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 60 | 58 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 61 | 59 | |
| 62 | 60 | const add = struct { |
test/behavior/cast.zig-9| ... | ... | @@ -176,7 +176,6 @@ fn expectFloatToInt(comptime F: type, f: F, comptime I: type, i: I) !void { |
| 176 | 176 | |
| 177 | 177 | test "implicitly cast indirect pointer to maybe-indirect pointer" { |
| 178 | 178 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 179 | if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest; | |
| 180 | 179 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 181 | 180 | |
| 182 | 181 | const S = struct { |
| ... | ... | @@ -318,7 +317,6 @@ test "peer result null and comptime_int" { |
| 318 | 317 | |
| 319 | 318 | test "*const ?[*]const T to [*c]const [*c]const T" { |
| 320 | 319 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 321 | if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest; | |
| 322 | 320 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 323 | 321 | |
| 324 | 322 | var array = [_]u8{ 'o', 'k' }; |
| ... | ... | @@ -588,7 +586,6 @@ fn testCastPtrOfArrayToSliceAndPtr() !void { |
| 588 | 586 | |
| 589 | 587 | test "cast *[1][*]const u8 to [*]const ?[*]const u8" { |
| 590 | 588 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 591 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 592 | 589 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 593 | 590 | |
| 594 | 591 | const window_name = [1][*]const u8{"window name"}; |
| ... | ... | @@ -927,7 +924,6 @@ test "peer cast *[N:x]T to *[N]T" { |
| 927 | 924 | |
| 928 | 925 | test "peer cast [*:x]T to [*]T" { |
| 929 | 926 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 930 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 931 | 927 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 932 | 928 | |
| 933 | 929 | const S = struct { |
| ... | ... | @@ -948,7 +944,6 @@ test "peer cast [*:x]T to [*]T" { |
| 948 | 944 | test "peer cast [:x]T to [*:x]T" { |
| 949 | 945 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 950 | 946 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 951 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 952 | 947 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 953 | 948 | |
| 954 | 949 | const S = struct { |
| ... | ... | @@ -989,7 +984,6 @@ test "peer type resolution implicit cast to return type" { |
| 989 | 984 | |
| 990 | 985 | test "peer type resolution implicit cast to variable type" { |
| 991 | 986 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 992 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 993 | 987 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 994 | 988 | |
| 995 | 989 | const S = struct { |
| ... | ... | @@ -1112,8 +1106,6 @@ fn incrementVoidPtrArray(array: ?*anyopaque, len: usize) void { |
| 1112 | 1106 | } |
| 1113 | 1107 | |
| 1114 | 1108 | test "compile time int to ptr of function" { |
| 1115 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 1116 | ||
| 1117 | 1109 | try foobar(FUNCTION_CONSTANT); |
| 1118 | 1110 | } |
| 1119 | 1111 | |
| ... | ... | @@ -1505,7 +1497,6 @@ test "implicit cast from [:0]T to [*c]T" { |
| 1505 | 1497 | test "bitcast packed struct with u0" { |
| 1506 | 1498 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 1507 | 1499 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 1508 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 1509 | 1500 | |
| 1510 | 1501 | const S = packed struct(u2) { a: u0, b: u2 }; |
| 1511 | 1502 | const s = @bitCast(S, @as(u2, 2)); |
test/behavior/defer.zig-1| ... | ... | @@ -50,7 +50,6 @@ fn testNestedFnErrDefer() anyerror!void { |
| 50 | 50 | } |
| 51 | 51 | |
| 52 | 52 | test "return variable while defer expression in scope to modify it" { |
| 53 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 54 | 53 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 55 | 54 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 56 | 55 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
test/behavior/enum.zig-2| ... | ... | @@ -937,7 +937,6 @@ test "enum literal casting to error union with payload enum" { |
| 937 | 937 | } |
| 938 | 938 | |
| 939 | 939 | test "constant enum initialization with differing sizes" { |
| 940 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 941 | 940 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 942 | 941 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 943 | 942 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -1137,7 +1136,6 @@ test "tag name functions are unique" { |
| 1137 | 1136 | } |
| 1138 | 1137 | |
| 1139 | 1138 | test "size of enum with only one tag which has explicit integer tag type" { |
| 1140 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 1141 | 1139 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 1142 | 1140 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 1143 | 1141 |
test/behavior/error.zig-10| ... | ... | @@ -144,15 +144,11 @@ test "implicit cast to optional to error union to return result loc" { |
| 144 | 144 | } |
| 145 | 145 | |
| 146 | 146 | test "fn returning empty error set can be passed as fn returning any error" { |
| 147 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 148 | ||
| 149 | 147 | entry(); |
| 150 | 148 | comptime entry(); |
| 151 | 149 | } |
| 152 | 150 | |
| 153 | 151 | test "fn returning empty error set can be passed as fn returning any error - pointer" { |
| 154 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 155 | ||
| 156 | 152 | entryPtr(); |
| 157 | 153 | comptime entryPtr(); |
| 158 | 154 | } |
| ... | ... | @@ -219,7 +215,6 @@ fn testErrorSetType() !void { |
| 219 | 215 | } |
| 220 | 216 | |
| 221 | 217 | test "explicit error set cast" { |
| 222 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 223 | 218 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 224 | 219 | |
| 225 | 220 | try testExplicitErrorSetCast(Set1.A); |
| ... | ... | @@ -238,7 +233,6 @@ fn testExplicitErrorSetCast(set1: Set1) !void { |
| 238 | 233 | } |
| 239 | 234 | |
| 240 | 235 | test "comptime test error for empty error set" { |
| 241 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 242 | 236 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 243 | 237 | |
| 244 | 238 | try testComptimeTestErrorEmptySet(1234); |
| ... | ... | @@ -255,8 +249,6 @@ fn testComptimeTestErrorEmptySet(x: EmptyErrorSet!i32) !void { |
| 255 | 249 | } |
| 256 | 250 | |
| 257 | 251 | test "comptime err to int of error set with only 1 possible value" { |
| 258 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 259 | ||
| 260 | 252 | testErrToIntWithOnePossibleValue(error.A, @errorToInt(error.A)); |
| 261 | 253 | comptime testErrToIntWithOnePossibleValue(error.A, @errorToInt(error.A)); |
| 262 | 254 | } |
| ... | ... | @@ -426,7 +418,6 @@ test "nested error union function call in optional unwrap" { |
| 426 | 418 | } |
| 427 | 419 | |
| 428 | 420 | test "return function call to error set from error union function" { |
| 429 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 430 | 421 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 431 | 422 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 432 | 423 | |
| ... | ... | @@ -486,7 +477,6 @@ test "nested catch" { |
| 486 | 477 | } |
| 487 | 478 | |
| 488 | 479 | test "function pointer with return type that is error union with payload which is pointer of parent struct" { |
| 489 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 490 | 480 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 491 | 481 | |
| 492 | 482 | const S = struct { |
test/behavior/eval.zig-2| ... | ... | @@ -138,7 +138,6 @@ test "pointer to type" { |
| 138 | 138 | } |
| 139 | 139 | |
| 140 | 140 | test "a type constructed in a global expression" { |
| 141 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 142 | 141 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 143 | 142 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 144 | 143 | |
| ... | ... | @@ -1515,7 +1514,6 @@ test "x or true is comptime-known true" { |
| 1515 | 1514 | } |
| 1516 | 1515 | |
| 1517 | 1516 | test "non-optional and optional array elements concatenated" { |
| 1518 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 1519 | 1517 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 1520 | 1518 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 1521 | 1519 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
test/behavior/floatop.zig-7| ... | ... | @@ -21,7 +21,6 @@ fn epsForType(comptime T: type) T { |
| 21 | 21 | |
| 22 | 22 | test "floating point comparisons" { |
| 23 | 23 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 24 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 25 | 24 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 26 | 25 | |
| 27 | 26 | try testFloatComparisons(); |
| ... | ... | @@ -91,7 +90,6 @@ fn testDifferentSizedFloatComparisons() !void { |
| 91 | 90 | |
| 92 | 91 | test "negative f128 floatToInt at compile-time" { |
| 93 | 92 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 94 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 95 | 93 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 96 | 94 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 97 | 95 | |
| ... | ... | @@ -331,7 +329,6 @@ fn testExpWithVectors() !void { |
| 331 | 329 | |
| 332 | 330 | test "@exp2" { |
| 333 | 331 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 334 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 335 | 332 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 336 | 333 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 337 | 334 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -500,7 +497,6 @@ fn testLog10WithVectors() !void { |
| 500 | 497 | |
| 501 | 498 | test "@fabs" { |
| 502 | 499 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 503 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 504 | 500 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 505 | 501 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 506 | 502 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -627,7 +623,6 @@ test "a third @fabs test, surely there should not be three fabs tests" { |
| 627 | 623 | |
| 628 | 624 | test "@floor" { |
| 629 | 625 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 630 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 631 | 626 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 632 | 627 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 633 | 628 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -720,7 +715,6 @@ fn testFloorLegacy(comptime T: type, x: T) !void { |
| 720 | 715 | |
| 721 | 716 | test "@ceil" { |
| 722 | 717 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 723 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 724 | 718 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 725 | 719 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 726 | 720 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -813,7 +807,6 @@ fn testCeilLegacy(comptime T: type, x: T) !void { |
| 813 | 807 | |
| 814 | 808 | test "@trunc" { |
| 815 | 809 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 816 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 817 | 810 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 818 | 811 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 819 | 812 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
test/behavior/fn.zig-2| ... | ... | @@ -275,7 +275,6 @@ test "implicit cast fn call result to optional in field result" { |
| 275 | 275 | } |
| 276 | 276 | |
| 277 | 277 | test "void parameters" { |
| 278 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 279 | 278 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 280 | 279 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 281 | 280 | |
| ... | ... | @@ -300,7 +299,6 @@ fn acceptsString(foo: []u8) void { |
| 300 | 299 | } |
| 301 | 300 | |
| 302 | 301 | test "function pointers" { |
| 303 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 304 | 302 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 305 | 303 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 306 | 304 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
test/behavior/for.zig-8| ... | ... | @@ -110,7 +110,6 @@ test "basic for loop" { |
| 110 | 110 | } |
| 111 | 111 | |
| 112 | 112 | test "for with null and T peer types and inferred result location type" { |
| 113 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 114 | 113 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 115 | 114 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 116 | 115 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -152,7 +151,6 @@ test "2 break statements and an else" { |
| 152 | 151 | } |
| 153 | 152 | |
| 154 | 153 | test "for loop with pointer elem var" { |
| 155 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 156 | 154 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 157 | 155 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 158 | 156 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -198,7 +196,6 @@ test "for copies its payload" { |
| 198 | 196 | } |
| 199 | 197 | |
| 200 | 198 | test "for on slice with allowzero ptr" { |
| 201 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 202 | 199 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 203 | 200 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 204 | 201 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -253,7 +250,6 @@ test "for loop with else branch" { |
| 253 | 250 | test "count over fixed range" { |
| 254 | 251 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 255 | 252 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 256 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 257 | 253 | |
| 258 | 254 | var sum: usize = 0; |
| 259 | 255 | for (0..6) |i| { |
| ... | ... | @@ -266,7 +262,6 @@ test "count over fixed range" { |
| 266 | 262 | test "two counters" { |
| 267 | 263 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 268 | 264 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 269 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 270 | 265 | |
| 271 | 266 | var sum: usize = 0; |
| 272 | 267 | for (0..10, 10..20) |i, j| { |
| ... | ... | @@ -280,7 +275,6 @@ test "two counters" { |
| 280 | 275 | test "1-based counter and ptr to array" { |
| 281 | 276 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 282 | 277 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 283 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 284 | 278 | |
| 285 | 279 | var ok: usize = 0; |
| 286 | 280 | |
| ... | ... | @@ -401,7 +395,6 @@ test "raw pointer and counter" { |
| 401 | 395 | test "inline for with slice as the comptime-known" { |
| 402 | 396 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 403 | 397 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 404 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 405 | 398 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 406 | 399 | |
| 407 | 400 | const comptime_slice = "hello"; |
| ... | ... | @@ -432,7 +425,6 @@ test "inline for with slice as the comptime-known" { |
| 432 | 425 | test "inline for with counter as the comptime-known" { |
| 433 | 426 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 434 | 427 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 435 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 436 | 428 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 437 | 429 | |
| 438 | 430 | var runtime_slice = "hello"; |
test/behavior/generics.zig-3| ... | ... | @@ -56,7 +56,6 @@ fn sameButWithFloats(a: f64, b: f64) f64 { |
| 56 | 56 | } |
| 57 | 57 | |
| 58 | 58 | test "fn with comptime args" { |
| 59 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 60 | 59 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 61 | 60 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 62 | 61 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -67,7 +66,6 @@ test "fn with comptime args" { |
| 67 | 66 | } |
| 68 | 67 | |
| 69 | 68 | test "anytype params" { |
| 70 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 71 | 69 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 72 | 70 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 73 | 71 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -93,7 +91,6 @@ fn max_f64(a: f64, b: f64) f64 { |
| 93 | 91 | } |
| 94 | 92 | |
| 95 | 93 | test "type constructed by comptime function call" { |
| 96 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 97 | 94 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 98 | 95 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 99 | 96 |
test/behavior/if.zig-1| ... | ... | @@ -78,7 +78,6 @@ test "const result loc, runtime if cond, else unreachable" { |
| 78 | 78 | } |
| 79 | 79 | |
| 80 | 80 | test "if copies its payload" { |
| 81 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 82 | 81 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 83 | 82 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 84 | 83 |
test/behavior/inline_switch.zig-1| ... | ... | @@ -46,7 +46,6 @@ const U = union(E) { a: void, b: u2, c: u3, d: u4 }; |
| 46 | 46 | test "inline switch unions" { |
| 47 | 47 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 48 | 48 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 49 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 50 | 49 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 51 | 50 | |
| 52 | 51 | var x: U = .a; |
test/behavior/member_func.zig-2| ... | ... | @@ -27,7 +27,6 @@ const HasFuncs = struct { |
| 27 | 27 | }; |
| 28 | 28 | |
| 29 | 29 | test "standard field calls" { |
| 30 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 31 | 30 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 32 | 31 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 33 | 32 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -71,7 +70,6 @@ test "standard field calls" { |
| 71 | 70 | } |
| 72 | 71 | |
| 73 | 72 | test "@field field calls" { |
| 74 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 75 | 73 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 76 | 74 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 77 | 75 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
test/behavior/null.zig-3| ... | ... | @@ -50,7 +50,6 @@ test "rhs maybe unwrap return" { |
| 50 | 50 | } |
| 51 | 51 | |
| 52 | 52 | test "maybe return" { |
| 53 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 54 | 53 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 55 | 54 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 56 | 55 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -71,7 +70,6 @@ fn foo(x: ?i32) ?bool { |
| 71 | 70 | } |
| 72 | 71 | |
| 73 | 72 | test "test null runtime" { |
| 74 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 75 | 73 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 76 | 74 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 77 | 75 | |
| ... | ... | @@ -184,7 +182,6 @@ const SillyStruct = struct { |
| 184 | 182 | const here_is_a_null_literal = SillyStruct{ .context = null }; |
| 185 | 183 | |
| 186 | 184 | test "unwrap optional which is field of global var" { |
| 187 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 188 | 185 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 189 | 186 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 190 | 187 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
test/behavior/optional.zig-1| ... | ... | @@ -274,7 +274,6 @@ test "0-bit child type coerced to optional return ptr result location" { |
| 274 | 274 | } |
| 275 | 275 | |
| 276 | 276 | test "0-bit child type coerced to optional" { |
| 277 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 278 | 277 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 279 | 278 | |
| 280 | 279 | const S = struct { |
test/behavior/pointers.zig-2| ... | ... | @@ -190,7 +190,6 @@ test "compare equality of optional and non-optional pointer" { |
| 190 | 190 | test "allowzero pointer and slice" { |
| 191 | 191 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO |
| 192 | 192 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 193 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 194 | 193 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 195 | 194 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 196 | 195 | |
| ... | ... | @@ -510,7 +509,6 @@ test "ptrToInt on a generic function" { |
| 510 | 509 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 511 | 510 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 512 | 511 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 513 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 514 | 512 | |
| 515 | 513 | const S = struct { |
| 516 | 514 | fn generic(i: anytype) @TypeOf(i) { |
test/behavior/ptrcast.zig-1| ... | ... | @@ -53,7 +53,6 @@ fn testReinterpretStructWrappedBytesAsInteger() !void { |
| 53 | 53 | } |
| 54 | 54 | |
| 55 | 55 | test "reinterpret bytes of an array into an extern struct" { |
| 56 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 57 | 56 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 58 | 57 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 59 | 58 |
test/behavior/ref_var_in_if_after_if_2nd_switch_prong.zig-1| ... | ... | @@ -5,7 +5,6 @@ const mem = std.mem; |
| 5 | 5 | |
| 6 | 6 | var ok: bool = false; |
| 7 | 7 | test "reference a variable in an if after an if in the 2nd switch prong" { |
| 8 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 9 | 8 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 10 | 9 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 11 | 10 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
test/behavior/reflection.zig-1| ... | ... | @@ -27,7 +27,6 @@ fn dummy(a: bool, b: i32, c: f32) i32 { |
| 27 | 27 | |
| 28 | 28 | test "reflection: @field" { |
| 29 | 29 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 30 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 31 | 30 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 32 | 31 | |
| 33 | 32 | var f = Foo{ |
test/behavior/sizeof_and_typeof.zig-3| ... | ... | @@ -18,7 +18,6 @@ test "@sizeOf on compile-time types" { |
| 18 | 18 | } |
| 19 | 19 | |
| 20 | 20 | test "@TypeOf() with multiple arguments" { |
| 21 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 22 | 21 | { |
| 23 | 22 | var var_1: u32 = undefined; |
| 24 | 23 | var var_2: u8 = undefined; |
| ... | ... | @@ -138,7 +137,6 @@ test "@sizeOf(T) == 0 doesn't force resolving struct size" { |
| 138 | 137 | } |
| 139 | 138 | |
| 140 | 139 | test "@TypeOf() has no runtime side effects" { |
| 141 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 142 | 140 | const S = struct { |
| 143 | 141 | fn foo(comptime T: type, ptr: *T) T { |
| 144 | 142 | ptr.* += 1; |
| ... | ... | @@ -153,7 +151,6 @@ test "@TypeOf() has no runtime side effects" { |
| 153 | 151 | |
| 154 | 152 | test "branching logic inside @TypeOf" { |
| 155 | 153 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 156 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 157 | 154 | const S = struct { |
| 158 | 155 | var data: i32 = 0; |
| 159 | 156 | fn foo() anyerror!i32 { |
test/behavior/slice.zig-9| ... | ... | @@ -119,7 +119,6 @@ test "slice of type" { |
| 119 | 119 | } |
| 120 | 120 | |
| 121 | 121 | test "generic malloc free" { |
| 122 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 123 | 122 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 124 | 123 | |
| 125 | 124 | const a = memAlloc(u8, 10) catch unreachable; |
| ... | ... | @@ -171,7 +170,6 @@ test "comptime pointer cast array and then slice" { |
| 171 | 170 | |
| 172 | 171 | test "slicing zero length array" { |
| 173 | 172 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 174 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 175 | 173 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 176 | 174 | |
| 177 | 175 | const s1 = ""[0..]; |
| ... | ... | @@ -185,8 +183,6 @@ test "slicing zero length array" { |
| 185 | 183 | const x = @intToPtr([*]i32, 0x1000)[0..0x500]; |
| 186 | 184 | const y = x[0x100..]; |
| 187 | 185 | test "compile time slice of pointer to hard coded address" { |
| 188 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 189 | ||
| 190 | 186 | try expect(@ptrToInt(x) == 0x1000); |
| 191 | 187 | try expect(x.len == 0x500); |
| 192 | 188 | |
| ... | ... | @@ -342,7 +338,6 @@ test "@ptrCast slice to pointer" { |
| 342 | 338 | } |
| 343 | 339 | |
| 344 | 340 | test "slice syntax resulting in pointer-to-array" { |
| 345 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 346 | 341 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 347 | 342 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 348 | 343 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -477,7 +472,6 @@ test "slice syntax resulting in pointer-to-array" { |
| 477 | 472 | } |
| 478 | 473 | |
| 479 | 474 | test "slice pointer-to-array null terminated" { |
| 480 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 481 | 475 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 482 | 476 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 483 | 477 | |
| ... | ... | @@ -497,7 +491,6 @@ test "slice pointer-to-array null terminated" { |
| 497 | 491 | } |
| 498 | 492 | |
| 499 | 493 | test "slice pointer-to-array zero length" { |
| 500 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 501 | 494 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 502 | 495 | |
| 503 | 496 | comptime { |
| ... | ... | @@ -530,7 +523,6 @@ test "slice pointer-to-array zero length" { |
| 530 | 523 | } |
| 531 | 524 | |
| 532 | 525 | test "type coercion of pointer to anon struct literal to pointer to slice" { |
| 533 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 534 | 526 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 535 | 527 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 536 | 528 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -730,7 +722,6 @@ test "slice with dereferenced value" { |
| 730 | 722 | |
| 731 | 723 | test "empty slice ptr is non null" { |
| 732 | 724 | if (builtin.zig_backend == .stage2_aarch64 and builtin.os.tag == .macos) return error.SkipZigTest; // TODO |
| 733 | if (builtin.zig_backend == .stage2_x86_64 and (builtin.os.tag == .macos or builtin.os.tag == .windows)) return error.SkipZigTest; // TODO | |
| 734 | 725 | |
| 735 | 726 | const empty_slice: []u8 = &[_]u8{}; |
| 736 | 727 | const p: [*]u8 = empty_slice.ptr + 0; |
test/behavior/struct.zig-5| ... | ... | @@ -342,7 +342,6 @@ fn testPassSliceOfEmptyStructToFn(slice: []const EmptyStruct2) usize { |
| 342 | 342 | test "self-referencing struct via array member" { |
| 343 | 343 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 344 | 344 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 345 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 346 | 345 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 347 | 346 | |
| 348 | 347 | const T = struct { |
| ... | ... | @@ -536,7 +535,6 @@ test "implicit cast packed struct field to const ptr" { |
| 536 | 535 | } |
| 537 | 536 | |
| 538 | 537 | test "zero-bit field in packed struct" { |
| 539 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 540 | 538 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 541 | 539 | |
| 542 | 540 | const S = packed struct { |
| ... | ... | @@ -719,7 +717,6 @@ test "pointer to packed struct member in a stack variable" { |
| 719 | 717 | } |
| 720 | 718 | |
| 721 | 719 | test "packed struct with u0 field access" { |
| 722 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 723 | 720 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 724 | 721 | |
| 725 | 722 | const S = packed struct { |
| ... | ... | @@ -1018,7 +1015,6 @@ test "type coercion of anon struct literal to struct" { |
| 1018 | 1015 | } |
| 1019 | 1016 | |
| 1020 | 1017 | test "type coercion of pointer to anon struct literal to pointer to struct" { |
| 1021 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 1022 | 1018 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 1023 | 1019 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 1024 | 1020 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -1088,7 +1084,6 @@ test "packed struct with undefined initializers" { |
| 1088 | 1084 | } |
| 1089 | 1085 | |
| 1090 | 1086 | test "for loop over pointers to struct, getting field from struct pointer" { |
| 1091 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 1092 | 1087 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 1093 | 1088 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 1094 | 1089 |
test/behavior/struct_contains_null_ptr_itself.zig-1| ... | ... | @@ -4,7 +4,6 @@ const builtin = @import("builtin"); |
| 4 | 4 | |
| 5 | 5 | test "struct contains null pointer which contains original struct" { |
| 6 | 6 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 7 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 8 | 7 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 9 | 8 | |
| 10 | 9 | var x: ?*NodeLineComment = null; |
test/behavior/switch.zig-2| ... | ... | @@ -403,7 +403,6 @@ fn return_a_number() anyerror!i32 { |
| 403 | 403 | } |
| 404 | 404 | |
| 405 | 405 | test "switch on integer with else capturing expr" { |
| 406 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 407 | 406 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 408 | 407 | |
| 409 | 408 | const S = struct { |
| ... | ... | @@ -577,7 +576,6 @@ test "switch prongs with cases with identical payload types" { |
| 577 | 576 | } |
| 578 | 577 | |
| 579 | 578 | test "switch on pointer type" { |
| 580 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 581 | 579 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 582 | 580 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 583 | 581 |
test/behavior/threadlocal.zig-2| ... | ... | @@ -4,7 +4,6 @@ const expect = std.testing.expect; |
| 4 | 4 | |
| 5 | 5 | test "thread local variable" { |
| 6 | 6 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 7 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 8 | 7 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 9 | 8 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 10 | 9 | if (builtin.zig_backend == .stage2_llvm) switch (builtin.cpu.arch) { |
| ... | ... | @@ -40,7 +39,6 @@ threadlocal var buffer: [11]u8 = undefined; |
| 40 | 39 | |
| 41 | 40 | test "reference a global threadlocal variable" { |
| 42 | 41 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 43 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 44 | 42 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 45 | 43 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 46 | 44 | if (builtin.zig_backend == .stage2_llvm) switch (builtin.cpu.arch) { |
test/behavior/translate_c_macros.zig-1| ... | ... | @@ -79,7 +79,6 @@ test "casting to union with a macro" { |
| 79 | 79 | |
| 80 | 80 | test "casting or calling a value with a paren-surrounded macro" { |
| 81 | 81 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 82 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 83 | 82 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 84 | 83 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 85 | 84 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
test/behavior/tuple.zig-1| ... | ... | @@ -126,7 +126,6 @@ test "tuple initializer for var" { |
| 126 | 126 | } |
| 127 | 127 | |
| 128 | 128 | test "array-like initializer for tuple types" { |
| 129 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 130 | 129 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 131 | 130 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 132 | 131 |
test/behavior/type.zig-4| ... | ... | @@ -449,8 +449,6 @@ test "Type.Union" { |
| 449 | 449 | } |
| 450 | 450 | |
| 451 | 451 | test "Type.Union from Type.Enum" { |
| 452 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 453 | ||
| 454 | 452 | const Tag = @Type(.{ |
| 455 | 453 | .Enum = .{ |
| 456 | 454 | .tag_type = u0, |
| ... | ... | @@ -475,8 +473,6 @@ test "Type.Union from Type.Enum" { |
| 475 | 473 | } |
| 476 | 474 | |
| 477 | 475 | test "Type.Union from regular enum" { |
| 478 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 479 | ||
| 480 | 476 | const E = enum { working_as_expected }; |
| 481 | 477 | const T = @Type(.{ |
| 482 | 478 | .Union = .{ |
test/behavior/type_info.zig-2| ... | ... | @@ -509,7 +509,6 @@ test "type info for async frames" { |
| 509 | 509 | } |
| 510 | 510 | |
| 511 | 511 | test "Declarations are returned in declaration order" { |
| 512 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 513 | 512 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 514 | 513 | |
| 515 | 514 | const S = struct { |
| ... | ... | @@ -532,7 +531,6 @@ test "Struct.is_tuple for anon list literal" { |
| 532 | 531 | } |
| 533 | 532 | |
| 534 | 533 | test "Struct.is_tuple for anon struct literal" { |
| 535 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 536 | 534 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 537 | 535 | |
| 538 | 536 | const info = @typeInfo(@TypeOf(.{ .a = 0 })); |
test/behavior/union.zig-11| ... | ... | @@ -11,7 +11,6 @@ const FooWithFloats = union { |
| 11 | 11 | }; |
| 12 | 12 | |
| 13 | 13 | test "basic unions with floats" { |
| 14 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 15 | 14 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 16 | 15 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 17 | 16 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -215,7 +214,6 @@ const Payload = union(Letter) { |
| 215 | 214 | }; |
| 216 | 215 | |
| 217 | 216 | test "union with specified enum tag" { |
| 218 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 219 | 217 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 220 | 218 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 221 | 219 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -225,7 +223,6 @@ test "union with specified enum tag" { |
| 225 | 223 | } |
| 226 | 224 | |
| 227 | 225 | test "packed union generates correctly aligned type" { |
| 228 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 229 | 226 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 230 | 227 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 231 | 228 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -379,7 +376,6 @@ test "union with only 1 field which is void should be zero bits" { |
| 379 | 376 | } |
| 380 | 377 | |
| 381 | 378 | test "tagged union initialization with runtime void" { |
| 382 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 383 | 379 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 384 | 380 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 385 | 381 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -400,7 +396,6 @@ fn testTaggedUnionInit(x: anytype) bool { |
| 400 | 396 | pub const UnionEnumNoPayloads = union(enum) { A, B }; |
| 401 | 397 | |
| 402 | 398 | test "tagged union with no payloads" { |
| 403 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 404 | 399 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 405 | 400 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 406 | 401 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -466,7 +461,6 @@ pub const FooUnion = union(enum) { |
| 466 | 461 | var glbl_array: [2]FooUnion = undefined; |
| 467 | 462 | |
| 468 | 463 | test "initialize global array of union" { |
| 469 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 470 | 464 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 471 | 465 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 472 | 466 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -494,7 +488,6 @@ test "update the tag value for zero-sized unions" { |
| 494 | 488 | |
| 495 | 489 | test "union initializer generates padding only if needed" { |
| 496 | 490 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 497 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 498 | 491 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 499 | 492 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 500 | 493 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -561,7 +554,6 @@ const FooNoVoid = union(enum) { |
| 561 | 554 | const Baz = enum { A, B, C, D }; |
| 562 | 555 | |
| 563 | 556 | test "tagged union type" { |
| 564 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 565 | 557 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 566 | 558 | |
| 567 | 559 | const foo1 = TaggedFoo{ .One = 13 }; |
| ... | ... | @@ -598,7 +590,6 @@ fn returnAnInt(x: i32) TaggedFoo { |
| 598 | 590 | } |
| 599 | 591 | |
| 600 | 592 | test "tagged union with all void fields but a meaningful tag" { |
| 601 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 602 | 593 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 603 | 594 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 604 | 595 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -777,7 +768,6 @@ fn Setter(comptime attr: Attribute) type { |
| 777 | 768 | } |
| 778 | 769 | |
| 779 | 770 | test "return union init with void payload" { |
| 780 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 781 | 771 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 782 | 772 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 783 | 773 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| ... | ... | @@ -913,7 +903,6 @@ test "extern union doesn't trigger field check at comptime" { |
| 913 | 903 | test "anonymous union literal syntax" { |
| 914 | 904 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 915 | 905 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 916 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 917 | 906 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 918 | 907 | |
| 919 | 908 | const S = struct { |
test/behavior/union_with_members.zig-1| ... | ... | @@ -18,7 +18,6 @@ const ET = union(enum) { |
| 18 | 18 | |
| 19 | 19 | test "enum with members" { |
| 20 | 20 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 21 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 22 | 21 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 23 | 22 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 24 | 23 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
test/behavior/vector.zig-6| ... | ... | @@ -382,7 +382,6 @@ test "store vector elements via runtime index" { |
| 382 | 382 | } |
| 383 | 383 | |
| 384 | 384 | test "initialize vector which is a struct field" { |
| 385 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 386 | 385 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 387 | 386 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 388 | 387 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -794,7 +793,6 @@ test "vector reduce operation" { |
| 794 | 793 | |
| 795 | 794 | test "vector @reduce comptime" { |
| 796 | 795 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 797 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 798 | 796 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 799 | 797 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 800 | 798 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -1069,7 +1067,6 @@ test "alignment of vectors" { |
| 1069 | 1067 | |
| 1070 | 1068 | test "loading the second vector from a slice of vectors" { |
| 1071 | 1069 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 1072 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 1073 | 1070 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 1074 | 1071 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 1075 | 1072 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -1150,7 +1147,6 @@ test "byte vector initialized in inline function" { |
| 1150 | 1147 | |
| 1151 | 1148 | test "zero divisor" { |
| 1152 | 1149 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 1153 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 1154 | 1150 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 1155 | 1151 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 1156 | 1152 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -1171,7 +1167,6 @@ test "zero divisor" { |
| 1171 | 1167 | |
| 1172 | 1168 | test "zero multiplicand" { |
| 1173 | 1169 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 1174 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 1175 | 1170 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 1176 | 1171 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 1177 | 1172 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -1234,7 +1229,6 @@ test "load packed vector element" { |
| 1234 | 1229 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 1235 | 1230 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 1236 | 1231 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 1237 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 1238 | 1232 | |
| 1239 | 1233 | var x: @Vector(2, u15) = .{ 1, 4 }; |
| 1240 | 1234 | try expect((&x[0]).* == 1); |
test/behavior/void.zig-1| ... | ... | @@ -33,7 +33,6 @@ fn times(n: usize) []const void { |
| 33 | 33 | } |
| 34 | 34 | |
| 35 | 35 | test "void optional" { |
| 36 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 37 | 36 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 38 | 37 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 39 | 38 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
test/behavior/while.zig-8| ... | ... | @@ -104,7 +104,6 @@ fn testBreakOuter() void { |
| 104 | 104 | } |
| 105 | 105 | |
| 106 | 106 | test "while copies its payload" { |
| 107 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 108 | 107 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 109 | 108 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 110 | 109 | |
| ... | ... | @@ -143,7 +142,6 @@ fn runContinueAndBreakTest() !void { |
| 143 | 142 | } |
| 144 | 143 | |
| 145 | 144 | test "while with optional as condition" { |
| 146 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 147 | 145 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 148 | 146 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 149 | 147 | |
| ... | ... | @@ -156,7 +154,6 @@ test "while with optional as condition" { |
| 156 | 154 | } |
| 157 | 155 | |
| 158 | 156 | test "while with optional as condition with else" { |
| 159 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 160 | 157 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 161 | 158 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 162 | 159 | |
| ... | ... | @@ -174,7 +171,6 @@ test "while with optional as condition with else" { |
| 174 | 171 | } |
| 175 | 172 | |
| 176 | 173 | test "while with error union condition" { |
| 177 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 178 | 174 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 179 | 175 | |
| 180 | 176 | numbers_left = 10; |
| ... | ... | @@ -205,7 +201,6 @@ test "while on bool with else result follow break prong" { |
| 205 | 201 | } |
| 206 | 202 | |
| 207 | 203 | test "while on optional with else result follow else prong" { |
| 208 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 209 | 204 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 210 | 205 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 211 | 206 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -217,7 +212,6 @@ test "while on optional with else result follow else prong" { |
| 217 | 212 | } |
| 218 | 213 | |
| 219 | 214 | test "while on optional with else result follow break prong" { |
| 220 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 221 | 215 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 222 | 216 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 223 | 217 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -290,7 +284,6 @@ test "while bool 2 break statements and an else" { |
| 290 | 284 | } |
| 291 | 285 | |
| 292 | 286 | test "while optional 2 break statements and an else" { |
| 293 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 294 | 287 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 295 | 288 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 296 | 289 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -310,7 +303,6 @@ test "while optional 2 break statements and an else" { |
| 310 | 303 | } |
| 311 | 304 | |
| 312 | 305 | test "while error 2 break statements and an else" { |
| 313 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 314 | 306 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 315 | 307 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 316 | 308 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
test/behavior/widening.zig-1| ... | ... | @@ -28,7 +28,6 @@ test "integer widening u0 to u8" { |
| 28 | 28 | } |
| 29 | 29 | |
| 30 | 30 | test "implicit unsigned integer to signed integer" { |
| 31 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 32 | 31 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 33 | 32 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 34 | 33 |
tools/lldb_pretty_printers.py+1-1| ... | ... | @@ -1,6 +1,6 @@ |
| 1 | 1 | # pretty printing for the zig language, zig standard library, and zig stage 2 compiler. |
| 2 | 2 | # put commands in ~/.lldbinit to run them automatically when starting lldb |
| 3 | # `command script /path/to/stage2_lldb_pretty_printers.py` to import this file | |
| 3 | # `command script import /path/to/zig/tools/lldb_pretty_printers.py` to import this file | |
| 4 | 4 | # `type category enable zig` to enable pretty printing for the zig language |
| 5 | 5 | # `type category enable zig.std` to enable pretty printing for the zig standard library |
| 6 | 6 | # `type category enable zig.stage2` to enable pretty printing for the zig stage 2 compiler |