#include <string.h>
-#include <stdlib.h>
#include <stdint.h>
#include <limits.h>
size_t strlen(const char *s)
{
const char *a = s;
- const size_t *w;
+#ifdef __GNUC__
+ typedef size_t __attribute__((__may_alias__)) word;
+ const word *w;
for (; (uintptr_t)s % ALIGN; s++) if (!*s) return s-a;
for (w = (const void *)s; !HASZERO(*w); w++);
- for (s = (const void *)w; *s; s++);
+ s = (const void *)w;
+#endif
+ for (; *s; s++);
return s-a;
}