[Issue 21109] New: Possibly wrong codegen when using enum arrays

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue Aug 4 04:15:01 UTC 2020


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

          Issue ID: 21109
           Summary: Possibly wrong codegen when using enum arrays
           Product: D
           Version: D2
          Hardware: All
                OS: Mac OS X
            Status: NEW
          Severity: critical
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: andrej.mitrovich at gmail.com

-----
import std.algorithm;
import std.stdio;

struct S
{
    int i;
    int[] arr;
}

void main ()
{
    enum q1 = [
        S(2, [0, 0]),
    ];

    enum q2 = [
        S(2, [0, 0]),
    ];

    enum q3 = [
        S(2, [1, 1]),
    ];

    foreach (idx; 0 .. 10)  // 10 iterations
    {
        const unique_count = [q1, q2, q3].sort.uniq.count;
        writefln("Uniques: %s", unique_count);
    }
}
-----

This produces:

```
$ dmd -run test.d
> Uniques: 2
Uniques: 2
Uniques: 2
Uniques: 2
Uniques: 2
Uniques: 3
Uniques: 2
Uniques: 2
Uniques: 2
Uniques: 2
```

Notice how in one run the number of uniques was 3!

If I change `enum` to `auto` the bug goes away.

--


More information about the Digitalmars-d-bugs mailing list