From 355a9e437d6bffe505a1d5757f71dccd7f6e74f7 Mon Sep 17 00:00:00 2001 From: James E Wilson Date: Tue, 16 Aug 2005 11:23:58 -0700 Subject: [PATCH] Emit an error for too large arrays instead of an ICE. PR tree-optimization/21105 * c-decl.c (grokdeclarator): Use TYPE_SIZE_UNIT not TYPE_SIZE in TREE_OVERFLOW check. * gcc.dg/large-size-array.c: New. From-SVN: r103164 --- gcc/ChangeLog | 6 ++++++ gcc/c-decl.c | 2 +- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/large-size-array.c | 21 +++++++++++++++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/large-size-array.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1c23f858125..ecd37e67aa2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-08-16 James E Wilson + + PR tree-optimization/21105 + * c-decl.c (grokdeclarator): Use TYPE_SIZE_UNIT not TYPE_SIZE in + TREE_OVERFLOW check. + 2005-08-16 David Edelsohn * config/rs6000/rs6000.md (ltu): Convert to mode macro. diff --git a/gcc/c-decl.c b/gcc/c-decl.c index ff35e084be7..a1fdce776a2 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -4384,7 +4384,7 @@ grokdeclarator (const struct c_declarator *declarator, if (TREE_CODE (type) == ARRAY_TYPE && COMPLETE_TYPE_P (type) && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST - && TREE_OVERFLOW (TYPE_SIZE (type))) + && TREE_OVERFLOW (TYPE_SIZE_UNIT (type))) { error ("size of array %qs is too large", name); /* If we proceed with the array type as it is, we'll eventually diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a38b71071a7..75ab35f6963 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-08-16 James E Wilson + + PR tree-optimization/21105 + * gcc.dg/large-size-array.c: New. + 2005-08-16 Dorit Nuzman * gcc.dg/vect/vect-40: Use aligned arrays instead of arrays to aligned diff --git a/gcc/testsuite/gcc.dg/large-size-array.c b/gcc/testsuite/gcc.dg/large-size-array.c new file mode 100644 index 00000000000..e8d9791480b --- /dev/null +++ b/gcc/testsuite/gcc.dg/large-size-array.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +#include + +#ifdef __LP64__ +#define DIM UINT_MAX>>1 +#else +#define DIM USHORT_MAX>>1 +#endif + +int +sub (int *a) +{ + return a[0]; +} + +int +main (void) +{ + int a[DIM][DIM]; /* { dg-error "size of array 'a' is too large" } */ + return sub (&a[0][0]); +}