https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65818
--- Comment #7 from vries at gcc dot gnu.org --- Hmm, this patch has failures for x86_64: - va_arg (ap, void): gcc.c-torture/compile/pr48767.c - vla: gcc.c-torture/execute/20020412-1.c gcc.dg/compat/struct-by-value-22 gcc.dg/lto/20090706-1 gcc.target/i386/memcpy-strategy-4.c this patch is more conservative: ... diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 7786e16..e23f510 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -9336,7 +9336,12 @@ gimplify_va_arg_internal (tree valist, tree type, location_t loc, else gimplify_expr (&valist, pre_p, post_p, is_gimple_min_lval, fb_lvalue); - return targetm.gimplify_va_arg_expr (valist, type, pre_p, post_p); + tree expr = targetm.gimplify_va_arg_expr (valist, type, pre_p, post_p); + gcc_assert (TREE_CODE (expr) == MEM_REF); + if (!is_gimple_mem_ref_addr (TREE_OPERAND (expr, 0))) + gimplify_expr (&TREE_OPERAND (expr, 0), pre_p, post_p, + is_gimple_mem_ref_addr, fb_rvalue); + return expr; } /* Gimplify __builtin_va_arg, aka VA_ARG_EXPR, which is not really a ... It allows at least pr48767.c, 20020412-1.c and memcpy-strategy-4.c to pass.