[v2] string: Fix GCC 11 `-Werror=stringop-overread' error

Message ID alpine.LFD.2.21.2008311421160.20055@redsun52.ssa.fujisawa.hgst.com
State Committed
Headers
Series [v2] string: Fix GCC 11 `-Werror=stringop-overread' error |

Commit Message

Maciej W. Rozycki Aug. 31, 2020, 1:26 p.m. UTC
  Fix a compilation error:

In function '__rawmemchr',
    inlined from '__rawmemchr' at rawmemchr.c:27:1:
rawmemchr.c:36:12: error: 'memchr' specified bound 18446744073709551615 exceeds maximum object size 9223372036854775807 [-Werror=stringop-overread]
   36 |     return memchr (s, c, (size_t)-1);
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
../o-iterator.mk:9: recipe for target '.../string/rawmemchr.o' failed

introduced with GCC 11 commit d14c547abd48 ("Add -Wstringop-overread 
for reading past the end by string functions.").
---
Changes from v1:

- Wrap the pragma into `__GNUC_PREREQ (11, 0)'.
---
 string/rawmemchr.c |    4 ++++
 1 file changed, 4 insertions(+)

glibc-stringop-overread.diff
  

Comments

Joseph Myers Sept. 1, 2020, 6:13 p.m. UTC | #1
On Mon, 31 Aug 2020, Maciej W. Rozycki via Libc-alpha wrote:

> Fix a compilation error:
> 
> In function '__rawmemchr',
>     inlined from '__rawmemchr' at rawmemchr.c:27:1:
> rawmemchr.c:36:12: error: 'memchr' specified bound 18446744073709551615 exceeds maximum object size 9223372036854775807 [-Werror=stringop-overread]
>    36 |     return memchr (s, c, (size_t)-1);
>       |            ^~~~~~~~~~~~~~~~~~~~~~~~~
> cc1: all warnings being treated as errors
> ../o-iterator.mk:9: recipe for target '.../string/rawmemchr.o' failed
> 
> introduced with GCC 11 commit d14c547abd48 ("Add -Wstringop-overread 
> for reading past the end by string functions.").

OK, please commit.  Both the conditional and the version number in the 
macro call seem correct in this case.
  
Joseph Myers Sept. 7, 2020, 5:01 p.m. UTC | #2
I've now committed this patch for Maciej.
  
Maciej W. Rozycki Sept. 16, 2020, 9:39 p.m. UTC | #3
On Mon, 7 Sep 2020, Joseph Myers wrote:

> I've now committed this patch for Maciej.

 Thank you, Joseph!

  Maciej
  

Patch

Index: glibc/string/rawmemchr.c
===================================================================
--- glibc.orig/string/rawmemchr.c
+++ glibc/string/rawmemchr.c
@@ -32,6 +32,10 @@  RAWMEMCHR (const void *s, int c)
      PTRDIFF_MAX; the use of SIZE_MAX is deliberate here.  */
   DIAG_IGNORE_NEEDS_COMMENT (8, "-Wstringop-overflow=");
 #endif
+#if __GNUC_PREREQ (11, 0)
+  /* Likewise GCC 11, with a different warning option.  */
+  DIAG_IGNORE_NEEDS_COMMENT (11, "-Wstringop-overread");
+#endif
   if (c != '\0')
     return memchr (s, c, (size_t)-1);
   DIAG_POP_NEEDS_COMMENT;