$ cat t.c extern unsigned char data[5]; unsigned char foo (char *str) { int i, j; unsigned char c = 0; for (i = 0; i < 8; i++) { j = i * 5; if ((j % 8) > 3) c |= data[(j / 8) + 1]; } return c; } $ gcc t.c -O3 -Wall -c t.c: In function ‘foo’: t.c:13:11: warning: array subscript is above array bounds
The patch: http://gcc.gnu.org/ml/gcc-patches/2010-04/msg01304.html
Updated patch http://gcc.gnu.org/ml/gcc-patches/2010-04/msg01386.html
Subject: Bug 43833 Author: jiez Date: Mon Apr 26 10:59:34 2010 New Revision: 158727 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=158727 Log: PR tree-optimization/43833 * tree-vrp.c (range_int_cst_p): New. (range_int_cst_singleton_p): New. (extract_range_from_binary_expr): Optimize BIT_AND_EXPR case when both operands are constants. Use range_int_cst_p in BIT_IOR_EXPR case. testsuite/ PR tree-optimization/43833 gcc.dg/Warray-bounds-8.c: New test case. Added: trunk/gcc/testsuite/gcc.dg/Warray-bounds-8.c Modified: trunk/gcc/ChangeLog trunk/gcc/testsuite/ChangeLog trunk/gcc/tree-vrp.c
Subject: Bug 43833 Author: jiez Date: Mon Apr 26 10:59:48 2010 New Revision: 158728 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=158728 Log: PR tree-optimization/43833 * tree-vrp.c (range_int_cst_p): New. (range_int_cst_singleton_p): New. (extract_range_from_binary_expr): Optimize BIT_AND_EXPR case when both operands are constants. Use range_int_cst_p in BIT_IOR_EXPR case. testsuite/ PR tree-optimization/43833 gcc.dg/Warray-bounds-8.c: New test case. Added: branches/gcc-4_5-branch/gcc/testsuite/gcc.dg/Warray-bounds-8.c Modified: branches/gcc-4_5-branch/gcc/ChangeLog branches/gcc-4_5-branch/gcc/testsuite/ChangeLog branches/gcc-4_5-branch/gcc/tree-vrp.c
Seems fixed. Closing.