Compiler printf format checking (was: Re: RFR JDK-8026300: VM warning: increase O_BUFLEN in ostream.hpp -- output truncated occurs with fastdebug VM when printing flags)
Mikael Vidstedt
mikael.vidstedt at oracle.com
Tue Dec 3 15:50:21 PST 2013
FWIW - I played around with doing exactly that a year ago or so. The
biggest (and only) problem I found is that we have a large number of
places where we want to print pointers using various formats (sometimes
with "0x" prefix, sometimes using zero padding, etc.). The only valid
printf format specifier for pointers is '%p', and the exact output of
'%p' is not specified, much less as flexible as we need it to be.
What that that effectively means is that we'd have to cast any and all
pointer arguments to printf-style functions, something like:
tty->print("The pointer: " PTR_FORMAT, ptr);
would have to become:
tty->print("The pointer: " PTR_FORMAT, (uintptr_t)ptr);
This will obviously pollute the code, but would enable using
__attribute__((format...)) & friends. If I remember correctly there are
~1000 or so places where a cast would have to be added. It was unclear
to me at the time if that was something we were willing to do.
(I also investigated if there are ways to (mis-)use templates to work
around the cast issue, but as far as I can tell that is not possible)
Cheers,
Mikael
On 2013-12-03 11:13, Staffan Larsen wrote:
> Looks good!
>
> (we should use "__attribute__ format" to let the compiler catch these problems)
>
> Thanks,
> /Staffan
>
> On 3 dec 2013, at 19:31, Zhengyu Gu <zhengyu.gu at oracle.com> wrote:
>
>> This is a simple fix in context of nightly failures cleaning up. The fix will go into JDK 9 once the repository is open.
>>
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8026300
>> Webrev: http://cr.openjdk.java.net/~zgu/8026300/webrev.00/
>>
>> Test:
>> Tested on reported platform, which is Linux 32 bit.
>>
>> Thanks,
>>
>> -Zhengyu
More information about the hotspot-runtime-dev
mailing list