From afec3e72f438fae41e493e3fd18ca62e5ef1c89b Mon Sep 17 00:00:00 2001 From: Noam Preil Date: Mon, 15 Jun 2020 20:42:22 -0400 Subject: [PATCH] Stage2/Testing: Enable another test --- src-self-hosted/test.zig | 13 +++++++++---- test/stage2/compile_errors.zig | 26 +++++++++++++------------- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src-self-hosted/test.zig b/src-self-hosted/test.zig index ad0bd4a640..78bdcddf71 100644 --- a/src-self-hosted/test.zig +++ b/src-self-hosted/test.zig @@ -110,20 +110,25 @@ pub const TestContext = struct { pub fn addError(self: *ZIRCase, src: [:0]const u8, errors: []const []const u8) void { var array = self.updates.allocator.alloc(ErrorMsg, errors.len) catch unreachable; for (errors) |e, i| { + if (e[0] != ':') { + std.debug.panic("Invalid test: error must be specified as follows:\n:line:column: error: message\n=========\n", .{}); + } var cur = e[1..]; var line_index = std.mem.indexOf(u8, cur, ":"); if (line_index == null) { - std.debug.panic("Invalid test: error must be specified as ':line:column: error: msg', found '{}'", .{e}); + std.debug.panic("Invalid test: error must be specified as follows:\n:line:column: error: message\n=========\n", .{}); } const line = std.fmt.parseInt(u32, cur[0..line_index.?], 10) catch @panic("Unable to parse line number"); cur = cur[line_index.? + 1 ..]; const column_index = std.mem.indexOf(u8, cur, ":"); if (column_index == null) { - std.debug.panic("Invalid test: error must be specified as ':line:column: error: msg', found '{}'", .{e}); + std.debug.panic("Invalid test: error must be specified as follows:\n:line:column: error: message\n=========\n", .{}); } const column = std.fmt.parseInt(u32, cur[0..column_index.?], 10) catch @panic("Unable to parse column number"); cur = cur[column_index.? + 2 ..]; - std.debug.assert(std.mem.eql(u8, cur[0..7], "error: ")); + if (!std.mem.eql(u8, cur[0..7], "error: ")) { + std.debug.panic("Invalid test: error must be specified as follows:\n:line:column: error: message\n=========\n", .{}); + } const msg = cur[7..]; if (line == 0 or column == 0) { @@ -312,7 +317,7 @@ pub const TestContext = struct { break; } } else { - std.debug.warn("{}\nUnexpected error:\n================\n{}:{}: {}\n================\nTest failed.\n", .{ case.name, a.line + 1, a.column + 1, a.msg }); + std.debug.warn("{}\nUnexpected error:\n================\n:{}:{}: error: {}\n================\nTest failed.\n", .{ case.name, a.line + 1, a.column + 1, a.msg }); std.process.exit(1); } } diff --git a/test/stage2/compile_errors.zig b/test/stage2/compile_errors.zig index 72c41f1230..5484b6459a 100644 --- a/test/stage2/compile_errors.zig +++ b/test/stage2/compile_errors.zig @@ -18,20 +18,20 @@ pub fn addCases(ctx: *TestContext) !void { \\@start = fn(@start_fnty, { \\ %0 = call(%test, []) \\}) - , &[_][]const u8{":5:13: error: unrecognized identifier: %test"}); + // TODO: address inconsistency in this message and the one in the next test + , &[_][]const u8{":5:13: error: unrecognized identifier: %test"}); - // TODO: fix this test - // ctx.addZIRError("call with non-existent target", linux_x64, - // \\@noreturn = primitive(noreturn) - // \\ - // \\@start_fnty = fntype([], @noreturn, cc=Naked) - // \\@start = fn(@start_fnty, { - // \\ %0 = call(@notafunc, []) - // \\}) - // \\@0 = str("_start") - // \\@1 = ref(@0) - // \\@2 = export(@1, @start) - // , &[_][]const u8{"5:13:unrecognized identifier: @notafunc"}); + ctx.addZIRError("call with non-existent target", linux_x64, + \\@noreturn = primitive(noreturn) + \\ + \\@start_fnty = fntype([], @noreturn, cc=Naked) + \\@start = fn(@start_fnty, { + \\ %0 = call(@notafunc, []) + \\}) + \\@0 = str("_start") + \\@1 = ref(@0) + \\@2 = export(@1, @start) + , &[_][]const u8{":5:13: error: use of undeclared identifier 'notafunc'"}); // TODO: this error should occur at the call site, not the fntype decl ctx.addZIRError("call naked function", linux_x64,