Commit 44b322ce64
src/link/Wasm.zig
@@ -1909,6 +1909,17 @@ pub fn addOrUpdateImport(
global_gop.value_ptr.* = loc;
try wasm.resolved_symbols.put(wasm.base.allocator, loc, {});
try wasm.undefs.putNoClobber(wasm.base.allocator, decl_name_index, loc);
+ } else if (global_gop.value_ptr.*.index != symbol_index) {
+ // We are not updating a symbol, but found an existing global
+ // symbol with the same name. This means we always favor the
+ // existing symbol, regardless whether it's defined or not.
+ // We can also skip storing the import as we will not output
+ // this symbol.
+ return wasm.discarded.put(
+ wasm.base.allocator,
+ .{ .file = null, .index = symbol_index },
+ global_gop.value_ptr.*,
+ );
}
if (type_index) |ty_index| {
@@ -1924,8 +1935,8 @@ pub fn addOrUpdateImport(
};
}
} else {
+ // non-functions will not be imported from the runtime, but only resolved during link-time
symbol.tag = .data;
- return; // non-functions will not be imported from the runtime, but only resolved during link-time
}
}
test/behavior/bugs/529.zig
@@ -11,7 +11,6 @@ comptime {
const builtin = @import("builtin");
test "issue 529 fixed" {
- if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO