Compiler printf format checking

Dmitry Samersoff dmitry.samersoff at
Thu Dec 12 13:52:01 PST 2013

On 2013-12-12 05:14, Mikael Vidstedt wrote:
> Are we saying the gcc format checking ignores any qualifiers on %p, yet
> correctly treats it as a pointer format? That is, if we use something
> like "%08p", will gcc still recognize that as a pointer format and look
> for a pointer argument (without complaining)?

Int arg:

dooku:dms#cc test.c
test.c: In function ‘main’:
test.c:8:2: warning: format ‘%8p’ expects type ‘void *’, but argument 2
has type ‘int’

Pointer arg compiles silently.


> Cheers,
> Mikael
> On Dec 11, 2013, at 3:06 PM, John Rose <john.r.rose at
> <mailto:john.r.rose at>> wrote:
>> On Dec 11, 2013, at 2:41 PM, Dmitry Samersoff
>> <dmitry.samersoff at <mailto:dmitry.samersoff at>> wrote:
>>> we can just use %p on all platforms
>> That's clever.
>> I do think we need to use an off-the-shelf static analyzer for the
>> format strings.  There is only a tiny amount of room to maneuver
>> within the confines of the language of printf format strings.
>> There are probably several other fiddly details like this, such as
>> "how do I format intptr_t" and "how do I format jlong" and maybe "how
>> do I format an oop".  It may be possible to do some dodges like %p to
>> get around those also.  (The [-+#] modifiers look tantalizing to me in
>> this regard.)
>> — John

Dmitry Samersoff
Oracle Java development team, Saint Petersburg, Russia
* I would love to change the world, but they won't give me the sources.

More information about the hotspot-runtime-dev mailing list