re PR c++/58525 (__cxa_throw_bad_array_new_length is generated with -fno-exceptions)
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
This commit is contained in:
parent
4417887978
commit
f391b44b19
@ -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.
|
||||
|
@ -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);
|
||||
|
@ -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. */
|
||||
|
@ -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));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user