[v2] string: Fix GCC 11 `-Werror=stringop-overread' error
Commit Message
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
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.
I've now committed this patch for Maciej.
On Mon, 7 Sep 2020, Joseph Myers wrote:
> I've now committed this patch for Maciej.
Thank you, Joseph!
Maciej
===================================================================
@@ -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;