diff mbox

Fix PR79908

Message ID 1FD87676-F24D-4718-BB3C-1E0DD6B901FA@linux.vnet.ibm.com
State New
Headers show

Commit Message

Bill Schmidt March 14, 2017, 9:36 p.m. UTC
> On Mar 14, 2017, at 11:07 AM, Bill Schmidt <wschmidt@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:


Bill
diff mbox

Patch

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);