On Fri, 4 Dec 2020 19:13:45 GMT, Roger Riggs <rri...@openjdk.org> wrote:

>> The preconditions aren't checked, because this is an internal method, and 
>> the code size is minimized in order to help inlining. That's also why 
>> `hugeLength` is a separate method. (I guess I could add comments to this 
>> effect.) With this in mind it's hard to reason about robustness. If 
>> prefLength is zero, this can only be because some precondition was violated 
>> (e.g., oldLength is negative). If this were to occur there doesn't seem to 
>> be any advantage choosing one undefined behavior over another.
>
> Is there a reason the code would not naturally work when either min or 
> preferred is zero?
> Why are their preconditions?  What do they allow?
> These methods are used in enough places that a slip in any of the clients 
> would be trouble and hard to track down.

The origin of this code is in collections like ArrayList that have an existing 
array (hence oldLength >= 0) and that need it to grow (hence minGrowth > 0). 
Those were the prevailing assumptions in the code from which this was derived, 
so they turn into preconditions here. I don't see the need to try to make this 
handle any more cases than it currently does. Doing so complicates the analysis 
and possibly the code as well. Certainly a bug in a caller might be difficult 
to track down, but I don't want to add argument checking or to provide 
"reasonable" behavior in the face of unreasonable inputs. This is an internal 
method; bugs in callers should be fixed.

-------------

PR: https://git.openjdk.java.net/jdk/pull/1617

Reply via email to