[PATCH] Fix PR79908

Bill Schmidt wschmidt@linux.vnet.ibm.com
Tue Mar 14 12:50:00 GMT 2017


> On Mar 14, 2017, at 3:57 AM, Richard Biener <richard.guenther@gmail.com> wrote:
> 
> On Tue, Mar 14, 2017 at 1:04 AM, Bill Schmidt
> <wschmidt@linux.vnet.ibm.com> wrote:
>> 
>> Index: gcc/tree-stdarg.c
>> ===================================================================
>> --- gcc/tree-stdarg.c   (revision 246109)
>> +++ gcc/tree-stdarg.c   (working copy)
>> @@ -1057,7 +1057,7 @@ expand_ifn_va_arg_1 (function *fun)
>>               types.  */
>>            gimplify_assign (lhs, expr, &pre);
>>          }
>> -       else
>> +       else if (is_gimple_addressable (expr))
>>          gimplify_expr (&expr, &pre, &post, is_gimple_lvalue, fb_lvalue);
> 
> This is wrong - we lose side-effects this way and the only reason we gimplify
> is to _not_ lose them.
> 
> Better is sth like
> 
> Index: gcc/tree-stdarg.c
> ===================================================================
> --- gcc/tree-stdarg.c   (revision 246082)
> +++ gcc/tree-stdarg.c   (working copy)
> @@ -1058,7 +1058,7 @@ expand_ifn_va_arg_1 (function *fun)
>            gimplify_assign (lhs, expr, &pre);
>          }
>        else
> -         gimplify_expr (&expr, &pre, &post, is_gimple_lvalue, fb_lvalue);
> +         gimplify_expr (&expr, &pre, &post, is_gimple_val, fb_either);
> 
>        input_location = saved_location;
>        pop_gimplify_context (NULL);

OK, thanks for the explanation.  Unfortunately this fails bootstrap with a failed 
assert a little later.  I'll dig further.

Bill



More information about the Gcc-patches mailing list