diff options
Diffstat (limited to 'gcc/config/sparc/sparc.c')
-rw-r--r-- | gcc/config/sparc/sparc.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c index 190c82ec0ce..85b41cbbcf2 100644 --- a/gcc/config/sparc/sparc.c +++ b/gcc/config/sparc/sparc.c @@ -5716,18 +5716,20 @@ sparc_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p) incr = valist; if (align) { - incr = fold_build2 (PLUS_EXPR, ptr_type_node, incr, - ssize_int (align - 1)); - incr = fold_build2 (BIT_AND_EXPR, ptr_type_node, incr, - ssize_int (-align)); + incr = fold_build2 (POINTER_PLUS_EXPR, ptr_type_node, incr, + size_int (align - 1)); + incr = fold_convert (sizetype, incr); + incr = fold_build2 (BIT_AND_EXPR, sizetype, incr, + size_int (-align)); + incr = fold_convert (ptr_type_node, incr); } gimplify_expr (&incr, pre_p, post_p, is_gimple_val, fb_rvalue); addr = incr; if (BYTES_BIG_ENDIAN && size < rsize) - addr = fold_build2 (PLUS_EXPR, ptr_type_node, incr, - ssize_int (rsize - size)); + addr = fold_build2 (POINTER_PLUS_EXPR, ptr_type_node, incr, + size_int (rsize - size)); if (indirect) { @@ -5755,7 +5757,7 @@ sparc_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p) else addr = fold_convert (ptrtype, addr); - incr = fold_build2 (PLUS_EXPR, ptr_type_node, incr, ssize_int (rsize)); + incr = fold_build2 (POINTER_PLUS_EXPR, ptr_type_node, incr, size_int (rsize)); incr = build2 (GIMPLE_MODIFY_STMT, ptr_type_node, valist, incr); gimplify_and_add (incr, post_p); |