[Issue 14996] New: only(EnumMembers!T) eats all my memory when T : string

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Tue Sep 1 06:12:13 PDT 2015


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

          Issue ID: 14996
           Summary: only(EnumMembers!T) eats all my memory when T : string
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: ryan at rcorre.net

Created attachment 1546
  --> https://issues.dlang.org/attachment.cgi?id=1546&action=edit
compiling with dmd should consume excessive memory

I am trying to return a range of all members in a named enum using
only(EnumMembers!MyEnum).

This works fine, unless MyEnum uses string as a backing value and has more than
one element, in which case it eats all 8GB of my memory and crashes DMD.

Test file is attached and pasted below:

---
import std.range  : only;
import std.traits : EnumMembers;

enum Bad : string {
  confirm = "confirm",
  cancel  = "cancel" ,
  rotateL = "rotateL",
  rotateR = "rotateR",
  turbo   = "turbo"  ,
  menu    = "menu"   ,
}

enum Fine {
  confirm,
  cancel ,
  rotatel,
  rotater,
  turbo  ,
  menu   ,
}

enum AlsoFine : string {
  confirm = "confirm",
}

auto allButtons() {
  //return only(EnumMembers!Fine);     // compiles just fine
  //return only(EnumMembers!AlsoFine); // compiles just fine
  return only(EnumMembers!Bad);        // eats all my memory (8GB)
}

void main() { }
---

--


More information about the Digitalmars-d-bugs mailing list