From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5600 invoked by alias); 20 Feb 2010 00:19:24 -0000 Received: (qmail 5573 invoked by uid 48); 20 Feb 2010 00:19:14 -0000 Date: Sat, 20 Feb 2010 00:19:00 -0000 Message-ID: <20100220001914.5572.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug middle-end/35903] false Warray-bounds warning when passing quoted string to function strcmp(arg,"no"); In-Reply-To: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "manu at gcc dot gnu dot org" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2010-02/txt/msg02005.txt.bz2 ------- 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