bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 5/8] memchr2: port --enable-gcc-warnings to clang


From: Paul Eggert
Subject: [PATCH 5/8] memchr2: port --enable-gcc-warnings to clang
Date: Wed, 15 May 2013 00:37:29 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130510 Thunderbird/17.0.6

* 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 1a8925a..f637cda 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2013-05-15  Paul Eggert  <address@hidden>
 
+       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 3912e02..8b105b7 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.  */
-- 
1.7.11.7





reply via email to

[Prev in Thread] Current Thread [Next in Thread]