This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/36858] New: Incorrect alignment attribute on stack parameter
- From: "hjl dot tools at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 16 Jul 2008 21:15:37 -0000
- Subject: [Bug middle-end/36858] New: Incorrect alignment attribute on stack parameter
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
locate_and_pad_parm has
where_pad = FUNCTION_ARG_PADDING (passed_mode, type);
boundary = FUNCTION_ARG_BOUNDARY (passed_mode, type);
locate->where_pad = where_pad;
locate->boundary = boundary;
/* Remember if the outgoing parameter requires extra alignment on the
calling function side. */
if (boundary > PREFERRED_STACK_BOUNDARY)
boundary = PREFERRED_STACK_BOUNDARY;
When boundary > PREFERRED_STACK_BOUNDARY, boundary is capped
to PREFERRED_STACK_BOUNDARY. But locate->boundary has the wrong
value. The following patch should correct this:
Index: function.c
===================================================================
--- function.c (revision 137896)
+++ function.c (working copy)
@@ -3258,13 +3258,13 @@ locate_and_pad_parm (enum machine_mode p
= type ? size_in_bytes (type) : size_int (GET_MODE_SIZE (passed_mode));
where_pad = FUNCTION_ARG_PADDING (passed_mode, type);
boundary = FUNCTION_ARG_BOUNDARY (passed_mode, type);
+ if (boundary > PREFERRED_STACK_BOUNDARY)
+ boundary = PREFERRED_STACK_BOUNDARY;
locate->where_pad = where_pad;
locate->boundary = boundary;
/* Remember if the outgoing parameter requires extra alignment on the
calling function side. */
- if (boundary > PREFERRED_STACK_BOUNDARY)
- boundary = PREFERRED_STACK_BOUNDARY;
if (crtl->stack_alignment_needed < boundary)
crtl->stack_alignment_needed = boundary;
--
Summary: Incorrect alignment attribute on stack parameter
Product: gcc
Version: 4.4.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: hjl dot tools at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36858