PR middle-end/38028
authoruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 7 Mar 2009 16:02:30 +0000 (16:02 +0000)
committeruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 7 Mar 2009 16:02:30 +0000 (16:02 +0000)
* function.c (assign_parm_setup_stack): Use STACK_SLOT_ALIGNMENT to
determine alignment passed to assign_stack_local.
(assign_parms_unsplit_complex): Likewise.
* except.c (sjlj_build_landing_pads): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@144696 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/except.c
gcc/function.c

index 68bd222..6aeb8a4 100644 (file)
@@ -1,3 +1,11 @@
+2009-03-07  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
+
+       PR middle-end/38028
+       * function.c (assign_parm_setup_stack): Use STACK_SLOT_ALIGNMENT to
+       determine alignment passed to assign_stack_local.
+       (assign_parms_unsplit_complex): Likewise.
+       * except.c (sjlj_build_landing_pads): Likewise.
+
 2009-03-06  Jakub Jelinek  <jakub@redhat.com>
 
        PR middle-end/39360
index c762edc..2913fc8 100644 (file)
@@ -2017,11 +2017,13 @@ sjlj_build_landing_pads (void)
   if (sjlj_find_directly_reachable_regions (lp_info))
     {
       rtx dispatch_label = gen_label_rtx ();
-
+      int align = STACK_SLOT_ALIGNMENT (sjlj_fc_type_node,
+                                       TYPE_MODE (sjlj_fc_type_node),
+                                       TYPE_ALIGN (sjlj_fc_type_node));
       crtl->eh.sjlj_fc
        = assign_stack_local (TYPE_MODE (sjlj_fc_type_node),
                              int_size_in_bytes (sjlj_fc_type_node),
-                             TYPE_ALIGN (sjlj_fc_type_node));
+                             align);
 
       sjlj_assign_call_site_values (dispatch_label, lp_info);
       sjlj_mark_call_sites (lp_info);
index 471b91f..0cbcbd3 100644 (file)
@@ -2967,10 +2967,13 @@ assign_parm_setup_stack (struct assign_parm_data_all *all, tree parm,
 
       if (data->stack_parm == 0)
        {
+         int align = STACK_SLOT_ALIGNMENT (data->passed_type,
+                                           GET_MODE (data->entry_parm),
+                                           TYPE_ALIGN (data->passed_type));
          data->stack_parm
            = assign_stack_local (GET_MODE (data->entry_parm),
                                  GET_MODE_SIZE (GET_MODE (data->entry_parm)),
-                                 TYPE_ALIGN (data->passed_type));
+                                 align);
          set_mem_attributes (data->stack_parm, parm, 1);
        }
 
@@ -3032,11 +3035,13 @@ assign_parms_unsplit_complex (struct assign_parm_data_all *all, tree fnargs)
            {
              rtx rmem, imem;
              HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (parm));
+             int align = STACK_SLOT_ALIGNMENT (TREE_TYPE (parm),
+                                               DECL_MODE (parm),
+                                               TYPE_ALIGN (TREE_TYPE (parm)));
 
              /* split_complex_arg put the real and imag parts in
                 pseudos.  Move them to memory.  */
-             tmp = assign_stack_local (DECL_MODE (parm), size,
-                                       TYPE_ALIGN (TREE_TYPE (parm)));
+             tmp = assign_stack_local (DECL_MODE (parm), size, align);
              set_mem_attributes (tmp, parm, 1);
              rmem = adjust_address_nv (tmp, inner, 0);
              imem = adjust_address_nv (tmp, inner, GET_MODE_SIZE (inner));