From patchwork Fri Jul 2 20:58:10 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [committed] Fix PR target/43958 Date: Fri, 02 Jul 2010 10:58:10 -0000 From: John David Anglin X-Patchwork-Id: 57776 Message-Id: <20100702205811.822084E77@hiauly1.hia.nrc.ca> To: gcc-patches@gcc.gnu.org The attached patch changes hppa_gimplify_va_arg_expr to use pointer arithmetic instead of integer arithmetic. This fixes the pointer escape and failure of gcc.dg/ipa/ipa-pta-10.c. Tested on hppa2.0w-hp-hpux11.11. Committed to trunk. Dave Index: config/pa/pa.c =================================================================== --- config/pa/pa.c (revision 161653) +++ config/pa/pa.c (working copy) @@ -6040,11 +6040,10 @@ u = fold_build1 (NEGATE_EXPR, sizetype, u); t = build2 (POINTER_PLUS_EXPR, valist_type, valist, u); - /* Copied from va-pa.h, but we probably don't need to align to - word size, since we generate and preserve that invariant. */ - u = size_int (size > 4 ? -8 : -4); - t = fold_convert (sizetype, t); - t = build2 (BIT_AND_EXPR, sizetype, t, u); + /* Align to 4 or 8 byte boundary depending on argument size. */ + + u = build_int_cst (TREE_TYPE (t), (HOST_WIDE_INT)(size > 4 ? -8 : -4)); + t = build2 (BIT_AND_EXPR, TREE_TYPE (t), t, u); t = fold_convert (valist_type, t); t = build2 (MODIFY_EXPR, valist_type, valist, t);