summaryrefslogtreecommitdiff
path: root/gcc/c-typeck.c
diff options
context:
space:
mode:
authorsimonb <simonb@138bc75d-0d04-0410-961f-82ee72b054a4>2008-05-01 19:03:32 +0000
committersimonb <simonb@138bc75d-0d04-0410-961f-82ee72b054a4>2008-05-01 19:03:32 +0000
commit98cb064a88338684234aeff8d4dca8b4768e6b35 (patch)
tree9ed540dc4bc280eaffa691609aa5d92b79a62090 /gcc/c-typeck.c
parent49698f189da3d0b50c33959fe9f59be8fc7d061e (diff)
downloadgcc-98cb064a88338684234aeff8d4dca8b4768e6b35.tar.gz
* c-common.h (warn_array_subscript_range): New function.
* c-common.c (warn_array_subscript_range): Ditto. * tree-vrp.c (check_array_ref): Corrected code to agree with comment, ignoring only arrays of size 0 or size 1. * c-typeck.c (build_array_ref): Call warn_array_subscript_range. * testsuite/gcc.dg/Warray-bounds.c: Updated for frontend warnings, additional tests for arrays of size 0 and size 1. * testsuite/g++.dg/warn/Warray-bounds.c: Ditto. * testsuite/gcc.dg/Warray-bounds-noopt.c: New testcase. * testsuite/g++.dg/warn/Warray-bounds-noopt.c: Ditto. * typeck.c (build_array_ref): Call warn_array_subscript_range. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@134865 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/c-typeck.c')
-rw-r--r--gcc/c-typeck.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c
index 2f8428210d7..dc4cb2b95af 100644
--- a/gcc/c-typeck.c
+++ b/gcc/c-typeck.c
@@ -2086,7 +2086,12 @@ build_array_ref (tree array, tree index)
if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE)
{
- tree rval, type;
+ tree rval, type, ref;
+ bool has_warned_on_bounds_check = false;
+
+ /* Warn about any obvious array bounds errors for fixed size arrays that
+ are indexed by a constant. */
+ has_warned_on_bounds_check = warn_array_subscript_range (array, index);
/* An array that is indexed by a non-constant
cannot be stored in a register; we must be able to do
@@ -2139,7 +2144,12 @@ build_array_ref (tree array, tree index)
in an inline function.
Hope it doesn't break something else. */
| TREE_THIS_VOLATILE (array));
- return require_complete_type (fold (rval));
+ ref = require_complete_type (fold (rval));
+
+ /* Suppress bounds warning in tree-vrp.c if already warned here. */
+ if (has_warned_on_bounds_check)
+ TREE_NO_WARNING (ref) = 1;
+ return ref;
}
else
{