2014-11-27 Kai Tietz <ktietz@redhat.com>
authorktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 27 Nov 2014 13:02:45 +0000 (13:02 +0000)
committerktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 27 Nov 2014 13:02:45 +0000 (13:02 +0000)
PR c++/63904
* constexpr.c (cxx_eval_vec_init_1): Avoid
type-overflow issue.

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

gcc/cp/ChangeLog
gcc/cp/constexpr.c

index 9c64279..a59182b 100644 (file)
@@ -1,3 +1,9 @@
+2014-11-27  Kai Tietz  <ktietz@redhat.com>
+
+       PR c++/63904
+       * constexpr.c (cxx_eval_vec_init_1): Avoid
+       type-overflow issue.
+
 2014-11-26  Jason Merrill  <jason@redhat.com>
 
        Allow partial specialization of variable templates.
index ef9ef70..f4aca4b 100644 (file)
@@ -2013,12 +2013,12 @@ cxx_eval_vec_init_1 (const constexpr_ctx *ctx, tree atype, tree init,
                     bool *non_constant_p, bool *overflow_p)
 {
   tree elttype = TREE_TYPE (atype);
-  int max = tree_to_shwi (array_type_nelts (atype));
+  unsigned HOST_WIDE_INT max = tree_to_uhwi (array_type_nelts_top (atype));
   verify_ctor_sanity (ctx, atype);
   vec<constructor_elt, va_gc> **p = &CONSTRUCTOR_ELTS (ctx->ctor);
   vec_alloc (*p, max + 1);
   bool pre_init = false;
-  int i;
+  unsigned HOST_WIDE_INT i;
 
   /* For the default constructor, build up a call to the default
      constructor of the element type.  We only need to handle class types
@@ -2043,7 +2043,7 @@ cxx_eval_vec_init_1 (const constexpr_ctx *ctx, tree atype, tree init,
       pre_init = true;
     }
 
-  for (i = 0; i <= max; ++i)
+  for (i = 0; i < max; ++i)
     {
       tree idx = build_int_cst (size_type_node, i);
       tree eltinit;