https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116969
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- I don't think so. Libstdc++ is using dirty tricks to have two different kinds of `long double` visible in the same TU, and passing each of them to the appropriate snprintf function. The snprintf function is correct to use the format attr to say %Lf expects long double, but libstdc++ is bypassing the public API for snprintf and calling the __snprintfibm128 version directly with a __ibm128 value. That's correct code, and the correct type for %Lf with that function, but the format attr doesn't know about the alternative long double types. I don't think it needs to be taught, because this is not something users ever need to do.