[Issue 10942] New: ICE on 1087+ initializers (Internal error: backend\cgcv.c 203)

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sun Sep 1 13:41:26 PDT 2013


http://d.puremagic.com/issues/show_bug.cgi?id=10942

           Summary: ICE on 1087+ initializers (Internal error:
                    backend\cgcv.c 203)
           Product: D
           Version: D2
          Platform: All
        OS/Version: Windows
            Status: NEW
          Keywords: ice
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody at puremagic.com
        ReportedBy: andrej.mitrovich at gmail.com


--- Comment #0 from Andrej Mitrovic <andrej.mitrovich at gmail.com> 2013-09-01 13:41:25 PDT ---
Testing in 2.064 git-head:

-----
import std.string;

string getEnum(size_t count)
{
    string en;
    en ~= "enum KeyCode\n {    \n";

    foreach (i; 0 .. count)
    {
        en ~= format("    memb_%s = %s,\n", i+1, i+1);
    }

    en ~= "} ";
    return en;
}

// Linker warning: Warning 161: Unknown CV version, ignored
// mixin(getEnum(1024));

// ICE  
// mixin(getEnum(1087));

void main() { }
-----

Uncomment the first mixin to start getting linker warnings. Uncomment the
second one instead and an ICE is emitted:

Internal error: backend\cgcv.c 203

I ran into this while translating keycodes from another GUI library. It has
just over 1100 keycodes, and I wanted to put them all in one KeyCode enum.

I can also recreate this with structs and classes, so it's not specific to
enums (e.g. a struct with 1087 'static' fields). The workaround is to make the
keycodes all manifest constants, e.g.:

-----
enum memb_1 = 1;
enum memb_2 = 2;
enum memb_3 = 3;
...
-----

However this does lose me the ability to give the keycodes a single type to
group them under.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list