From 42fa3cb3afbc80fc5f8e157a08bc7d2de04d367e Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 15 May 2013 00:26:14 -0700 Subject: [PATCH] memchr2: port --enable-gcc-warnings to clang * lib/memchr2.c (memchr2): Avoid casts from looser to stricter-aligned pointers. --- ChangeLog | 4 ++++ lib/memchr2.c | 21 +++++++++++++-------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1a8925ae0..f637cdae5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2013-05-15 Paul Eggert + memchr2: port --enable-gcc-warnings to clang + * lib/memchr2.c (memchr2): + Avoid casts from looser to stricter-aligned pointers. + mbsstr: port --enable-gcc-warnings to clang * lib/mbsstr.c (knuth_morris_pratt_multibyte): Avoid casts from looser to stricter-aligned pointers. diff --git a/lib/memchr2.c b/lib/memchr2.c index 3912e0277..8b105b7f2 100644 --- a/lib/memchr2.c +++ b/lib/memchr2.c @@ -43,6 +43,7 @@ memchr2 (void const *s, int c1_in, int c2_in, size_t n) typedef unsigned long int longword; const unsigned char *char_ptr; + void const *void_ptr; const longword *longword_ptr; longword repeated_one; longword repeated_c1; @@ -57,14 +58,18 @@ memchr2 (void const *s, int c1_in, int c2_in, size_t n) return memchr (s, c1, n); /* Handle the first few bytes by reading one byte at a time. - Do this until CHAR_PTR is aligned on a longword boundary. */ - for (char_ptr = (const unsigned char *) s; - n > 0 && (size_t) char_ptr % sizeof (longword) != 0; - --n, ++char_ptr) - if (*char_ptr == c1 || *char_ptr == c2) - return (void *) char_ptr; - - longword_ptr = (const longword *) char_ptr; + Do this until VOID_PTR is aligned on a longword boundary. */ + for (void_ptr = s; + n > 0 && (uintptr_t) void_ptr % sizeof (longword) != 0; + --n) + { + char_ptr = void_ptr; + if (*char_ptr == c1 || *char_ptr == c2) + return (void *) void_ptr; + void_ptr = char_ptr + 1; + } + + longword_ptr = void_ptr; /* All these elucidatory comments refer to 4-byte longwords, but the theory applies equally well to any size longwords. */ -- 2.11.0