> On Mar 14, 2017, at 11:07 AM, Bill Schmidt <wschm...@linux.vnet.ibm.com> 
> wrote:
>> 
>> Your suggestion failed bootstrap in libiberty on vprintf-support.c.  
>> Compilation failed with:
>> 
>> /home/wschmidt/gcc/build/gcc-mainline-test2-debug/gcc/xgcc 
>> -B/home/wschmidt/gcc/build/gcc-mainline-test2-debug/gcc/ 
>> -B/home/wschmidt/gcc/install/gcc-mainline-test2-debug/powerpc64le-unknown-linux-gnu/bin/
>>  
>> -B/home/wschmidt/gcc/install/gcc-mainline-test2-debug/powerpc64le-unknown-linux-gnu/bin/
>>  
>> -B/home/wschmidt/gcc/install/gcc-mainline-test2-debug/powerpc64le-unknown-linux-gnu/lib/
>>  -isystem 
>> /home/wschmidt/gcc/install/gcc-mainline-test2-debug/powerpc64le-unknown-linux-gnu/include
>>  -isystem 
>> /home/wschmidt/gcc/install/gcc-mainline-test2-debug/powerpc64le-unknown-linux-gnu/sys-include
>>     -c -DHAVE_CONFIG_H -g -O2 -gtoggle  -I. 
>> -I/home/wschmidt/gcc/gcc-mainline-test2/libiberty/../include  -W -Wall 
>> -Wwrite-strings -Wc++-compat -Wstrict-prototypes -Wshadow=local -pedantic  
>> -D_GNU_SOURCE -fPIC 
>> /home/wschmidt/gcc/gcc-mainline-test2/libiberty/vprintf-support.c -o 
>> pic/vprintf-support.o
>> 
>> The initial expression being gimplified is ADDR_EXPR (VAR_DECL (ap)).  
>> Gimplification
>> turns this into MEM_REF (VAR_DECL (D.4274), 0), and the is_gimple_val test 
>> fails on that.
> 
> Reduced test case:
> 
> typedef __builtin_va_list __gnuc_va_list;
> typedef __gnuc_va_list va_list;
> 
> void
> foo (va_list args)
> {
>  va_list ap;
>  __builtin_va_copy (ap, args);
>  (void)__builtin_va_arg (ap, int);
>  __builtin_va_end(ap);
> }
> 

Perhaps something like this?  It appears to be doing better on bootstrap, and 
avoids
failure on both the original problem and the new test case above:

Index: gcc/tree-stdarg.c                                                        
===================================================================
--- gcc/tree-stdarg.c   (revision 246109)                                       
+++ gcc/tree-stdarg.c   (working copy)                                          
@@ -1058,7 +1058,13 @@ expand_ifn_va_arg_1 (function *fun)
            gimplify_assign (lhs, expr, &pre);                                  
          }                                                                     
        else                                                                    
-         gimplify_expr (&expr, &pre, &post, is_gimple_lvalue, fb_lvalue);      
+         {                                                                     
+           enum gimplify_status status;                                        
+           status = gimplify_expr (&expr, &pre, &post, is_gimple_lvalue,       
+                                   fb_lvalue | fb_mayfail);                    
+           if (status == GS_ERROR)                                             
+             gimplify_expr (&expr, &pre, &post, is_gimple_val, fb_rvalue);     
+         }                                                                     
                                                                                
        input_location = saved_location;                                        
        pop_gimplify_context (NULL);                                            

Bill

Reply via email to