From f01366e8b3ff46831feef2ceb13c5602c0ae3e99 Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Tue, 3 Aug 2021 23:39:32 +0200 Subject: [PATCH] macho: exclude tentative def before checking for collision when resolving global symbols. --- src/link/MachO.zig | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/link/MachO.zig b/src/link/MachO.zig index d78f0dc942..17e17f13f0 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -2167,19 +2167,16 @@ fn resolveSymbolsInObject( .global => { const global = &self.globals.items[resolv.where_index]; - if (!(symbolIsWeakDef(sym) or symbolIsPext(sym)) and + if (symbolIsTentative(global.*)) { + _ = tentatives.fetchSwapRemove(resolv.where_index); + } else if (!(symbolIsWeakDef(sym) or symbolIsPext(sym)) and !(symbolIsWeakDef(global.*) or symbolIsPext(global.*))) { log.err("symbol '{s}' defined multiple times", .{sym_name}); log.err(" first definition in '{s}'", .{self.objects.items[resolv.file].name}); log.err(" next definition in '{s}'", .{object.name}); return error.MultipleSymbolDefinitions; - } - if (symbolIsWeakDef(sym) or symbolIsPext(sym)) continue; // Current symbol is weak, so skip it. - - if (symbolIsTentative(global.*)) { - _ = tentatives.fetchSwapRemove(resolv.where_index); - } + } else if (symbolIsWeakDef(sym) or symbolIsPext(sym)) continue; // Current symbol is weak, so skip it. // Otherwise, update the resolver and the global symbol. global.n_type = sym.n_type;