[Bug middle-end/36859] New: Caller/callee mismatch for vararg on stack
hjl dot tools at gmail dot com
gcc-bugzilla@gcc.gnu.org
Wed Jul 16 21:25:00 GMT 2008
locate_and_pad_parm never align parameters on stack for
callers. It only caps parameter alignment to
PREFERRED_STACK_BOUNDARY. But std_gimplify_va_arg_expr
tries to align stack for callee:
/* va_list pointer is aligned to PARM_BOUNDARY. If argument actually
requires greater alignment, we must perform dynamic alignment. */
if (boundary > align
&& !integer_zerop (TYPE_SIZE (type)))
{
t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist_tmp,
fold_build2 (POINTER_PLUS_EXPR, TREE_TYPE (valist),
valist_tmp, size_int (boundary - 1)));
gimplify_and_add (t, pre_p);
t = fold_convert (sizetype, valist_tmp);
t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist_tmp,
fold_convert (TREE_TYPE (valist),
fold_build2 (BIT_AND_EXPR, sizetype, t,
size_int (-boundary))));
gimplify_and_add (t, pre_p);
}
else
boundary = align;
We have a mismatch between caller and callee. I have a testcase for ia32.
But it depends on PR 36858.
--
Summary: Caller/callee mismatch for vararg on stack
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
BugsThisDependsOn: 36858
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36859
More information about the Gcc-bugs
mailing list