diff options
author | Paolo Carlini <pcarlini@suse.de> | 2005-03-09 17:03:34 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2005-03-09 17:03:34 +0000 |
commit | 0790087871480b09ee7e15a397b886f9df36b4fc (patch) | |
tree | 8eb378f345a71c8ed7a59ad7a085cd3bd7b2144c /gcc/cp/decl.c | |
parent | 5e91f7a384b7a767308f73b7a9d467986cc3472c (diff) | |
download | gcc-0790087871480b09ee7e15a397b886f9df36b4fc.zip gcc-0790087871480b09ee7e15a397b886f9df36b4fc.tar.gz gcc-0790087871480b09ee7e15a397b886f9df36b4fc.tar.bz2 |
re PR c++/16859 (Empty initializer for array of unknown size spuriously accepted)
2005-03-09 Paolo Carlini <pcarlini@suse.de>
PR c++/16859
* decl.c (complete_array_type): In pedantic mode, return
3 for an empty initializer list as the initializer for an
array of unknown bound (8.5.1/4).
(maybe_deduce_size_from_array_init): Fix final test to use
the above.
From-SVN: r96194
Diffstat (limited to 'gcc/cp/decl.c')
-rw-r--r-- | gcc/cp/decl.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index fbb264e..c253028 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -3924,9 +3924,7 @@ maybe_deduce_size_from_array_init (tree decl, tree init) DECL_EXTERNAL (decl) = 1; } - if (pedantic && TYPE_DOMAIN (type) != NULL_TREE - && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)), - integer_zero_node)) + if (failure == 3) error ("zero-size array %qD", decl); layout_decl (decl, 0); @@ -5329,7 +5327,8 @@ expand_static_init (tree decl, tree init) /* Make TYPE a complete type based on INITIAL_VALUE. Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered, - 2 if there was no information (in which case assume 0 if DO_DEFAULT). */ + 2 if there was no information (in which case assume 0 if DO_DEFAULT), + 3 if the initializer list is empty (in pedantic mode). */ int complete_array_type (tree type, tree initial_value, int do_default) @@ -5371,6 +5370,9 @@ complete_array_type (tree type, tree initial_value, int do_default) else maxindex = size_binop (PLUS_EXPR, maxindex, ssize_int (1)); } + + if (pedantic && tree_int_cst_equal (maxindex, ssize_int (-1))) + value = 3; } else { |