https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86584
--- Comment #3 from Futaura <oliver at futaura dot co.uk> --- Can you explain why you think that? There is nothing ambiguous or undefined about this code. Each function argument is evaluated before calling func() and it doesn't even matter which order the arguments are evaluated in this case. We're talking about a pointer for the first argument, and that address is going to remain constant no matter what is assigned to s.f before or after. Only if the code looked more like the following, not involving a pointer, would the warning then be understandable: void func(int, int); func(s.f, (s.f = 1));