D issues are now tracked on GitHub. This Bugzilla instance remains as a read-only archive.
Issue 10942 - ICE on 1087+ initializers (Internal error: backend\cgcv.c 203)
Summary: ICE on 1087+ initializers (Internal error: backend\cgcv.c 203)
Status: RESOLVED FIXED
Alias: None
Product: D
Classification: Unclassified
Component: dmd (show other issues)
Version: D2
Hardware: All Windows
: P2 normal
Assignee: No Owner
URL:
Keywords: ice
Depends on:
Blocks:
 
Reported: 2013-09-01 13:41 UTC by Andrej Mitrovic
Modified: 2013-10-08 22:02 UTC (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this issue.
Description Andrej Mitrovic 2013-09-01 13:41:25 UTC
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.
Comment 1 Kenji Hara 2013-10-01 19:30:25 UTC
To reproduce errors, -g switch is necessary.

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

$ dmd -g -run test
DMD v2.064 DEBUG
OPTLINK (R) for Win32  Release 8.00.12
Copyright (C) Digital Mars 1989-2010  All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
test.obj(test)
 Warning 161: Unknown CV version, ignored

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

$ dmd -g -run test
DMD v2.064 DEBUG
Internal error: backend\cgcv.c 203
Comment 3 github-bugzilla 2013-10-08 21:31:55 UTC
Commits pushed to master at https://github.com/D-Programming-Language/dmd

https://github.com/D-Programming-Language/dmd/commit/3f1ae3ce0943678840e6066692b2124d86ba91a3
fix Issue 10942 - ICE on 1087+ initializers (Internal error: backend\cgcv.c 203)

https://github.com/D-Programming-Language/dmd/commit/81249a39dc8953537455ed7d7e6109b721e09c78
Merge pull request #2614 from WalterBright/fix10942

fix Issue 10942 - ICE on 1087+ initializers (Internal error: backend\cgc...