[Issue 21884] [betterC] can't compare arrays with -betterC

d-bugmail at puremagic.com d-bugmail at puremagic.com
Fri Apr 30 20:50:13 UTC 2021


https://issues.dlang.org/show_bug.cgi?id=21884

--- Comment #2 from Blatnik <blatblatnik at gmail.com> ---
It also seems like the fixed size array comparisons (type[N] == type[N]) are
implemented internally in DMD. However slice comparisons (type[N][] ==
type[N][]) are implemented in the runtime.

The compiler converts

float[2][2] a;
bool b = a[] == b[];

into:

float[2][2] a;
bool b = core.internal.array.equality.__equals!(float[2], float[2])(a[], a[]);

And this __equals template is something we can change very easily without
digging through the compiler.

The offending lines in this function effectively try to do:

foreach(i; 0 .. a.length)
  if (a[i] != a[i])
    return false;
return true;

But a[i] is a float[2], which can't be compared in -betterC..

If we had a special case for arrays that did this instead

foreach(i; 0 .. a.length)
  if (a[i][] != a[i][])
    return false;
return true;

Then at least type[N][] == type[N][] would work, until a better fix was found
for type[N] == type[N].

--


More information about the Digitalmars-d-bugs mailing list