Howto build a repo case for a ICE?

Benjamin Thaut code at benjamin-thaut.de
Sun Feb 19 07:41:56 PST 2012


Am 19.02.2012 15:41, schrieb Don:
> On 19.02.2012 14:24, Benjamin Thaut wrote:
>> The last dmd version I could use to actually build my project was dmd
>> 2.056. Now I want to help finding those bugs that keep me from compiling
>> and I'm wondering how I can build repro cases for the ICEs I encounter.
>> I tried compiling with -v but that does not really give much information
>> about where the crash actually happens. So I wonder what can actually be
>> done to find the part of the code or even only the module it crashes in?
>>
>> The current ICE I'm encountering is:
>> Assertion failure: 't1->ty == t2->ty' on line 2082 in file 'cast.c'
>
> If you don't mind building the compiler,
> add this line just before 2082:
> if (t1->ty != t2->ty) e1->error("ICE");
>
> and then build the compiler.
>
> Sorry for the newbie-hostile comment. But it would save you a lot of time.

Thank you very much that helped a lot. I was able to reduce it to the 
following code:

class Foo
{

   @property EntityId entityId()
   {
     return EntityId(3);
   }

}

struct EntityId
{
   uint id;

   alias id this;

   this(uint id)
   {
     this.id = id;
   }
}

int main(string[] argv)
{
   Foo foo = null;
   auto id = (foo) ? foo.entityId : -1;

   return 0;
}


More information about the Digitalmars-d mailing list