https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66013
--- Comment #1 from vries at gcc dot gnu.org --- Before pass_stdarg, we observe in f1 that va_start and va_arg use the same argument: ... # .MEM_2 = VDEF <.MEM_1(D)> # USE = nonlocal escaped # CLB = nonlocal escaped { D.1806 } (escaped) __builtin_va_startD.1021 (&apD.1806, 0); # .MEM_3 = VDEF <.MEM_2> # USE = nonlocal null { D.1806 } (escaped) # CLB = nonlocal null { D.1806 } (escaped) res_4 = VA_ARG (&apD.1806, 0B); ... Before pass_stdarg, we observe in f2 that va_start and va_arg do not use the same argument: ... # .MEM_2 = VDEF <.MEM_1(D)> # USE = nonlocal escaped # CLB = nonlocal escaped { D.1814 } __builtin_va_startD.1021 (&apD.1814, 0); # VUSE <.MEM_2> # PT = nonlocal ap.0_3 = apD.1814; # .MEM_4 = VDEF <.MEM_2> apD.1830 = ap.0_3; # .MEM_8 = VDEF <.MEM_4> # USE = nonlocal null { D.1830 } (escaped) # CLB = nonlocal null { D.1830 } (escaped) _7 = VA_ARG (&apD.1830, 0B); ...