RFR: 8080775: Better argument formatting for assert() and friends
David Lindholm
david.lindholm at oracle.com
Wed Sep 23 09:37:52 UTC 2015
Kim,
Thanks for looking at this!
On 2015-09-23 01:34, Kim Barrett wrote:
> On Sep 22, 2015, at 7:38 AM, David Lindholm <david.lindholm at oracle.com> wrote:
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8080775
>> Webrev: http://cr.openjdk.java.net/~david/JDK-8080775/webrev.00/
> I've run out of time to look at this today, so here's what I've got so
> far. Looks good so far, just a few minor things.
>
> [I've reviewed the core changes (debug.[ch]pp and vmError.[ch]pp),
> along with all of the rest of the utilities directory (at the end of
> the webrev file list), and from the top of the webrev list through the
> compiler directory, so maybe 1/3 of the way through.]
>
> I'll try to finish in the next day or two.
>
> ------------------------------------------------------------------------------
> src/share/vm/utilities/debug.hpp
> 43 #define BUFSZ 256
>
> Why rename RES_BUFSZ to BUFSZ? Both, but particularly the latter,
> seem like poorly chosen macro names in a widely used header. Could we
> instead have a static constant in FormatBufferBase?
Yes, fixed.
> ------------------------------------------------------------------------------
> src/share/vm/utilities/debug.hpp
> 108 // Used to format messages
>
> Lost period at end of comment.
Ok, fixed.
> ------------------------------------------------------------------------------
> make/linux/makefiles/gcc.make
>
>> Since we have about 1000 asserts with "" as detailed message, I had to
>> disable the gcc-only warning for empty format strings.
> And they aren't even all that concentrated. At least 141 files in at
> least 26 directories. Bleh! I guess there's not much choice here.
> But a bug report seems called for.
>
> ------------------------------------------------------------------------------
>
> There are a number of eliminations of err_msg_res from places where
> the associated ResourceMark is not at all obvious. Since we're
> dealing with assertions and the like, so that we're on our way to
> process termination, that probably doesn't matter in practice. Still,
> I think that deserves an "Excellent!" for improved code readability.
>
> ------------------------------------------------------------------------------
> src/cpu/ppc/vm/sharedRuntime_ppc.cpp
> 478 ResourceMark rm;
> 479 // Note, MaxVectorSize == 8 on PPC64.
> 480 assert(size <= 8, "%d bytes vectors are not supported", size);
> 481 return size > 8;
>
> ResourceMark no longer needed here. [This is the only lingering
> ResourceMark I've spotted so far.]
Ok, removed.
> Unrelated and not your problem, but that assert followed by the
> comparison looks really odd! There's another of these odd assert then
> compare sequences (without a nearby ResourceMark) here:
>
> src/cpu/sparc/vm/sharedRuntime_sparc.cpp
> 319 assert(size <= 8, "%d bytes vectors are not supported", size);
> 320 return size > 8;
>
> ------------------------------------------------------------------------------
> src/os/solaris/vm/threadCritical_solaris.cpp
> 71 fatal("ThreadCritical::~ThreadCritical: mutex_unlock failed "
> 72 "(%s)", strerror(errno));
>
> Remove line break from the format string.
Fixed.
> ------------------------------------------------------------------------------
> src/os/windows/vm/vmError_windows.cpp
> 74 VMError::report_and_die(NULL, exception_code, NULL,
> 75 exceptionInfo->ExceptionRecord, exceptionInfo->ContextRecord);
>
> Fix indentation.
Fixed.
> ------------------------------------------------------------------------------
> src/share/vm/code/nmethod.cpp
> 1712 assert(ic->is_clean(), "nmethod " PTR_FORMAT "not clean %s", from, from->method()->name_and_sig_as_C_string());
> ...
> 2543 fatal("nmethod at " INTPTR_FORMAT " not in zone", this);
> ...
> 2551 fatal("findNMethod did not find this nmethod (" INTPTR_FORMAT ")", this);
> ...
> 2556 tty->print_cr("\t\tin nmethod at " INTPTR_FORMAT " (pcs)", this);
>
> Pre-existing: Don't we need the p2i() dance for the values associated
> with the [INT]PTR_FORMAT directives? The last isn't touched by your
> changes, but happens to be nearby.
You are correct, but this file (and many others) silences GCC warnings
for format strings with PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC at the top
of the file. This should absolutely be fixed in all these files, but
fixing all these is a major task, and nothing I want to do in this change.
> ------------------------------------------------------------------------------
> src/share/vm/code/vtableStubs.cpp
> 225 fatal("bad compiled vtable dispatch: receiver " INTPTR_FORMAT ", "
> 226 "index %d (vtable length %d)",
> 227 (address)receiver, index, vt->length());
>
> Pre-existing: Another p2i() dance; using it would eliminate the need
> for the cast.
Same comment as above. There are more format string problems in this
file silenced by the pragma - these should be fixed in another change.
> Also pre-existing nearby:
>
> 230 #endif // Product
>
> "Product" should be all-caps.
>
Ok, fixed.
I think I'll wait for the rest of your comments before sending out a new
webrev.
Thanks,
David
More information about the hotspot-dev
mailing list