A new and exciting way in which DMD fails to build for me

Meta via Digitalmars-d digitalmars-d at puremagic.com
Tue Jan 20 12:22:59 PST 2015


On Tuesday, 20 January 2015 at 20:19:19 UTC, ketmar via 
Digitalmars-d wrote:
> On Tue, 20 Jan 2015 20:14:42 +0000
> Meta via Digitalmars-d <digitalmars-d at puremagic.com> wrote:
>
>> I'm trying to build to build DMD and I've encountered a very 
>> strange problem. When I run `make -fwin32.mak`, there are 
>> errors when it tries to compile id.c:
>> 
>> id.c(298) : Error: 'idPool' is not a member of 'Lexer'
>> ...etc.
>> 
>> Sure enough, when I look in id.c, there are a bunch of these:
>> 
>> stringof = Lexer::idPool("stringof");
>> 
>> But Lexer does not have an `idPool` member. I then looked in 
>> idgen.c for the offending line that must be wrongly inserting 
>> "Lexer" instead of "Identifier", but everything looks okay. 
>> Specifically this block:
>> 
>> for (i = 0; i < sizeof(msgtable) / sizeof(msgtable[0]); i++)
>> {   const char *id = msgtable[i].ident;
>>      const char *p = msgtable[i].name;
>> 
>>      if (!p)
>>          p = id;
>>      fprintf(fp,"    %s = Identifier::idPool(\"%s\");\n", id, 
>> p);
>> }
>> 
>> Looks like it should print the correct line to id.c. I can 
>> confirm this by running idgen.exe manually; it produces the 
>> correct file.
>> 
>> However, when I try deleting all the relevant files to make 
>> sure there is nothing old hanging around, then run make again, 
>> the same incorrect id.c is generated. This seems bizarre to 
>> me; what exactly is going on here?
> what is that "id.c" at all? i can't find such file in dmd git 
> repo...

It's generated by idgen.exe, which is compiled from idgen.c. I'm 
not sure why, exactly.


More information about the Digitalmars-d mailing list