[Bug c/22421] problems with -Wformat and bit-fields
wilson at tuliptree dot org
gcc-bugzilla@gcc.gnu.org
Mon Jan 30 23:25:00 GMT 2006
------- Comment #11 from wilson at tuliptree dot org 2006-01-30 23:24 -------
Subject: Re: problems with -Wformat and bit-fields
On Mon, 2006-01-23 at 16:06, tony dot luck at intel dot com wrote:
> u64 den : 32, num : 32; /* numerator & denominator */
> printf("den=%lx num=%lx\n", x.den, x.num);
> u.c:9: warning: format %lx expects type long unsigned int, but argument 2
> has type unsigned int
This is deliberate, as per our interpretation of the ISO C99 rules for
integer conversions. If a bit-field has 32-bits, int is a 32-bit type,
and long is a 64-bit type, then the bit-field promotes to int/unsigned
int, even if declared with a long or unsigned long type. If long is a
32-bit type, then the bit-field promotes to long if declared with long
type.
This is mentioned in Joseph's response in comment #2.
See also the testcase that was added for this PR. You can click on the
testsuite link in comment #8 to see it.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22421
More information about the Gcc-bugs
mailing list