From 7c16bdc58c74e3515d8d71e5e006005566e5a32a Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Fri, 21 Nov 2014 20:57:58 -0800 Subject: [PATCH] fnmatch: work around GCC compiler warning bug with uninit var * posix/fnmatch_loop.c (FCT): Use a scalar not a one-item array. This works around a bug with x86-64 GCC 4.9.2 and earlier where 'gcc -O2 -Wmaybe-uninitialized' incorrectly complains "../locale/weightwc.h:93:7: warning: '*((void *)&str+4)' may be used uninitialized in this function [-Wmaybe-uninitialized]". --- ChangeLog | 9 +++++++++ posix/fnmatch_loop.c | 8 ++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index c75dab7..3c7b9e4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2014-11-21 Paul Eggert + + fnmatch: work around GCC compiler warning bug with uninit var + * posix/fnmatch_loop.c (FCT): Use a scalar not a one-item array. + This works around a bug with x86-64 GCC 4.9.2 and earlier + where 'gcc -O2 -Wmaybe-uninitialized' incorrectly complains + "../locale/weightwc.h:93:7: warning: '*((void *)&str+4)' may be + used uninitialized in this function [-Wmaybe-uninitialized]". + 2014-11-21 Roland McGrath * nptl/pthread_create.c (__pthread_create_2_1): Set diff --git a/posix/fnmatch_loop.c b/posix/fnmatch_loop.c index db6d9d7..c1d8b69 100644 --- a/posix/fnmatch_loop.c +++ b/posix/fnmatch_loop.c @@ -343,7 +343,7 @@ FCT (pattern, string, string_end, no_leading_period, flags, ends, alloca_used) #ifdef _LIBC else if (c == L('[') && *p == L('=')) { - UCHAR str[1]; + UCHAR str; uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); const CHAR *startp = p; @@ -355,7 +355,7 @@ FCT (pattern, string, string_end, no_leading_period, flags, ends, alloca_used) c = L('['); goto normal_bracket; } - str[0] = c; + str = c; c = *++p; if (c != L('=') || p[1] != L(']')) @@ -368,7 +368,7 @@ FCT (pattern, string, string_end, no_leading_period, flags, ends, alloca_used) if (nrules == 0) { - if ((UCHAR) *n == str[0]) + if ((UCHAR) *n == str) goto matched; } else @@ -383,7 +383,7 @@ FCT (pattern, string, string_end, no_leading_period, flags, ends, alloca_used) # endif const int32_t *indirect; int32_t idx; - const UCHAR *cp = (const UCHAR *) str; + const UCHAR *cp = (const UCHAR *) &str; # if WIDE_CHAR_VERSION table = (const int32_t *) -- 1.9.3