Message ID | CAFiYyc0wg05HaNXvuPBy+SXHqEEge9eDpKR9XWLRpLgrqeRQHg@mail.gmail.com |
---|---|
State | New |
Headers | show |
> 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
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);