[Ada] Fix internal error on packed array In/Out actual parameter
authorEric Botcazou <ebotcazou@adacore.com>
Fri, 5 Jul 2019 07:03:30 +0000 (07:03 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Fri, 5 Jul 2019 07:03:30 +0000 (07:03 +0000)
commitd21328a0d42f1b6a92f777acf4972e3c1c5d330c
tree0d0aca6b6fdb14c4988cbb20ec2fded21985c460
parent6d0289b1ec9e1f2b963d6dc6bb5cf262913c429c
[Ada] Fix internal error on packed array In/Out actual parameter

This fixes an issue introduced in Ada 2012 for calls to functions taking
an In/Out parameter and for which the actual is the component of a
packed array.  In this case, the front-end needs to create a temporary
for the actual, initialize it before the call and assign it back after
it, because operations on bit-packed arrays are converted into
mask-and-shift sequences.

2019-07-05  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* exp_ch4.adb (Expand_N_Indexed_Component): Do not expand actual
parameters of function calls here either.

gcc/testsuite/

* gnat.dg/pack23.adb, gnat.dg/pack23_pkg.ads: New testcase.

From-SVN: r273124
gcc/ada/ChangeLog
gcc/ada/exp_ch4.adb
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/pack23.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/pack23_pkg.ads [new file with mode: 0644]