@@ -1990,9 +1990,6 @@ pub fn create(gpa: Allocator, arena: Allocator, options: CreateOptions) !*Compil
1990
1990
};
1991
1991
errdefer if (opt_zcu ) | zcu | zcu .deinit ();
1992
1992
1993
- var windows_libs = try std .StringArrayHashMapUnmanaged (void ).init (gpa , options .windows_lib_names , &.{});
1994
- errdefer windows_libs .deinit (gpa );
1995
-
1996
1993
comp .* = .{
1997
1994
.gpa = gpa ,
1998
1995
.arena = arena ,
@@ -2037,7 +2034,7 @@ pub fn create(gpa: Allocator, arena: Allocator, options: CreateOptions) !*Compil
2037
2034
.incremental = options .incremental ,
2038
2035
.root_name = root_name ,
2039
2036
.sysroot = sysroot ,
2040
- .windows_libs = windows_libs ,
2037
+ .windows_libs = .empty ,
2041
2038
.version = options .version ,
2042
2039
.libc_installation = libc_dirs .libc_installation ,
2043
2040
.compiler_rt_strat = compiler_rt_strat ,
@@ -2065,6 +2062,13 @@ pub fn create(gpa: Allocator, arena: Allocator, options: CreateOptions) !*Compil
2065
2062
.emit_docs = try options .emit_docs .resolve (arena , & options , .docs ),
2066
2063
};
2067
2064
2065
+ errdefer {
2066
+ for (comp .windows_libs .keys ()) | windows_lib | gpa .free (windows_lib );
2067
+ comp .windows_libs .deinit (gpa );
2068
+ }
2069
+ try comp .windows_libs .ensureUnusedCapacity (gpa , options .windows_lib_names .len );
2070
+ for (options .windows_lib_names ) | windows_lib | comp .windows_libs .putAssumeCapacity (try gpa .dupe (u8 , windows_lib ), {});
2071
+
2068
2072
// Prevent some footguns by making the "any" fields of config reflect
2069
2073
// the default Module settings.
2070
2074
comp .config .any_unwind_tables = any_unwind_tables ;
@@ -2387,7 +2391,7 @@ pub fn create(gpa: Allocator, arena: Allocator, options: CreateOptions) !*Compil
2387
2391
2388
2392
// When linking mingw-w64 there are some import libs we always need.
2389
2393
try comp .windows_libs .ensureUnusedCapacity (gpa , mingw .always_link_libs .len );
2390
- for (mingw .always_link_libs ) | name | comp .windows_libs .putAssumeCapacity (name , {});
2394
+ for (mingw .always_link_libs ) | name | comp .windows_libs .putAssumeCapacity (try gpa . dupe ( u8 , name ) , {});
2391
2395
} else {
2392
2396
return error .LibCUnavailable ;
2393
2397
}
@@ -2480,6 +2484,7 @@ pub fn destroy(comp: *Compilation) void {
2480
2484
comp .c_object_work_queue .deinit ();
2481
2485
comp .win32_resource_work_queue .deinit ();
2482
2486
2487
+ for (comp .windows_libs .keys ()) | windows_lib | gpa .free (windows_lib );
2483
2488
comp .windows_libs .deinit (gpa );
2484
2489
2485
2490
{
@@ -7563,7 +7568,12 @@ pub fn addLinkLib(comp: *Compilation, lib_name: []const u8) !void {
7563
7568
// If we haven't seen this library yet and we're targeting Windows, we need
7564
7569
// to queue up a work item to produce the DLL import library for this.
7565
7570
const gop = try comp .windows_libs .getOrPut (comp .gpa , lib_name );
7566
- if (! gop .found_existing ) try comp .queueJob (.{ .windows_import_lib = comp .windows_libs .count () - 1 });
7571
+ if (gop .found_existing ) return ;
7572
+ {
7573
+ errdefer _ = comp .windows_libs .pop ();
7574
+ gop .key_ptr .* = try comp .gpa .dupe (u8 , lib_name );
7575
+ }
7576
+ try comp .queueJob (.{ .windows_import_lib = gop .index });
7567
7577
}
7568
7578
7569
7579
/// This decides the optimization mode for all zig-provided libraries, including
0 commit comments