commit 8ed72e7c1caa0eb4238e649063c26a11720935de
parent 140cffbe84a08669d67c3257258d2bb70ff29c3b
Author: jvoisin <julien.voisin@dustri.org>
Date:   Tue, 19 Mar 2024 18:35:13 +0100
Relax our checks for memchr on C11 and above
Since C11:
> This function behaves as if it reads the bytes sequentially and stops as soon
as a matching bytes is found: if the array pointed to by ptr is smaller than
count, but the match is found within the array, the behavior is well-defined.
Reported-by: q66
Diffstat:
3 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/include/string.h b/include/string.h
@@ -123,10 +123,12 @@ _FORTIFY_FN(memchr) void *memchr(const void * _FORTIFY_POS0 __d, int __c, size_t
 	if (!__d)
 		__builtin_trap();
 
+#if __STDC_VERSION__ < 201112L
 	__fh_size_t __b = __fh_bos(__d, 0);
-
 	if (__n > __b)
 		__builtin_trap();
+#endif
+
 	return __builtin_memchr(__d, __c, __n);
 #endif
 }
diff --git a/tests/test_memchr_dynamic_read.c b/tests/test_memchr_dynamic_read.c
@@ -3,6 +3,7 @@
 #include <string.h>
 
 int main(int argc, char** argv) {
+#if __STDC_VERSION__ < 201112L
   const char* buffer = "12345";
   memchr(buffer, (int)'4', strlen(buffer) - 1);
   puts(buffer);
@@ -12,5 +13,6 @@ int main(int argc, char** argv) {
   CHK_FAIL_END
 
   puts(buffer);
+#endif
   return ret;
 }
diff --git a/tests/test_memchr_static_read.c b/tests/test_memchr_static_read.c
@@ -3,6 +3,7 @@
 #include <string.h>
 
 int main(int argc, char** argv) {
+#if __STDC_VERSION__ < 201112L
   const char* buffer = "12345";
   const char* padding = "ABCDEFGHIJKLMN";
   memchr(buffer, (int)'4', strlen(buffer) - 1);
@@ -13,5 +14,6 @@ int main(int argc, char** argv) {
   CHK_FAIL_END
 
   puts(buffer);
+#endif
   return ret;
 }