fix self-hosted compiler regressions

This commit is contained in:
Andrew Kelley 2019-11-29 21:49:08 -05:00
parent 7278c51ddd
commit 6936243ee1
No known key found for this signature in database
GPG Key ID: 7C5F548F728501A9
5 changed files with 27 additions and 23 deletions

View File

@ -178,7 +178,7 @@ pub const Args = struct {
else => @panic("attempted to retrieve flag with wrong type"),
}
} else {
return [_][]const u8{};
return &[_][]const u8{};
}
}
};

View File

@ -103,8 +103,8 @@ pub const ZigCompiler = struct {
/// Must be called only once, ever. Sets global state.
pub fn setLlvmArgv(allocator: *Allocator, llvm_argv: []const []const u8) !void {
if (llvm_argv.len != 0) {
var c_compatible_args = try std.cstr.NullTerminated2DArray.fromSlices(allocator, [_][]const []const u8{
[_][]const u8{"zig (LLVM option parsing)"},
var c_compatible_args = try std.cstr.NullTerminated2DArray.fromSlices(allocator, &[_][]const []const u8{
&[_][]const u8{"zig (LLVM option parsing)"},
llvm_argv,
});
defer c_compatible_args.deinit();
@ -359,7 +359,11 @@ pub const Compilation = struct {
is_static,
zig_lib_dir,
);
return optional_comp orelse if (await frame) |_| unreachable else |err| err;
if (optional_comp) |comp| {
return comp;
} else {
if (await frame) |_| unreachable else |err| return err;
}
}
async fn createAsync(
@ -412,20 +416,20 @@ pub const Compilation = struct {
.strip = false,
.is_static = is_static,
.linker_rdynamic = false,
.clang_argv = [_][]const u8{},
.lib_dirs = [_][]const u8{},
.rpath_list = [_][]const u8{},
.assembly_files = [_][]const u8{},
.link_objects = [_][]const u8{},
.clang_argv = &[_][]const u8{},
.lib_dirs = &[_][]const u8{},
.rpath_list = &[_][]const u8{},
.assembly_files = &[_][]const u8{},
.link_objects = &[_][]const u8{},
.fn_link_set = event.Locked(FnLinkSet).init(FnLinkSet.init()),
.windows_subsystem_windows = false,
.windows_subsystem_console = false,
.link_libs_list = undefined,
.libc_link_lib = null,
.err_color = errmsg.Color.Auto,
.darwin_frameworks = [_][]const u8{},
.darwin_frameworks = &[_][]const u8{},
.darwin_version_min = DarwinVersionMin.None,
.test_filters = [_][]const u8{},
.test_filters = &[_][]const u8{},
.test_name_prefix = null,
.emit_file_type = Emit.Binary,
.link_out_file = null,
@ -478,7 +482,7 @@ pub const Compilation = struct {
comp.name = try Buffer.init(comp.arena(), name);
comp.llvm_triple = try util.getTriple(comp.arena(), target);
comp.llvm_target = try util.llvmTargetFromTriple(comp.llvm_triple);
comp.zig_std_dir = try std.fs.path.join(comp.arena(), [_][]const u8{ zig_lib_dir, "std" });
comp.zig_std_dir = try std.fs.path.join(comp.arena(), &[_][]const u8{ zig_lib_dir, "std" });
const opt_level = switch (build_mode) {
.Debug => llvm.CodeGenLevelNone,
@ -520,7 +524,7 @@ pub const Compilation = struct {
comp.events = try allocator.create(event.Channel(Event));
defer allocator.destroy(comp.events);
comp.events.init([0]Event{});
comp.events.init(&[0]Event{});
defer comp.events.deinit();
if (root_src_path) |root_src| {

View File

@ -8,10 +8,10 @@ const warn = std.debug.warn;
/// Caller must free result
pub fn testZigInstallPrefix(allocator: *mem.Allocator, test_path: []const u8) ![]u8 {
const test_zig_dir = try fs.path.join(allocator, [_][]const u8{ test_path, "lib", "zig" });
const test_zig_dir = try fs.path.join(allocator, &[_][]const u8{ test_path, "lib", "zig" });
errdefer allocator.free(test_zig_dir);
const test_index_file = try fs.path.join(allocator, [_][]const u8{ test_zig_dir, "std", "std.zig" });
const test_index_file = try fs.path.join(allocator, &[_][]const u8{ test_zig_dir, "std", "std.zig" });
defer allocator.free(test_index_file);
var file = try fs.File.openRead(test_index_file);

View File

@ -193,7 +193,7 @@ pub const LibCInstallation = struct {
"/dev/null",
};
// TODO make this use event loop
const errorable_result = std.ChildProcess.exec(allocator, argv, null, null, 1024 * 1024);
const errorable_result = std.ChildProcess.exec(allocator, &argv, null, null, 1024 * 1024);
const exec_result = if (std.debug.runtime_safety) blk: {
break :blk errorable_result catch unreachable;
} else blk: {
@ -233,7 +233,7 @@ pub const LibCInstallation = struct {
while (path_i < search_paths.len) : (path_i += 1) {
const search_path_untrimmed = search_paths.at(search_paths.len - path_i - 1);
const search_path = std.mem.trimLeft(u8, search_path_untrimmed, " ");
const stdlib_path = try fs.path.join(allocator, [_][]const u8{ search_path, "stdlib.h" });
const stdlib_path = try fs.path.join(allocator, &[_][]const u8{ search_path, "stdlib.h" });
defer allocator.free(stdlib_path);
if (try fileExists(stdlib_path)) {
@ -401,7 +401,7 @@ async fn ccPrintFileName(allocator: *Allocator, o_file: []const u8, want_dirname
// TODO This simulates evented I/O for the child process exec
std.event.Loop.instance.?.yield();
const errorable_result = std.ChildProcess.exec(allocator, argv, null, null, 1024 * 1024);
const errorable_result = std.ChildProcess.exec(allocator, &argv, null, null, 1024 * 1024);
const exec_result = if (std.debug.runtime_safety) blk: {
break :blk errorable_result catch unreachable;
} else blk: {

View File

@ -191,12 +191,12 @@ const usage_build_generic =
const args_build_generic = [_]Flag{
Flag.Bool("--help"),
Flag.Option("--color", [_][]const u8{
Flag.Option("--color", &[_][]const u8{
"auto",
"off",
"on",
}),
Flag.Option("--mode", [_][]const u8{
Flag.Option("--mode", &[_][]const u8{
"debug",
"release-fast",
"release-safe",
@ -204,7 +204,7 @@ const args_build_generic = [_]Flag{
}),
Flag.ArgMergeN("--assembly", 1),
Flag.Option("--emit", [_][]const u8{
Flag.Option("--emit", &[_][]const u8{
"asm",
"bin",
"llvm-ir",
@ -252,7 +252,7 @@ const args_build_generic = [_]Flag{
};
fn buildOutputType(allocator: *Allocator, args: []const []const u8, out_type: Compilation.Kind) !void {
var flags = try Args.parse(allocator, args_build_generic, args);
var flags = try Args.parse(allocator, &args_build_generic, args);
defer flags.deinit();
if (flags.present("help")) {
@ -579,7 +579,7 @@ async fn findLibCAsync(zig_compiler: *ZigCompiler) void {
}
fn cmdFmt(allocator: *Allocator, args: []const []const u8) !void {
var flags = try Args.parse(allocator, args_fmt_spec, args);
var flags = try Args.parse(allocator, &args_fmt_spec, args);
defer flags.deinit();
if (flags.present("help")) {