https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71793
--- Comment #4 from DB <db0451 at gmail dot com> --- (In reply to Richard Biener from comment #3) > Well, if you look at the out-of-line copies of the function then he is > correct. > But the inline copy in main() does not have this constraint and is still > mishandled. Note I didn't yet investigate closer what is going on. For the out-of-line copies, surely they are not allowed to leave a declared as volatile argument in a register and thereby break volatility? That seems contrary to the requirements of the storage class. I'd expect special handling to allocate a value on the stack prior to calling and refer to that in the function instead.