This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c/16367] No worning with -ansi -pedantic about passing unsigned char * to strcmp if using -O2


------- Additional Comments From pinskia at gcc dot gnu dot org  2004-07-05 08:38 -------
Not a gcc bug but a glibc bug because they expand strcmp to:
    __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (kake(&m)) && __builtin_constant_p 
("keke") && (__s1_len = strlen (kake(&m)), __s2_len = strlen ("keke"), (!((size_t)(const void *)((kake(&m)) 
+ 1) - (size_t)(const void *)(kake(&m)) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("keke") + 1) - 
(size_t)(const void *)("keke") == 1) || __s2_len >= 4)) ? memcmp ((__const char *) (kake(&m)), (__const 
char *) ("keke"), (__s1_len < __s2_len ? __s1_len : __s2_len) + 1) : (__builtin_constant_p (kake(&m)) && 
((size_t)(const void *)((kake(&m)) + 1) - (size_t)(const void *)(kake(&m)) == 1) && (__s1_len = strlen 
(kake(&m)), __s1_len < 4) ? (__builtin_constant_p ("keke") && ((size_t)(const void *)(("keke") + 1) - 
(size_t)(const void *)("keke") == 1) ? (__extension__ ({ register int __result = (((__const unsigned char *) 
(__const char *) (kake(&m)))[0] - ((__const unsigned char *) (__const char *)("keke"))[0]); if (__s1_len > 0 
&& __result == 0) { __result = (((__const unsigned char *) (__const char *) (kake(&m)))[1] - ((__const 
unsigned char *) (__const char *) ("keke"))[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const 
unsigned char *) (__const char *) (kake(&m)))[2] - ((__const unsigned char *) (__const char *) 
("keke"))[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) 
(kake(&m)))[3] - ((__const unsigned char *) (__const char *) ("keke"))[3]); } } __result; })) : (__extension__ 
({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) ("keke"); register int __result 
= (((__const unsigned char *) (__const char *) (kake(&m)))[0] - __s2[0]); if (__s1_len > 0 && __result == 
0) { __result = (((__const unsigned char *) (__const char *) (kake(&m)))[1] - __s2[1]); if (__s1_len > 1 && 
__result == 0) { __result = (((__const unsigned char *) (__const char *) (kake(&m)))[2] - __s2[2]); if 
(__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (kake(&m)))[3] - 
__s2[3]); } } __result; }))) : (__builtin_constant_p ("keke") && ((size_t)(const void *)(("keke") + 1) - 
(size_t)(const void *)("keke") == 1) && (__s2_len = strlen ("keke"), __s2_len < 4) ? (__builtin_constant_p 
(kake(&m)) && ((size_t)(const void *)((kake(&m)) + 1) - (size_t)(const void *)(kake(&m)) == 1) ? 
(__extension__ ({ register int __result = (((__const unsigned char *) (__const char *) (kake(&m)))[0] - 
((__const unsigned char *) (__const char *)("keke"))[0]); if (__s2_len > 0 && __result == 0) { __result = 
(((__const unsigned char *) (__const char *) (kake(&m)))[1] - ((__const unsigned char *) (__const char *) 
("keke"))[1]); if (__s2_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) 
(kake(&m)))[2] - ((__const unsigned char *) (__const char *) ("keke"))[2]); if (__s2_len > 2 && __result == 
0) __result = (((__const unsigned char *) (__const char *) (kake(&m)))[3] - ((__const unsigned char *) 
(__const char *) ("keke"))[3]); } } __result; })) : (__extension__ ({ __const unsigned char *__s1 = (__const 
unsigned char *) (__const char *) (kake(&m)); register int __result = __s1[0] - ((__const unsigned char *) 
(__const char *) ("keke"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned 
char *) (__const char *) ("keke"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const 
unsigned char *) (__const char *) ("keke"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - 
((__const unsigned char *) (__const char *) ("keke"))[3]); } } __result; }))) : strcmp (kake(&m), "keke")))); });



-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |INVALID


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16367


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]