August 04, 2020 [Issue 21109] New: Possibly wrong codegen when using enum arrays | ||||
---|---|---|---|---|
| ||||
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@puremagic.com Reporter: andrej.mitrovich@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. -- |
Copyright © 1999-2021 by the D Language Foundation