Commit dcbac1a4 by Eric Botcazou Committed by Eric Botcazou

re PR ada/56474 (bogus Storage_Error raised for record containing empty zero-based array)

	PR ada/56474
	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Subtype>: Use
	int_const_binop to shift bounds by 1 when they are integer constants.

From-SVN: r198663
parent 14523c25
2013-05-07 Eric Botcazou <ebotcazou@adacore.com>
PR ada/56474
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Subtype>: Use
int_const_binop to shift bounds by 1 when they are integer constants.
2013-04-25 Arnaud Charlet <charlet@adacore.com>
* gcc-interface/Makefile.in (ADA_EXCLUDE_SRCS): Exclude s-init.ad{s,b}
......
......@@ -2447,7 +2447,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
gnu_orig_max,
gnu_orig_min),
gnu_min,
size_binop (PLUS_EXPR, gnu_max,
int_const_binop (PLUS_EXPR, gnu_max,
size_one_node));
}
......@@ -2455,7 +2455,9 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
in all the other cases. Note that, here as well as above,
the condition used in the comparison must be equivalent to
the condition (length != 0). This is relied upon in order
to optimize array comparisons in compare_arrays. */
to optimize array comparisons in compare_arrays. Moreover
we use int_const_binop for the shift by 1 if the bound is
constant to avoid any unwanted overflow. */
else
gnu_high
= build_cond_expr (sizetype,
......@@ -2464,7 +2466,10 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
gnu_orig_max,
gnu_orig_min),
gnu_max,
size_binop (MINUS_EXPR, gnu_min,
TREE_CODE (gnu_min) == INTEGER_CST
? int_const_binop (MINUS_EXPR, gnu_min,
size_one_node)
: size_binop (MINUS_EXPR, gnu_min,
size_one_node));
/* Reuse the index type for the range type. Then make an index
......
2013-05-07 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/specs/array3.ads: New test.
2013-05-06 Marc Glisse <marc.glisse@inria.fr>
* c-c++-common/vector-scalar-2.c: New testcase.
......
-- PR middle-end/56474
-- Reported by Pavel Zhukov <pavel@zhukoff.net>
-- { dg-do compile }
with Ada.Streams;
package Array3 is
use type Ada.Streams.Stream_Element_Offset;
type Vector (Size : Ada.Streams.Stream_Element_Offset) is record
Value : Ada.Streams.Stream_Element_Array (0 .. Size);
end record;
Empty_Vector : Vector (-1);
end Array3;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment