Sema: dummy implementation of @errorReturnTrace

Also update std/build.zig to use stage2 function pointer semantics.

This gets us a little bit closer to `zig build` working, although it is
now hitting a new crash in the compiler.
This commit is contained in:
Andrew Kelley 2022-03-21 19:07:20 -07:00
parent be579d4797
commit 0fb005d1d0
3 changed files with 16 additions and 8 deletions

View File

@ -3256,11 +3256,16 @@ const ThisModule = @This();
pub const Step = struct {
id: Id,
name: []const u8,
makeFn: fn (self: *Step) anyerror!void,
makeFn: MakeFn,
dependencies: ArrayList(*Step),
loop_flag: bool,
done_flag: bool,
const MakeFn = switch (builtin.zig_backend) {
.stage1 => fn (self: *Step) anyerror!void,
else => *const fn (self: *Step) anyerror!void,
};
pub const Id = enum {
top_level,
lib_exe_obj,
@ -3279,7 +3284,7 @@ pub const Step = struct {
custom,
};
pub fn init(id: Id, name: []const u8, allocator: Allocator, makeFn: fn (*Step) anyerror!void) Step {
pub fn init(id: Id, name: []const u8, allocator: Allocator, makeFn: MakeFn) Step {
return Step{
.id = id,
.name = allocator.dupe(u8, name) catch unreachable,

View File

@ -408,11 +408,6 @@ fn posixCallMainAndExit() noreturn {
// Initialize the TLS area.
std.os.linux.tls.initStaticTLS(phdrs);
if (builtin.zig_backend == .stage2_llvm) {
root.main();
exit2(0);
}
// The way Linux executables represent stack size is via the PT_GNU_STACK
// program header. However the kernel does not recognize it; it always gives 8 MiB.
// Here we look for the stack size in our program headers and use setrlimit
@ -454,6 +449,10 @@ fn callMainWithArgs(argc: usize, argv: [*][*:0]u8, envp: [][*:0]u8) u8 {
std.os.argv = argv[0..argc];
std.os.environ = envp;
if (builtin.zig_backend == .stage2_llvm) {
return @call(.{ .modifier = .always_inline }, callMain, .{});
}
std.debug.maybeEnableSegfaultHandler();
return initEventLoopAndCallMain();

View File

@ -12439,7 +12439,11 @@ fn zirErrorReturnTrace(
extended: Zir.Inst.Extended.InstData,
) CompileError!Air.Inst.Ref {
const src: LazySrcLoc = .{ .node_offset = @bitCast(i32, extended.operand) };
return sema.fail(block, src, "TODO: Sema.zirErrorReturnTrace", .{});
const unresolved_stack_trace_ty = try sema.getBuiltinType(block, src, "StackTrace");
const stack_trace_ty = try sema.resolveTypeFields(block, src, unresolved_stack_trace_ty);
const opt_stack_trace_ty = try Type.optional(sema.arena, stack_trace_ty);
// https://github.com/ziglang/zig/issues/11259
return sema.addConstant(opt_stack_trace_ty, Value.@"null");
}
fn zirFrame(