Review Request: 7193406 - Clean-up JDK Build Warnings in java.util, java.io
Ulf
Ulf.Zibis at CoSoCo.de
Sun Sep 2 02:11:56 UTC 2012
Am 01.09.2012 03:15, schrieb Stuart Marks:
> On 8/31/12 3:19 AM, Ulf Zibis wrote:
>> Stuart, much thanks for your detailed explanation. The as is situation has not
>> been in question from my side, but anyway it seems, that it had catalysed a new
>> solution, despite that the additional break; could affect JIT optimization of
>> the enclosing loop. So there should be an explaining comment, even if Hotspot
>> (but maybe others) is not affected in current configuration.
>
> If we were to add a comment, I'm not sure what it would explain. The fall-through approach is
> unusual and is what deserves a comment. Changing each case to have a break at the end is
> conventional and straightforward and doesn't need a comment.
Well, to me it's a kind of taste. The purpose of the given code is to filter all valid delimiters
from an invalid tail-match, which are in fact 2 cases, to separate by *one* break.
So the comment could be:
break; // could be dropped to help JIT-optimization, but favours java compiler warning
or:
break; // prevents from java compiler warning, but could risk to miss JIT-optimization
threshold
Anyway, the code better should be:
527 boolean seencomma = false;
528 for (i -= matchlen; i >= 0 && !seencomma; i--) {
529 switch(a[i]) {
530 case ',':
531 seencomma = true;
532 break;
533 case ' ': case '\r': case '\n': case '\f': case '\t':
534 break;
535 default:
536 throw new IllegalArgumentException(
537 "invalid permission: " + actions);
538 }
539 }
540 // now i points at the location of the comma minus one (or is -1).
541 }
>>> On 8/30/12 7:14 AM, Ulf Zibis wrote:
>>>> I can see that it is reasonable/possible to bind a
>>>> @SuppressWarnings("unchecked") to a declaration which contains the unchecked
>>>> assignment, but which declaration should contain a fallthrough case?
>>
>> ... You may call me pedantic, but the above question is still open to me.
>
> I thought I had answered this. But if you think the question is still open, then perhaps I didn't
> understand the question.
I wanted to ask, how a switch...case statement, where @SuppressWarnings("fallthrough") could apply,
can be enclosed by a declaration, other than a method declaration. Can you give an example?
>> Maybe one could optimize javac to recognize such situation and hold back the
>> warning in that case, as the current code looks more intuitive and has
>> potential advantage for JIT optimization.
>
> This seems like a very, very narrow case for the javac compiler to analyze and to decide whether a
> warning is truly warranted.
See the following example...
switch (test) {
case "A" : doSomething();
case "B" :
case "C" : break;
default : doOther();
}
In pedantic view, case "B" also could be seen as a fallthrough case. So it seems, that javac already
suppresses warnings if obviously superfluous.
> It seems unlikely to me that the fall-through approach was a performance optimization (but if JIT
> experts want to chime in, please feel free). It seems likely this was left over from an earlier
> version that wanted to share code between the comma and whitespace cases. When this shared code
> was removed the fall through was mistakenly left in place. The files' histories don't shed any
> light on this though.
Well, we had the discussion about inserting a local variable declaration to allow a smaller scope
for @SuppressWarnings("unchecked"). I believe, that an additional break statement adds additional
bytecode too.
> Good point. We had talked about this before (back in December 2011) but I never filed a bug for
> it. I've just filed 7195670. (Not sure when it'll appear on bugs.sun.com though.) Thanks for
> prompting me to do this.
Thanks.
-Ulf
More information about the core-libs-dev
mailing list