authorgravatar for noam@pixelhero.devNoam Preil <noam@pixelhero.dev> 2020-06-27 07:16:59-04:00
committergravatar for noam@pixelhero.devNoam Preil <noam@pixelhero.dev> 2020-06-27 07:17:20-04:00
logab307a22f627fd01ef6220d62a0312fdd610eaed
treee2f75ed97513238b5172079a0b993c1912b4d093
parent52787f2c9b8157f348a34f19a22025b78f95b873
signature Commit is signed but in an unrecognized format.

Stage2: remove clearErrors, fix ZIR export collision detection


2 files changed, 5 insertions(+), 28 deletions(-)

src-self-hosted/Module.zig+4-27
......@@ -851,8 +851,6 @@ pub fn update(self: *Module) !void {
851851
852852 self.generation += 1;
853853
854 self.clearErrors();
855
856854 // TODO Use the cache hash file system to detect which source files changed.
857855 // Until then we simulate a full cache miss. Source files could have been loaded for any reason;
858856 // to force a refresh we unload now.
......@@ -916,31 +914,6 @@ pub fn totalErrorCount(self: *Module) usize {
916914 return if (total == 0) @boolToInt(self.link_error_flags.no_entry_point_found) else total;
917915}
918916
919pub fn clearErrors(self: *Module) void {
920 const allocator = self.allocator;
921 {
922 var it = self.failed_decls.iterator();
923 while (it.next()) |kv| {
924 kv.value.destroy(allocator);
925 }
926 self.failed_decls.clear();
927 }
928 {
929 var it = self.failed_files.iterator();
930 while (it.next()) |kv| {
931 kv.value.destroy(allocator);
932 }
933 self.failed_files.clear();
934 }
935 {
936 var it = self.failed_exports.iterator();
937 while (it.next()) |kv| {
938 kv.value.destroy(allocator);
939 }
940 self.failed_exports.clear();
941 }
942}
943
944917pub fn getAllErrorsAlloc(self: *Module) !AllErrors {
945918 var arena = std.heap.ArenaAllocator.init(self.allocator);
946919 errdefer arena.deinit();
......@@ -1899,6 +1872,9 @@ fn deleteDeclExports(self: *Module, decl: *Decl) void {
18991872 }
19001873
19011874 self.bin_file.deleteExport(exp.link);
1875 if (self.failed_exports.remove(exp)) |entry| {
1876 entry.value.destroy(self.allocator);
1877 }
19021878 self.allocator.destroy(exp);
19031879 }
19041880 self.allocator.free(kv.value);
......@@ -2191,6 +2167,7 @@ fn analyzeExport(self: *Module, scope: *Scope, src: usize, symbol_name: []const
21912167 "exported symbol collision: {}",
21922168 .{symbol_name},
21932169 ));
2170 new_export.status = .failed;
21942171 } else {
21952172 self.bin_file.updateDeclExports(self, exported_decl, de_gop.kv.value) catch |err| switch (err) {
21962173 error.OutOfMemory => return error.OutOfMemory,
test/stage2/compile_errors.zig+1-1
......@@ -70,7 +70,7 @@ pub fn addCases(ctx: *TestContext) !void {
7070 );
7171
7272 // TODO: need to make sure this works with other variants of export.
73 ctx.incrementalFailure("function redefinition", linux_x64,
73 ctx.incrementalFailure("exported symbol collision", linux_x64,
7474 \\export fn entry() void {}
7575 \\export fn entry() void {}
7676 , &[_][]const u8{":2:11: error: redefinition of 'entry'"},