[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