re PR c++/16859 (Empty initializer for array of unknown size spuriously accepted)
authorPaolo Carlini <pcarlini@suse.de>
Wed, 9 Mar 2005 17:03:34 +0000 (17:03 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Wed, 9 Mar 2005 17:03:34 +0000 (17:03 +0000)
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

gcc/cp/ChangeLog
gcc/cp/decl.c

index 8eec196..7986946 100644 (file)
@@ -1,3 +1,12 @@
+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.
+
 2005-03-08  Nathan Sidwell  <nathan@codesourcery.com>
 
        PR c++/20186
index fbb264e..c253028 100644 (file)
@@ -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)
 \f
 /* 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
        {