This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug ada/18819] [4.1/4.2 Regression] ACATS cdd2a01 cdd2a02 fail at runtime
- From: "ebotcazou at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 22 Jan 2006 10:19:39 -0000
- Subject: [Bug ada/18819] [4.1/4.2 Regression] ACATS cdd2a01 cdd2a02 fail at runtime
- References: <bug-18819-7210@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #16 from ebotcazou at gcc dot gnu dot org 2006-01-22 10:19 -------
> Any ideas why this would be the case?
The types are not supposed to alias each other. The lines in the .dg file are:
R8b : fdd2a00__write__A7b__2 :=
ada__streams__Tstream_element_offsetB?(
system__arith_64__add_with_ovflo_check (interfaces__integer_64
?(stream.last), interfaces__integer_64?(
ada__streams__Tstream_element_offsetB(item'length))))'reference;
[constraint_error when R8b.all >= R5b.all and then (R5b.all <
1 or else R8b.all > ada__streams__Tstream_element_offsetB(R3b)) "range
check failed"]
ada/trans.c:3053
case N_Reference:
/* Like 'Access as far as we are concerned. */
gnu_result = gnat_to_gnu (Prefix (gnat_node));
gnu_result = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_result);
gnu_result_type = get_unpadded_type (Etype (gnat_node));
break;
These N_Reference nodes are an endless source of problems because they cause
gigi to take the address of objects that are not aliased. We have been working
towards eliminating them as much as possible by using renaming instead; this
case (check on the result of a function call) is probably the most delicate
one.
No real solution as of this writing, only a poor workaround: not compiling the
support files with -gnato (overflow checks).
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18819