From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28904 invoked by alias); 31 Jul 2009 16:46:31 -0000 Received: (qmail 28190 invoked by uid 48); 31 Jul 2009 16:46:05 -0000 Date: Fri, 31 Jul 2009 16:46:00 -0000 Message-ID: <20090731164605.28189.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug c/35392] Warning "array subscript is above array bounds" in inline fct 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: 2009-07/txt/msg02568.txt.bz2 ------- Comment #3 from manu at gcc dot gnu dot org 2009-07-31 16:46 ------- A reduced testcase: extern inline const char * _strnchr (const char *str, char c, unsigned size); extern inline void * _memcpy (void *dst, const void *src, const unsigned size) { if (__builtin_constant_p (size)) { if (size == 5) { ((unsigned *) dst)[0] = ((const unsigned *) src)[0]; ((unsigned char *) dst)[4] = ((const unsigned char *) src)[4]; return dst; } } return dst; } extern inline unsigned _strlen (const char *str) { return _strnchr (str, '\0', (~0)) - str; } extern inline char * _strncpy (char *dst, const char *src, unsigned size) { unsigned len = _strlen (src); if (len > size) len = size; _memcpy (dst, src, len); dst[len] = '\0'; return dst; } extern inline char * _strcpy (char *dst, const char *src) { return _strncpy (dst, src, (~0)); } extern inline char * _strcat (char *dst, const char *src) { _strcpy (dst + _strlen (dst), src); return dst; } struct treat_directory_str { unsigned nb; }; void DOS_analyse (struct treat_directory_str *opaque) { char pattern[52] = "A:\\*.*"; char *pat = pattern; _strcat (pat, "*.*"); opaque->nb++; } It is weird that removing the last line of DOS_analyse silences the warning. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35392