2012-03-28 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 28 Mar 2012 15:04:23 +0000 (15:04 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 28 Mar 2012 15:04:23 +0000 (15:04 +0000)
* typeck2.c (process_init_constructor_array): Use the proper
type for computing the array length.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@185919 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/typeck2.c

index 0d9be4f..0c96065 100644 (file)
@@ -1,3 +1,8 @@
+2012-03-28  Richard Guenther  <rguenther@suse.de>
+
+       * typeck2.c (process_init_constructor_array): Use the proper
+       type for computing the array length.
+
 2012-03-27  Meador Inge  <meadori@codesourcery.com>
 
        PR c++/52672
index 80a1d04..f9b525c 100644 (file)
@@ -1054,9 +1054,14 @@ process_init_constructor_array (tree type, tree init,
     {
       tree domain = TYPE_DOMAIN (type);
       if (domain)
-       len = (TREE_INT_CST_LOW (TYPE_MAX_VALUE (domain))
-             - TREE_INT_CST_LOW (TYPE_MIN_VALUE (domain))
-             + 1);
+       len = double_int_ext
+               (double_int_add
+                 (double_int_sub
+                   (tree_to_double_int (TYPE_MAX_VALUE (domain)),
+                    tree_to_double_int (TYPE_MIN_VALUE (domain))),
+                   double_int_one),
+                 TYPE_PRECISION (TREE_TYPE (domain)),
+                 TYPE_UNSIGNED (TREE_TYPE (domain))).low;
       else
        unbounded = true;  /* Take as many as there are.  */
     }