aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Rønne Petersen <alex@alexrp.com>2025-07-16 18:33:15 +0200
committerAlex Rønne Petersen <alex@alexrp.com>2025-08-30 06:36:41 +0200
commite9ac2ce1167f0f2f86d824549b8ab04d1028129c (patch)
tree4a0323bfbcd819650b1701bdcca29cb676d5be7c
parentdfa55e193d04ad96c0049a48f58412ebb12c08ab (diff)
downloadzig-e9ac2ce1167f0f2f86d824549b8ab04d1028129c.tar.gz
zig-e9ac2ce1167f0f2f86d824549b8ab04d1028129c.zip
compiler-rt: move strlen from libzigc to here
LLVM 21 has started recognizing strlen-like idioms and optimizing them to strlen calls, so we need this function provided in compiler-rt for libc-less compilations.
-rw-r--r--lib/c/string.zig5
-rw-r--r--lib/compiler_rt.zig2
-rw-r--r--lib/compiler_rt/strlen.zig10
3 files changed, 12 insertions, 5 deletions
diff --git a/lib/c/string.zig b/lib/c/string.zig
index e846c4d960..a644093af5 100644
--- a/lib/c/string.zig
+++ b/lib/c/string.zig
@@ -4,7 +4,6 @@ const common = @import("common.zig");
comptime {
@export(&strcmp, .{ .name = "strcmp", .linkage = common.linkage, .visibility = common.visibility });
- @export(&strlen, .{ .name = "strlen", .linkage = common.linkage, .visibility = common.visibility });
@export(&strncmp, .{ .name = "strncmp", .linkage = common.linkage, .visibility = common.visibility });
@export(&strcasecmp, .{ .name = "strcasecmp", .linkage = common.linkage, .visibility = common.visibility });
@export(&strncasecmp, .{ .name = "strncasecmp", .linkage = common.linkage, .visibility = common.visibility });
@@ -103,7 +102,3 @@ test strncmp {
try std.testing.expect(strncmp(@ptrCast("b"), @ptrCast("a"), 1) > 0);
try std.testing.expect(strncmp(@ptrCast("\xff"), @ptrCast("\x02"), 1) > 0);
}
-
-fn strlen(s: [*:0]const c_char) callconv(.c) usize {
- return std.mem.len(s);
-}
diff --git a/lib/compiler_rt.zig b/lib/compiler_rt.zig
index b8723c56ee..aac81bf414 100644
--- a/lib/compiler_rt.zig
+++ b/lib/compiler_rt.zig
@@ -263,6 +263,8 @@ comptime {
_ = @import("compiler_rt/memcmp.zig");
_ = @import("compiler_rt/bcmp.zig");
_ = @import("compiler_rt/ssp.zig");
+
+ _ = @import("compiler_rt/strlen.zig");
}
// Temporarily used for uefi until https://github.com/ziglang/zig/issues/21630 is addressed.
diff --git a/lib/compiler_rt/strlen.zig b/lib/compiler_rt/strlen.zig
new file mode 100644
index 0000000000..01d4e760dc
--- /dev/null
+++ b/lib/compiler_rt/strlen.zig
@@ -0,0 +1,10 @@
+const std = @import("std");
+const common = @import("common.zig");
+
+comptime {
+ @export(&strlen, .{ .name = "strlen", .linkage = common.linkage, .visibility = common.visibility });
+}
+
+fn strlen(s: [*:0]const c_char) callconv(.c) usize {
+ return std.mem.len(s);
+}