https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109516
Yann Droneaud <yann at droneaud dot fr> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |yann at droneaud dot fr --- Comment #4 from Yann Droneaud <yann at droneaud dot fr> --- (In reply to Andrew Pinski from comment #1) > > Basically GCC decided that the type of the bitfield uint48 has a type of > unsigned:48 and since it is larger size than int, it does not get promoted > to int and in this cases gets passed to the variadic function as that type. I wouldn't have expected bitfield type to be "visible" outside of its structure. And I failed to comprehend how unsigned long int:48 can be passed to a variadic function without being promoted to plain unsigned long int ... Anyway, I will have to add a cast to silence the warning. > While clang decided that the type is still unsigned long long. AFAICT, there's no unsigned long long involved in my example.