diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2012-11-28 10:51:19 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2012-11-28 10:51:19 +0000 |
commit | ce3da0d0d54ce3e469828698ba1ac5f25146b6f9 (patch) | |
tree | 66a07373943672c9d9ef3f8e395acb3f21fe89cd /gcc/stor-layout.c | |
parent | fb1fbef2735bce7c62511daf6f64343d9d97e299 (diff) | |
download | gcc-ce3da0d0d54ce3e469828698ba1ac5f25146b6f9.zip gcc-ce3da0d0d54ce3e469828698ba1ac5f25146b6f9.tar.gz gcc-ce3da0d0d54ce3e469828698ba1ac5f25146b6f9.tar.bz2 |
stor-layout.c (layout_type): Do not clear TREE_OVERFLOW on overflowed zeroes, except in one specific case.
* stor-layout.c (layout_type) <ARRAY_TYPE>: Do not clear TREE_OVERFLOW
on overflowed zeroes, except in one specific case.
ada/
* gcc-interface/decl.c (gnat_to_gnu_entity) <object>: Use
valid_constant_size_p to detect too large objects.
<E_Subprogram_Type>: Likewise for too large return types.
(allocatable_size_p): Call valid_constant_size_p in the fixed case.
(annotate_value) <INTEGER_CST>: Simplify.
<BIT_AND_EXPR>: Deal with negative values here.
* gcc-interface/trans.c (gnat_to_gnu) <N_Assignment_Statement>: Use
valid_constant_size_p to detect too large objects on the LHS.
* gcc-interface/misc.c (default_pass_by_ref): Likewise for large types.
And use TYPE_SIZE_UNIT throughout.
(must_pass_by_ref): Likewise.
* gcc-interface/utils.c (max_size) <tcc_unary>: Split from common case.
<tcc_binary>: Likewise. Call size_binop instead of fold_build2.
<tcc_expression>: Simplify.
* gcc-interface/utils2.c (build_allocator): Use valid_constant_size_p
to detect too large allocations.
From-SVN: r193886
Diffstat (limited to 'gcc/stor-layout.c')
-rw-r--r-- | gcc/stor-layout.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c index 4ac24f1..d0c093f 100644 --- a/gcc/stor-layout.c +++ b/gcc/stor-layout.c @@ -2233,12 +2233,12 @@ layout_type (tree type) size_binop (MINUS_EXPR, ub, lb))); } - /* If we arrived at a length of zero ignore any overflow - that occurred as part of the calculation. There exists - an association of the plus one where that overflow would - not happen. */ + /* ??? We have no way to distinguish a null-sized array from an + array spanning the whole sizetype range, so we arbitrarily + decide that [0, -1] is the only valid representation. */ if (integer_zerop (length) - && TREE_OVERFLOW (length)) + && TREE_OVERFLOW (length) + && integer_zerop (lb)) length = size_zero_node; TYPE_SIZE (type) = size_binop (MULT_EXPR, element_size, |