diff options
author | Joseph Myers <joseph@codesourcery.com> | 2007-09-26 13:32:27 +0100 |
---|---|---|
committer | Joseph Myers <jsm28@gcc.gnu.org> | 2007-09-26 13:32:27 +0100 |
commit | 7bfcb402eab7dbcf0108c5b9682a8b409fad4359 (patch) | |
tree | f9e25dc097a9407299c63b509b39e45c44233eae /gcc | |
parent | 15caa2abe98b8a46bb0225da1d81e585d904d5f2 (diff) | |
download | gcc-7bfcb402eab7dbcf0108c5b9682a8b409fad4359.zip gcc-7bfcb402eab7dbcf0108c5b9682a8b409fad4359.tar.gz gcc-7bfcb402eab7dbcf0108c5b9682a8b409fad4359.tar.bz2 |
re PR c/25309 (ICE on initialization of a huge array)
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.
From-SVN: r128811
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c-common.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/large-size-array-2.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/large-size-array-4.c | 7 |
5 files changed, 32 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f5fb4a6..a126c95 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-09-26 Joseph Myers <joseph@codesourcery.com> + + PR c/25309 + * c-common.c (complete_array_type): Diagnose too-large arrays and + set type to error_mark_node. + 2007-09-26 Richard Guenther <rguenther@suse.de> PR tree-optimization/30375 diff --git a/gcc/c-common.c b/gcc/c-common.c index 8ebc920..bdb8d80 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -7049,6 +7049,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 c43dad2..d2bb725 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2007-09-26 Joseph Myers <joseph@codesourcery.com> + + 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-09-26 Richard Guenther <rguenther@suse.de> PR tree-optimization/30375 diff --git a/gcc/testsuite/gcc.dg/large-size-array-2.c b/gcc/testsuite/gcc.dg/large-size-array-2.c index 6ac31d11..5411b83 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-4.c b/gcc/testsuite/gcc.dg/large-size-array-4.c new file mode 100644 index 0000000..020d57e --- /dev/null +++ b/gcc/testsuite/gcc.dg/large-size-array-4.c @@ -0,0 +1,7 @@ +/* PR c/25309 */ +/* { dg-do compile } */ +/* { dg-options "" } */ +static char * name[] = { + [0x80000000] = "bar" + }; +/* { dg-error "too large" "" { target { ! lp64 } } 6 } */ |