Is there anyone out there who might have a SPARC environment with Ada
support who could run the attached Ada testcase on a version of gcc
patched with the attached patch? I'd like to verify whether the test
behaves correctly when compiled at -O0, -O1, and -O2. The expected
(correct) behavior is the following output:
a_value= 10 b_value= 20
Some context of what I'm trying to accomplish can be seen by looking at
the thread starting here:
http://gcc.gnu.org/ml/gcc/2006-08/msg00389.html
My utmost gratitude to anyone who can help!
- Josh
Index: gcc/calls.c
===================================================================
--- gcc/calls.c (revision 116236)
+++ gcc/calls.c (working copy)
@@ -1985,9 +1985,8 @@
/* For variable-sized objects, we must be called with a target
specified. If we were to allocate space on the stack here,
we would have no way of knowing when to free it. */
- rtx d = assign_temp (TREE_TYPE (exp), 1, 1, 1);
+ rtx d = assign_temp (TREE_TYPE (exp), 0, 1, 1);
- mark_temp_addr_taken (d);
structure_value_addr = XEXP (d, 0);
target = 0;
}
with Ada.Text_Io;
procedure Test_Func is
type A_Int is new Integer range 1..10;
type B_Int is new Integer range 11..20;
type A_Array is array(1..5) of A_Int;
type B_Array is array(1..5) of B_Int;
procedure Print_Values (A_Value : in A_Int;
B_Value : in B_Int) is
begin
Ada.Text_Io.Put_Line("a_value=" & Integer'Image(Integer(A_Value)) &
" b_value=" & Integer'Image(Integer(B_Value)));
end Print_Values;
function Get_A return A_Array is
A : A_Array := (others => 10);
begin
return A;
end Get_A;
function Get_B return B_Array is
B : B_Array := (others => 20);
begin
return B;
end Get_B;
J : Natural := 3;
begin
Print_Values
(A_Value =>Get_A(J), B_Value =>Get_B(J));
end Test_Func;