re PR c++/58525 (__cxa_throw_bad_array_new_length is generated with -fno-exceptions)
authorAlexander Ivchenko <alexander.ivchenko@intel.com>
Sat, 23 Nov 2013 16:28:42 +0000 (16:28 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Sat, 23 Nov 2013 16:28:42 +0000 (11:28 -0500)
PR c++/58525
* call.c (build_operator_new_call): Add flag_exceptions check.
* decl.c (compute_array_index_type): Ditto.
* init.c (build_new_1): Ditto.
(build_vec_init): Ditto.

From-SVN: r205310

gcc/cp/ChangeLog
gcc/cp/call.c
gcc/cp/decl.c
gcc/cp/init.c

index ee0674c..05aa444 100644 (file)
@@ -1,3 +1,11 @@
+2013-11-23  Alexander Ivchenko  <alexander.ivchenko@intel.com>
+
+       PR c++/58525
+       * call.c (build_operator_new_call): Add flag_exceptions check.
+       * decl.c (compute_array_index_type): Ditto.
+       * init.c (build_new_1): Ditto.
+       (build_vec_init): Ditto.
+
 2013-11-22  Jakub Jelinek  <jakub@redhat.com>
 
        * cp-gimplify.c: Include target.h and c-family/c-ubsan.h.
index 935e011..6a4386e 100644 (file)
@@ -3956,7 +3956,7 @@ build_operator_new_call (tree fnname, vec<tree, va_gc> **args,
   if (size_check != NULL_TREE)
     {
       tree errval = TYPE_MAX_VALUE (sizetype);
-      if (cxx_dialect >= cxx11)
+      if (cxx_dialect >= cxx11 && flag_exceptions)
        errval = throw_bad_array_new_length ();
       *size = fold_build3 (COND_EXPR, sizetype, size_check,
                           original_size, errval);
index 40a9a8c..889c203 100644 (file)
@@ -8393,7 +8393,7 @@ compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
 
          stabilize_vla_size (itype);
 
-         if (cxx_dialect >= cxx1y)
+         if (cxx_dialect >= cxx1y && flag_exceptions)
            {
              /* If the VLA bound is larger than half the address space,
                 or less than zero, throw std::bad_array_length.  */
index d67a389..dc40989 100644 (file)
@@ -2528,7 +2528,7 @@ build_new_1 (vec<tree, va_gc> **placement, tree type, tree nelts,
            }
          /* Perform the overflow check.  */
          tree errval = TYPE_MAX_VALUE (sizetype);
-         if (cxx_dialect >= cxx11)
+         if (cxx_dialect >= cxx11 && flag_exceptions)
            errval = throw_bad_array_new_length ();
          if (outer_nelts_check != NULL_TREE)
             size = fold_build3 (COND_EXPR, sizetype, outer_nelts_check,
@@ -3398,7 +3398,8 @@ build_vec_init (tree base, tree maxindex, tree init,
      is big enough for all the initializers.  */
   if (init && TREE_CODE (init) == CONSTRUCTOR
       && CONSTRUCTOR_NELTS (init) > 0
-      && !TREE_CONSTANT (maxindex))
+      && !TREE_CONSTANT (maxindex)
+      && flag_exceptions)
     length_check = fold_build2 (LT_EXPR, boolean_type_node, maxindex,
                                size_int (CONSTRUCTOR_NELTS (init) - 1));