[Bug middle-end/35903] false Warray-bounds warning when passing quoted string to function strcmp(arg,"no");
manu at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Sat Feb 20 00:19:00 GMT 2010
------- Comment #10 from manu at gcc dot gnu dot org 2010-02-20 00:19 -------
Reduced testcase:
extern int strlen (__const char *__s);
int echo (int);
int main(int argc, char **argv)
{
echo (({ int __s1_len, __s2_len;
(__builtin_constant_p (argv[0]) && __builtin_constant_p ("AA") &&
(__s1_len = strlen (argv[0]), __s2_len = strlen ("AA"),
(!((int)(const void *)((argv[0]) + 1) - (int)(const void *)(argv[0]) == 1)
|| __s1_len >= 4)
&&
(!((int)(const void *)(("AA") + 1) - (int)(const void *)("AA") == 1)
|| __s2_len >= 4))
? 1
: (__builtin_constant_p (argv[0])
&& ((int)(const void *)((argv[0]) + 1) - (int)(const void *)(argv[0]) ==
1)
&& (__s1_len = strlen (argv[0]), __s1_len < 4)
? 1
: (__builtin_constant_p ("AA") && ((int)(const void *)(("AA") + 1) -
(int)(const void *)("AA") == 1)
&& (__s2_len = strlen ("AA"), __s2_len < 4)
? (__builtin_constant_p (argv[0])
&& ((int)(const void *)((argv[0]) + 1) - (int)(const void
*)(argv[0]) == 1)
? 1
: (({
__const unsigned char *__s1 = (__const unsigned char *) (__const
char *) (argv[0]);
register int __result = __s1[0] - ((__const unsigned char *)
(__const char *) ("AA"))[0];
if (__s2_len > 0 && __result == 0)
{
__result = (__s1[1] - ((__const unsigned char *) (__const
char *) ("AA"))[1]);
if (__s2_len > 1 && __result == 0)
{
__result = (__s1[2] - ((__const unsigned char *) (__const
char *) ("AA"))[2]);
if (__s2_len > 2 && __result == 0)
__result = (__s1[3] - ((__const unsigned char *)
(__const char *) ("AA"))[3]);
}
}
__result;
})))
: 0))); }));
return 0;
}
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35903
More information about the Gcc-bugs
mailing list