This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Fix PR79908


> On Mar 14, 2017, at 7:50 AM, Bill Schmidt <wschmidt@linux.vnet.ibm.com> wrote:
> 
> 
>> 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.

Looks like is_gimple_val is too restrictive for MEM_REFs, for which is_gimple_lvalue
passes.  Trying this now:

Index: gcc/tree-stdarg.c                                                        
===================================================================
--- gcc/tree-stdarg.c   (revision 246109)                                       
+++ gcc/tree-stdarg.c   (working copy)                                          
@@ -1057,8 +1057,10 @@ expand_ifn_va_arg_1 (function *fun)
               types.  */                                                       
            gimplify_assign (lhs, expr, &pre);                                  
          }                                                                     
+       else if (is_gimple_addressable (expr))                                  
+         gimplify_expr (&expr, &pre, &post, is_gimple_lvalue, fb_lvalue);      
        else                                                                    
-         gimplify_expr (&expr, &pre, &post, is_gimple_lvalue, fb_lvalue);      
+         gimplify_expr (&expr, &pre, &post, is_gimple_val, fb_rvalue);         
                                                                                
        input_location = saved_location;                                        
        pop_gimplify_context (NULL);                                            


> 
> Bill
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]