This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Fix PR79908
On Mar 14, 2017, at 9:32 AM, Bill Schmidt <wschmidt@linux.vnet.ibm.com> wrote:
>
>> On Mar 14, 2017, at 9:25 AM, Richard Biener <richard.guenther@gmail.com> wrote:
>>
>>>>> 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:
>>
>> Hmm, it should simply gimplify to a load if it's not aggregate. Can
>> you share a testcase
>> where it doesn't work?
>
> 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);
}