diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2008-11-10 16:52:50 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2008-11-10 16:52:50 +0000 |
commit | 852d22b41a1467860f59d3aa900a8b9a96ed8be7 (patch) | |
tree | e3d180fb52be941078efe7fa4bcca0c71faa1a38 | |
parent | 959f8cd7dac3ddd84c486ab0ab584513f2d150a6 (diff) | |
download | gcc-852d22b41a1467860f59d3aa900a8b9a96ed8be7.zip gcc-852d22b41a1467860f59d3aa900a8b9a96ed8be7.tar.gz gcc-852d22b41a1467860f59d3aa900a8b9a96ed8be7.tar.bz2 |
calls.c (store_unaligned_arguments_into_pseudos): Deal only with values living in memory and use more precise alignment information.
* calls.c (store_unaligned_arguments_into_pseudos): Deal only with
values living in memory and use more precise alignment information.
From-SVN: r141742
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/calls.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/pack11.adb | 29 |
4 files changed, 40 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d3ad211..2d62c07 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2008-11-10 Eric Botcazou <ebotcazou@adacore.com> + + * calls.c (store_unaligned_arguments_into_pseudos): Deal only with + values living in memory and use more precise alignment information. + 2008-11-10 Jakub Jelinek <jakub@redhat.com> PR middle-end/35314 diff --git a/gcc/calls.c b/gcc/calls.c index a3d35b3..096dde4 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -837,7 +837,8 @@ store_unaligned_arguments_into_pseudos (struct arg_data *args, int num_actuals) for (i = 0; i < num_actuals; i++) if (args[i].reg != 0 && ! args[i].pass_on_stack && args[i].mode == BLKmode - && (TYPE_ALIGN (TREE_TYPE (args[i].tree_value)) + && MEM_P (args[i].value) + && (MEM_ALIGN (args[i].value) < (unsigned int) MIN (BIGGEST_ALIGNMENT, BITS_PER_WORD))) { int bytes = int_size_in_bytes (TREE_TYPE (args[i].tree_value)); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 412c77a..48794e8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2008-11-10 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/pack11.adb: New test. + 2008-11-10 Jakub Jelinek <jakub@redhat.com> PR c++/38021 diff --git a/gcc/testsuite/gnat.dg/pack11.adb b/gcc/testsuite/gnat.dg/pack11.adb new file mode 100644 index 0000000..479062b --- /dev/null +++ b/gcc/testsuite/gnat.dg/pack11.adb @@ -0,0 +1,29 @@ +-- { dg-do run } +-- { dg-options "-gnatws" } + +with System; + +procedure Pack11 is + + type R1 is record + A1, A2, A3 : System.Address; + end record; + + type R2 is record + C : Character; + R : R1; + end record; + pragma Pack (R2); + + procedure Dummy (R : R1) is begin null; end; + + procedure Init (X : R2) is + begin + Dummy (X.R); + end; + + My_R2 : R2; + +begin + Init (My_R2); +end; |