aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2008-11-10 16:52:50 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2008-11-10 16:52:50 +0000
commit852d22b41a1467860f59d3aa900a8b9a96ed8be7 (patch)
treee3d180fb52be941078efe7fa4bcca0c71faa1a38
parent959f8cd7dac3ddd84c486ab0ab584513f2d150a6 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/calls.c3
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/pack11.adb29
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;