From 25b38717c6ca75b1b5c442a0ccd7dca6570c84d7 Mon Sep 17 00:00:00 2001 From: jsm28 Date: Wed, 10 Oct 2007 20:46:11 +0000 Subject: [PATCH] PR c/25309 * c-common.c (complete_array_type): Diagnose too-large arrays and set type to error_mark_node. testsuite: * gcc.dg/large-size-array-2.c: Expect diagnostic for too-large array. * gcc.dg/large-size-array-4.c: New. Copy of large-size-array-2.c without -O2. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_2-branch@129216 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/c-common.c | 10 ++++++++++ gcc/testsuite/ChangeLog | 8 ++++++++ gcc/testsuite/gcc.dg/large-size-array-2.c | 2 +- .../gcc.dg/{large-size-array-2.c => large-size-array-4.c} | 4 ++-- 5 files changed, 27 insertions(+), 3 deletions(-) copy gcc/testsuite/gcc.dg/{large-size-array-2.c => large-size-array-4.c} (54%) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4f212a7efd2..c5a4319df77 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2007-10-10 Joseph Myers + PR c/25309 + * c-common.c (complete_array_type): Diagnose too-large arrays and + set type to error_mark_node. + +2007-10-10 Joseph Myers + PR c/32295 * c-typeck.c (default_conversion): Call require_complete_type before perform_integral_promotions. diff --git a/gcc/c-common.c b/gcc/c-common.c index a6c9224b8f6..3f17b1b2d11 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -6229,6 +6229,16 @@ complete_array_type (tree *ptype, tree initial_value, bool do_default) else type = c_build_qualified_type (main_type, quals); + if (COMPLETE_TYPE_P (type) + && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST + && TREE_OVERFLOW (TYPE_SIZE_UNIT (type))) + { + error ("size of array is too large"); + /* If we proceed with the array type as it is, we'll eventually + crash in tree_low_cst(). */ + type = error_mark_node; + } + *ptype = type; return failure; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f2884dd9aa2..71474bb1ec1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,13 @@ 2007-10-10 Joseph Myers + PR c/25309 + * gcc.dg/large-size-array-2.c: Expect diagnostic for too-large + array. + * gcc.dg/large-size-array-4.c: New. Copy of large-size-array-2.c + without -O2. + +2007-10-10 Joseph Myers + PR c/32295 * gcc.dg/enum-incomplete-1.c: New test. diff --git a/gcc/testsuite/gcc.dg/large-size-array-2.c b/gcc/testsuite/gcc.dg/large-size-array-2.c index 6ac31d11af4..5411b838fac 100644 --- a/gcc/testsuite/gcc.dg/large-size-array-2.c +++ b/gcc/testsuite/gcc.dg/large-size-array-2.c @@ -4,4 +4,4 @@ static char * name[] = { [0x80000000] = "bar" }; - +/* { dg-error "too large" "" { target { ! lp64 } } 6 } */ diff --git a/gcc/testsuite/gcc.dg/large-size-array-2.c b/gcc/testsuite/gcc.dg/large-size-array-4.c similarity index 54% copy from gcc/testsuite/gcc.dg/large-size-array-2.c copy to gcc/testsuite/gcc.dg/large-size-array-4.c index 6ac31d11af4..020d57e2c64 100644 --- a/gcc/testsuite/gcc.dg/large-size-array-2.c +++ b/gcc/testsuite/gcc.dg/large-size-array-4.c @@ -1,7 +1,7 @@ /* PR c/25309 */ /* { dg-do compile } */ -/* { dg-options "-O2" } */ +/* { dg-options "" } */ static char * name[] = { [0x80000000] = "bar" }; - +/* { dg-error "too large" "" { target { ! lp64 } } 6 } */ -- 2.11.4.GIT