* gcc-interface/decl.c (gnat_to_gnu_entity, case E_Function): Allow
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 25 Oct 2010 10:35:07 +0000 (10:35 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 25 Oct 2010 10:35:07 +0000 (10:35 +0000)
commite62fec2faae1f34e1995d8679b7ad5a3f0d46cc9
tree8cc3581d1da42f9345f072e15d0748dc2e860814
parent5b80c8e4126f3c102cbd6c93e1a1002b5ea12026
* gcc-interface/decl.c (gnat_to_gnu_entity, case E_Function): Allow
In Out/Out parameters for functions.
* gcc-interface/trans.c (gnu_return_var_stack): New variable.
(create_init_temporary): New static function.
(Subprogram_Body_to_gnu): Handle In Out/Out parameters for functions.
(call_to_gnu): Likewise.  Use create_init_temporary in order to create
temporaries for unaligned parameters and return value.  If there is an
unaligned In Out or Out parameter passed by reference, push a binding
level if not already done.  If a binding level has been pushed and the
call is returning a value, create the call statement.
(gnat_to_gnu) <N_Return_Statement>: Handle In Out/Out parameters for
functions.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@165914 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/ada/ChangeLog
gcc/ada/gcc-interface/decl.c
gcc/ada/gcc-interface/trans.c
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/in_out_parameter2.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/in_out_parameter3.adb [new file with mode: 0644]