On Mon, 22 Feb 2016, Wink Saville wrote:

> I understand "long" bit fields are in ISO, but its a gcc extension so
> it would seem it should play nice with as much of the language as
> possible.
> 
> It seems the root of the problem here is the length encoding
> in the type, why does gcc do that, does the standard
> require it?

See the previously identified analysis of the textual history, the various 
C90 and C99 DRs involved, and how (as noted in 1993 in DR#120, and as is 
still the case) there is *no definition whatever* in ISO C of what value 
would be stored in a bit-field by an assignment of a value out of range of 
an integer type with the given number of bits, other than through the 
rules for conversions, which only apply if you consider the bit-field to 
have the restricted-width type.  (And, if you wish, you could do the 
archaeology around the many bugs that were fixed in GCC by giving 
bit-fields types reflecting the values they could actually represent.)

The root of the "problem" is using the extension of bit-fields wider than 
int, a feature that simply doesn't fit well into the C language and has 
unintuitive consequences.

-- 
Joseph S. Myers
jos...@codesourcery.com

Reply via email to