This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/26634] New: spurious strtok_r warning with -Wwrite-strings
- From: "mattias at virtutech dot se" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 10 Mar 2006 16:31:48 -0000
- Subject: [Bug c/26634] New: spurious strtok_r warning with -Wwrite-strings
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
I'm not sure whether to report this to gcc or glibc - maybe it falls
in-between.
#include <string.h>
void g(char *);
void f(char *a)
{
char *p, *q;
while ((q = strtok_r(a, ":", &p)))
g(q);
}
with -O1 -Wall -Wwrite-strings, gives:
warning: 'p' may be used uninitialized in this function
This comes from the inline expansion of strtok_r(), after reduction:
extern __inline char *
__strtok_r_1c (char *__s, char __sep, char **__nextp)
{
char *__result;
if (__s == ((void *)0))
__s = *__nextp;
while (*__s == __sep)
++__s;
__result = ((void *)0);
if (*__s != '\0')
{
__result = __s++;
while (*__s != '\0')
if (*__s++ == __sep)
{
__s[-1] = '\0';
break;
}
*__nextp = __s;
}
return __result;
}
void g(char *);
void f(char *a)
{
char *p, *q;
while ((q = __strtok_r_1c (a, ':', &p)))
g(q);
}
I don't know what glibc could do to prevent this (except dropping this
optimisation).
--
Summary: spurious strtok_r warning with -Wwrite-strings
Product: gcc
Version: 4.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: mattias at virtutech dot se
GCC build triplet: x86_64-unknown-linux-gnu
GCC host triplet: x86_64-unknown-linux-gnu
GCC target triplet: x86_64-unknown-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26634