authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-04-22 23:10:02+03:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-05-16 17:42:51-07:00
log66c3988e5eebd423844d5dd20c762d6fefe20adf
treefa946dcc687f49cf8e20851f15bb1f5028beef93
parenteee8fffec70b1d3e2900970dbe836e346e499231

stage2: disable error return tracing on unsupported targets


8 files changed, 42 insertions(+), 64 deletions(-)

lib/test_runner.zig+2-2
......@@ -92,9 +92,9 @@ pub fn main() void {
9292 fail_count += 1;
9393 progress.log("FAIL ({s})\n", .{@errorName(err)});
9494 if (!have_tty) std.debug.print("FAIL ({s})\n", .{@errorName(err)});
95 if (builtin.zig_backend != .stage2_llvm) if (@errorReturnTrace()) |trace| {
95 if (@errorReturnTrace()) |trace| {
9696 std.debug.dumpStackTrace(trace.*);
97 };
97 }
9898 test_node.end();
9999 },
100100 }
src/Sema.zig+18-2
......@@ -1412,6 +1412,12 @@ fn analyzeAsType(
14121412}
14131413
14141414pub fn setupErrorReturnTrace(sema: *Sema, block: *Block, last_arg_index: usize) !void {
1415 const backend_supports_error_return_tracing = false;
1416 if (!backend_supports_error_return_tracing) {
1417 // TODO implement this feature in all the backends and then delete this branch
1418 return;
1419 }
1420
14151421 var err_trace_block = block.makeSubBlock();
14161422 err_trace_block.is_comptime = false;
14171423 defer err_trace_block.instructions.deinit(sema.gpa);
......@@ -12655,7 +12661,12 @@ fn analyzeRet(
1265512661 return always_noreturn;
1265612662 }
1265712663
12658 if (sema.fn_ret_ty.isError() and sema.mod.comp.bin_file.options.error_return_tracing) {
12664 // TODO implement this feature in all the backends and then delete this check.
12665 const backend_supports_error_return_tracing = false;
12666
12667 if (sema.fn_ret_ty.isError() and sema.mod.comp.bin_file.options.error_return_tracing and
12668 backend_supports_error_return_tracing)
12669 {
1265912670 const return_err_fn = try sema.getBuiltin(block, src, "returnError");
1266012671 const unresolved_stack_trace_ty = try sema.getBuiltinType(block, src, "StackTrace");
1266112672 const stack_trace_ty = try sema.resolveTypeFields(block, src, unresolved_stack_trace_ty);
......@@ -13397,9 +13408,14 @@ fn zirErrorReturnTrace(
1339713408 const unresolved_stack_trace_ty = try sema.getBuiltinType(block, src, "StackTrace");
1339813409 const stack_trace_ty = try sema.resolveTypeFields(block, src, unresolved_stack_trace_ty);
1339913410 const opt_ptr_stack_trace_ty = try Type.Tag.optional_single_mut_pointer.create(sema.arena, stack_trace_ty);
13411
13412 // TODO implement this feature in all the backends and then delete this check.
13413 const backend_supports_error_return_tracing = false;
13414
1340013415 if (sema.owner_func != null and
1340113416 sema.owner_func.?.calls_or_awaits_errorable_fn and
13402 sema.mod.comp.bin_file.options.error_return_tracing)
13417 sema.mod.comp.bin_file.options.error_return_tracing and
13418 backend_supports_error_return_tracing)
1340313419 {
1340413420 return block.addTy(.err_return_trace, opt_ptr_stack_trace_ty);
1340513421 }
src/arch/aarch64/CodeGen.zig+4-8
......@@ -2333,21 +2333,17 @@ fn airErrUnionPayloadPtrSet(self: *Self, inst: Air.Inst.Index) !void {
23332333}
23342334
23352335fn airErrReturnTrace(self: *Self, inst: Air.Inst.Index) !void {
2336 const ty_op = self.air.instructions.items(.data)[inst].ty_op;
2336 _ = inst;
23372337 const result: MCValue = if (self.liveness.isUnused(inst))
23382338 .dead
23392339 else
23402340 return self.fail("TODO implement airErrReturnTrace for {}", .{self.target.cpu.arch});
2341 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
2341 return self.finishAir(inst, result, .{ .none, .none, .none });
23422342}
23432343
23442344fn airSetErrReturnTrace(self: *Self, inst: Air.Inst.Index) !void {
2345 const ty_op = self.air.instructions.items(.data)[inst].ty_op;
2346 const result: MCValue = if (self.liveness.isUnused(inst))
2347 .dead
2348 else
2349 return self.fail("TODO implement airSetErrReturnTrace for {}", .{self.target.cpu.arch});
2350 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
2345 _ = inst;
2346 return self.fail("TODO implement airSetErrReturnTrace for {}", .{self.target.cpu.arch});
23512347}
23522348
23532349fn airWrapOptional(self: *Self, inst: Air.Inst.Index) !void {
src/arch/arm/CodeGen.zig+4-8
......@@ -1846,21 +1846,17 @@ fn airErrUnionPayloadPtrSet(self: *Self, inst: Air.Inst.Index) !void {
18461846}
18471847
18481848fn airErrReturnTrace(self: *Self, inst: Air.Inst.Index) !void {
1849 const ty_op = self.air.instructions.items(.data)[inst].ty_op;
1849 _ = inst;
18501850 const result: MCValue = if (self.liveness.isUnused(inst))
18511851 .dead
18521852 else
18531853 return self.fail("TODO implement airErrReturnTrace for {}", .{self.target.cpu.arch});
1854 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
1854 return self.finishAir(inst, result, .{ .none, .none, .none });
18551855}
18561856
18571857fn airSetErrReturnTrace(self: *Self, inst: Air.Inst.Index) !void {
1858 const ty_op = self.air.instructions.items(.data)[inst].ty_op;
1859 const result: MCValue = if (self.liveness.isUnused(inst))
1860 .dead
1861 else
1862 return self.fail("TODO implement airSetErrReturnTrace for {}", .{self.target.cpu.arch});
1863 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
1858 _ = inst;
1859 return self.fail("TODO implement airSetErrReturnTrace for {}", .{self.target.cpu.arch});
18641860}
18651861
18661862/// T to E!T
src/arch/riscv64/CodeGen.zig+4-8
......@@ -1270,21 +1270,17 @@ fn airErrUnionPayloadPtrSet(self: *Self, inst: Air.Inst.Index) !void {
12701270}
12711271
12721272fn airErrReturnTrace(self: *Self, inst: Air.Inst.Index) !void {
1273 const ty_op = self.air.instructions.items(.data)[inst].ty_op;
1273 _ = inst;
12741274 const result: MCValue = if (self.liveness.isUnused(inst))
12751275 .dead
12761276 else
12771277 return self.fail("TODO implement airErrReturnTrace for {}", .{self.target.cpu.arch});
1278 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
1278 return self.finishAir(inst, result, .{ .none, .none, .none });
12791279}
12801280
12811281fn airSetErrReturnTrace(self: *Self, inst: Air.Inst.Index) !void {
1282 const ty_op = self.air.instructions.items(.data)[inst].ty_op;
1283 const result: MCValue = if (self.liveness.isUnused(inst))
1284 .dead
1285 else
1286 return self.fail("TODO implement airSetErrReturnTrace for {}", .{self.target.cpu.arch});
1287 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
1282 _ = inst;
1283 return self.fail("TODO implement airSetErrReturnTrace for {}", .{self.target.cpu.arch});
12881284}
12891285
12901286fn airWrapOptional(self: *Self, inst: Air.Inst.Index) !void {
src/arch/x86_64/CodeGen.zig+4-8
......@@ -1858,21 +1858,17 @@ fn airErrUnionPayloadPtrSet(self: *Self, inst: Air.Inst.Index) !void {
18581858}
18591859
18601860fn airErrReturnTrace(self: *Self, inst: Air.Inst.Index) !void {
1861 const ty_op = self.air.instructions.items(.data)[inst].ty_op;
1861 _ = inst;
18621862 const result: MCValue = if (self.liveness.isUnused(inst))
18631863 .dead
18641864 else
18651865 return self.fail("TODO implement airErrReturnTrace for {}", .{self.target.cpu.arch});
1866 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
1866 return self.finishAir(inst, result, .{ .none, .none, .none });
18671867}
18681868
18691869fn airSetErrReturnTrace(self: *Self, inst: Air.Inst.Index) !void {
1870 const ty_op = self.air.instructions.items(.data)[inst].ty_op;
1871 const result: MCValue = if (self.liveness.isUnused(inst))
1872 .dead
1873 else
1874 return self.fail("TODO implement airSetErrReturnTrace for {}", .{self.target.cpu.arch});
1875 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
1870 _ = inst;
1871 return self.fail("TODO implement airSetErrReturnTrace for {}", .{self.target.cpu.arch});
18761872}
18771873
18781874fn airWrapOptional(self: *Self, inst: Air.Inst.Index) !void {
src/codegen/c.zig+1-23
......@@ -3451,33 +3451,11 @@ fn airErrUnionPayloadPtrSet(f: *Function, inst: Air.Inst.Index) !CValue {
34513451
34523452fn airErrReturnTrace(f: *Function, inst: Air.Inst.Index) !CValue {
34533453 if (f.liveness.isUnused(inst)) return CValue.none;
3454
3455 const un_op = f.air.instructions.items(.data)[inst].un_op;
3456 const writer = f.object.writer();
3457 const inst_ty = f.air.typeOfIndex(inst);
3458 const operand = try f.resolveInst(un_op);
3459 const local = try f.allocLocal(inst_ty, .Const);
3460
3461 try writer.writeAll(" = ");
3462
3463 _ = operand;
3464 _ = local;
34653454 return f.fail("TODO: C backend: implement airErrReturnTrace", .{});
34663455}
34673456
34683457fn airSetErrReturnTrace(f: *Function, inst: Air.Inst.Index) !CValue {
3469 if (f.liveness.isUnused(inst)) return CValue.none;
3470
3471 const un_op = f.air.instructions.items(.data)[inst].un_op;
3472 const writer = f.object.writer();
3473 const inst_ty = f.air.typeOfIndex(inst);
3474 const operand = try f.resolveInst(un_op);
3475 const local = try f.allocLocal(inst_ty, .Const);
3476
3477 try writer.writeAll(" = ");
3478
3479 _ = operand;
3480 _ = local;
3458 _ = inst;
34813459 return f.fail("TODO: C backend: implement airSetErrReturnTrace", .{});
34823460}
34833461
src/codegen/llvm.zig+5-5
......@@ -637,7 +637,7 @@ pub const Object = struct {
637637 const gpa = dg.gpa;
638638
639639 const err_return_tracing = fn_info.return_type.isError() and
640 dg.module.comp.bin_file.options.error_return_tracing;
640 dg.module.comp.bin_file.options.error_return_tracing and false;
641641
642642 const err_ret_trace = if (err_return_tracing)
643643 llvm_func.getParam(@boolToInt(ret_ptr != null))
......@@ -1765,7 +1765,7 @@ pub const Object = struct {
17651765 }
17661766
17671767 if (fn_info.return_type.isError() and
1768 o.module.comp.bin_file.options.error_return_tracing)
1768 o.module.comp.bin_file.options.error_return_tracing and false)
17691769 {
17701770 var ptr_ty_payload: Type.Payload.ElemType = .{
17711771 .base = .{ .tag = .single_mut_pointer },
......@@ -2018,7 +2018,7 @@ pub const DeclGen = struct {
20182018 }
20192019
20202020 const err_return_tracing = fn_info.return_type.isError() and
2021 dg.module.comp.bin_file.options.error_return_tracing;
2021 dg.module.comp.bin_file.options.error_return_tracing and false;
20222022
20232023 if (err_return_tracing) {
20242024 dg.addArgAttr(llvm_fn, @boolToInt(sret), "nonnull");
......@@ -2484,7 +2484,7 @@ pub const DeclGen = struct {
24842484 }
24852485
24862486 if (fn_info.return_type.isError() and
2487 dg.module.comp.bin_file.options.error_return_tracing)
2487 dg.module.comp.bin_file.options.error_return_tracing and false)
24882488 {
24892489 var ptr_ty_payload: Type.Payload.ElemType = .{
24902490 .base = .{ .tag = .single_mut_pointer },
......@@ -3796,7 +3796,7 @@ pub const FuncGen = struct {
37963796 };
37973797
37983798 if (fn_info.return_type.isError() and
3799 self.dg.module.comp.bin_file.options.error_return_tracing)
3799 self.dg.module.comp.bin_file.options.error_return_tracing and false)
38003800 {
38013801 try llvm_args.append(self.err_ret_trace.?);
38023802 }