This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/22421] problems with -Wformat and bit-fields
- From: "wilson at tuliptree dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 30 Jan 2006 23:24:59 -0000
- Subject: [Bug c/22421] problems with -Wformat and bit-fields
- References: <bug-22421-338@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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