Skip to content

Commit ab2911e

Browse files
committed
aro: use ArrayList in GCCDetector instead of BoundedArray
These arrays don't really all have an upper bound of 16; in fact they have different upper bounds. Presumably the reason 16 was used for all of them was to avoid code bloat with BoundedArray. Well, now even more code bloat has been eliminated because now it's using `ArrayList([]const u8)` which is certainly instantiated elsewhere. Furthermore, the different corrected upper bounds can be specified at each instance of the array list.
1 parent d14a23b commit ab2911e

File tree

1 file changed

+24
-17
lines changed

1 file changed

+24
-17
lines changed

deps/aro/aro/Driver/GCCDetector.zig

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ pub fn appendToolPath(self: *const GCCDetector, tc: *Toolchain) !void {
2929
}, .program);
3030
}
3131

32-
fn addDefaultGCCPrefixes(prefixes: *PathPrefixes, tc: *const Toolchain) !void {
32+
fn addDefaultGCCPrefixes(prefixes: *std.ArrayListUnmanaged([]const u8), tc: *const Toolchain) !void {
3333
const sysroot = tc.getSysroot();
3434
const target = tc.getTarget();
3535
if (sysroot.len == 0 and target.os.tag == .linux and tc.filesystem.exists("/opt/rh")) {
@@ -57,14 +57,12 @@ fn addDefaultGCCPrefixes(prefixes: *PathPrefixes, tc: *const Toolchain) !void {
5757
}
5858
}
5959

60-
const PathPrefixes = std.BoundedArray([]const u8, 16);
61-
6260
fn collectLibDirsAndTriples(
6361
tc: *Toolchain,
64-
lib_dirs: *PathPrefixes,
65-
triple_aliases: *PathPrefixes,
66-
biarch_libdirs: *PathPrefixes,
67-
biarch_triple_aliases: *PathPrefixes,
62+
lib_dirs: *std.ArrayListUnmanaged([]const u8),
63+
triple_aliases: *std.ArrayListUnmanaged([]const u8),
64+
biarch_libdirs: *std.ArrayListUnmanaged([]const u8),
65+
biarch_triple_aliases: *std.ArrayListUnmanaged([]const u8),
6866
) !void {
6967
const AArch64LibDirs: [2][]const u8 = .{ "/lib64", "/lib" };
7068
const AArch64Triples: [4][]const u8 = .{ "aarch64-none-linux-gnu", "aarch64-linux-gnu", "aarch64-redhat-linux", "aarch64-suse-linux" };
@@ -408,10 +406,18 @@ pub fn discover(self: *GCCDetector, tc: *Toolchain) !void {
408406
else
409407
target_util.get32BitArchVariant(target);
410408

411-
var candidate_lib_dirs: PathPrefixes = .{};
412-
var candidate_triple_aliases: PathPrefixes = .{};
413-
var candidate_biarch_lib_dirs: PathPrefixes = .{};
414-
var candidate_biarch_triple_aliases: PathPrefixes = .{};
409+
var candidate_lib_dirs_buffer: [16][]const u8 = undefined;
410+
var candidate_lib_dirs = std.ArrayListUnmanaged([]const u8).initBuffer(&candidate_lib_dirs_buffer);
411+
412+
var candidate_triple_aliases_buffer: [16][]const u8 = undefined;
413+
var candidate_triple_aliases = std.ArrayListUnmanaged([]const u8).initBuffer(&candidate_triple_aliases_buffer);
414+
415+
var candidate_biarch_lib_dirs_buffer: [16][]const u8 = undefined;
416+
var candidate_biarch_lib_dirs = std.ArrayListUnmanaged([]const u8).initBuffer(&candidate_biarch_lib_dirs_buffer);
417+
418+
var candidate_biarch_triple_aliases_buffer: [16][]const u8 = undefined;
419+
var candidate_biarch_triple_aliases = std.ArrayListUnmanaged([]const u8).initBuffer(&candidate_biarch_triple_aliases_buffer);
420+
415421
try collectLibDirsAndTriples(
416422
tc,
417423
&candidate_lib_dirs,
@@ -433,7 +439,8 @@ pub fn discover(self: *GCCDetector, tc: *Toolchain) !void {
433439
}
434440
}
435441

436-
var prefixes: PathPrefixes = .{};
442+
var prefixes_buf: [16][]const u8 = undefined;
443+
var prefixes = std.ArrayListUnmanaged([]const u8).initBuffer(&prefixes_buf);
437444
const gcc_toolchain_dir = gccToolchainDir(tc);
438445
if (gcc_toolchain_dir.len != 0) {
439446
const adjusted = if (gcc_toolchain_dir[gcc_toolchain_dir.len - 1] == '/')
@@ -455,10 +462,10 @@ pub fn discover(self: *GCCDetector, tc: *Toolchain) !void {
455462
}
456463

457464
const v0 = GCCVersion.parse("0.0.0");
458-
for (prefixes.constSlice()) |prefix| {
465+
for (prefixes.items) |prefix| {
459466
if (!tc.filesystem.exists(prefix)) continue;
460467

461-
for (candidate_lib_dirs.constSlice()) |suffix| {
468+
for (candidate_lib_dirs.items) |suffix| {
462469
defer fib.reset();
463470
const lib_dir = std.fs.path.join(fib.allocator(), &.{ prefix, suffix }) catch continue;
464471
if (!tc.filesystem.exists(lib_dir)) continue;
@@ -467,17 +474,17 @@ pub fn discover(self: *GCCDetector, tc: *Toolchain) !void {
467474
const gcc_cross_dir_exists = tc.filesystem.joinedExists(&.{ lib_dir, "/gcc-cross" });
468475

469476
try self.scanLibDirForGCCTriple(tc, target, lib_dir, triple_str, false, gcc_dir_exists, gcc_cross_dir_exists);
470-
for (candidate_triple_aliases.constSlice()) |candidate| {
477+
for (candidate_triple_aliases.items) |candidate| {
471478
try self.scanLibDirForGCCTriple(tc, target, lib_dir, candidate, false, gcc_dir_exists, gcc_cross_dir_exists);
472479
}
473480
}
474-
for (candidate_biarch_lib_dirs.constSlice()) |suffix| {
481+
for (candidate_biarch_lib_dirs.items) |suffix| {
475482
const lib_dir = std.fs.path.join(fib.allocator(), &.{ prefix, suffix }) catch continue;
476483
if (!tc.filesystem.exists(lib_dir)) continue;
477484

478485
const gcc_dir_exists = tc.filesystem.joinedExists(&.{ lib_dir, "/gcc" });
479486
const gcc_cross_dir_exists = tc.filesystem.joinedExists(&.{ lib_dir, "/gcc-cross" });
480-
for (candidate_biarch_triple_aliases.constSlice()) |candidate| {
487+
for (candidate_biarch_triple_aliases.items) |candidate| {
481488
try self.scanLibDirForGCCTriple(tc, target, lib_dir, candidate, true, gcc_dir_exists, gcc_cross_dir_exists);
482489
}
483490
}

0 commit comments

Comments
 (0)