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 {...@@ -851,8 +851,6 @@ pub fn update(self: *Module) !void {
851851
852 self.generation += 1;852 self.generation += 1;
853853
854 self.clearErrors();
855
856 // TODO Use the cache hash file system to detect which source files changed.854 // TODO Use the cache hash file system to detect which source files changed.
857 // Until then we simulate a full cache miss. Source files could have been loaded for any reason;855 // Until then we simulate a full cache miss. Source files could have been loaded for any reason;
858 // to force a refresh we unload now.856 // to force a refresh we unload now.
...@@ -916,31 +914,6 @@ pub fn totalErrorCount(self: *Module) usize {...@@ -916,31 +914,6 @@ pub fn totalErrorCount(self: *Module) usize {
916 return if (total == 0) @boolToInt(self.link_error_flags.no_entry_point_found) else total;914 return if (total == 0) @boolToInt(self.link_error_flags.no_entry_point_found) else total;
917}915}
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
944pub fn getAllErrorsAlloc(self: *Module) !AllErrors {917pub fn getAllErrorsAlloc(self: *Module) !AllErrors {
945 var arena = std.heap.ArenaAllocator.init(self.allocator);918 var arena = std.heap.ArenaAllocator.init(self.allocator);
946 errdefer arena.deinit();919 errdefer arena.deinit();
...@@ -1899,6 +1872,9 @@ fn deleteDeclExports(self: *Module, decl: *Decl) void {...@@ -1899,6 +1872,9 @@ fn deleteDeclExports(self: *Module, decl: *Decl) void {
1899 }1872 }
19001873
1901 self.bin_file.deleteExport(exp.link);1874 self.bin_file.deleteExport(exp.link);
1875 if (self.failed_exports.remove(exp)) |entry| {
1876 entry.value.destroy(self.allocator);
1877 }
1902 self.allocator.destroy(exp);1878 self.allocator.destroy(exp);
1903 }1879 }
1904 self.allocator.free(kv.value);1880 self.allocator.free(kv.value);
...@@ -2191,6 +2167,7 @@ fn analyzeExport(self: *Module, scope: *Scope, src: usize, symbol_name: []const...@@ -2191,6 +2167,7 @@ fn analyzeExport(self: *Module, scope: *Scope, src: usize, symbol_name: []const
2191 "exported symbol collision: {}",2167 "exported symbol collision: {}",
2192 .{symbol_name},2168 .{symbol_name},
2193 ));2169 ));
2170 new_export.status = .failed;
2194 } else {2171 } else {
2195 self.bin_file.updateDeclExports(self, exported_decl, de_gop.kv.value) catch |err| switch (err) {2172 self.bin_file.updateDeclExports(self, exported_decl, de_gop.kv.value) catch |err| switch (err) {
2196 error.OutOfMemory => return error.OutOfMemory,2173 error.OutOfMemory => return error.OutOfMemory,
test/stage2/compile_errors.zig+1-1
...@@ -70,7 +70,7 @@ pub fn addCases(ctx: *TestContext) !void {...@@ -70,7 +70,7 @@ pub fn addCases(ctx: *TestContext) !void {
70 );70 );
7171
72 // TODO: need to make sure this works with other variants of export.72 // 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,
74 \\export fn entry() void {}74 \\export fn entry() void {}
75 \\export fn entry() void {}75 \\export fn entry() void {}
76 , &[_][]const u8{":2:11: error: redefinition of 'entry'"},76 , &[_][]const u8{":2:11: error: redefinition of 'entry'"},