On Monday, 3 August 2020 at 18:55:36 UTC, Steven Schveighoffer
wrote:
On 8/2/20 1:31 PM, Bruce Carneal wrote:
import std;
void f0(int[] a, int[] b, int[] dst) @safe {
dst[] = a[] + b[];
}
[snip of auto-vectorization example]
I was surprised that f0 ran just fine with a.length and
b.length geq dst.length. Is that a bug or a feature?
First, I think this is a bug. A regression in fact. As of 2.077
this works, and before it did not. There is nothing in the spec
that says the behavior is defined for this case.
Second, it's more than just that. This also runs currently:
void main()
{
auto a = [1, 2, 3];
auto b = [4, 5, 6];
int[] dst = new int[4]; // note the extra element
dst[] = a[] + b[];
writeln(dst[3]);
}
Prior to 2.077, this fails with array length problems.
After that it prints (at the moment): 402653184
If I up the size to 5, it fails with a range violation. I
strongly suspect some off-by-one errors, but this looks unsafe.
-Steve
Thanks Steve (and Chad). Summary: underspecified, varying
behavior across versions, buggy.
Steve, what's the best way for me to report this? Are spec
issues lumped in with the other bugzilla reports?