Comment #0 by andrej.mitrovich — 2013-09-01T13:41:25Z
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 by k.hara.pg — 2013-10-01T19:30:25Z
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