This happens because the operation to compute the length is
```
unsigned((start - stop) / -step)
```
but `long.max - long.min` overflows the long and results in -1.
The reason it works for a step of 1 is that -1 is cast to a ulong, which results in the maximum value of ulong (18446744073709551615).
Maybe this could be fixed by casting to the unsigned type before dividing by the step.
Comment #2 by schveiguy — 2017-05-14T23:24:41Z
This might be fixed with the PR written for issue 16246 as the way the end condition is checked has changed (and length calc). Once it's merged, please re-check.