www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 8517] New: ICE: Internal error: toir.c 178

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8517

           Summary: ICE: Internal error: toir.c 178
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Keywords: ice
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: michal.minich gmail.com



PDT ---
dmd 2.060

void x1 () { y!(a => a)(); }
void x2 () { y!(a => a)(); }
void y (alias f) () { y!(a => a)(); }

Comment out either x1 or x2 line and error disappears.

This bug might be a duplicate of
http://d.puremagic.com/issues/show_bug.cgi?id=8460
http://d.puremagic.com/issues/show_bug.cgi?id=8436
http://d.puremagic.com/issues/show_bug.cgi?id=7917
http://d.puremagic.com/issues/show_bug.cgi?id=6426
and maybe others

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Aug 07 2012
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8517


Don <clugdbug yahoo.com.au> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Version|D2                          |D1 & D2
            Summary|ICE(toir.c 178)             |ICE(toir.c 178) or stack
                   |                            |overflow with recursive
                   |                            |alias template



Actually y!() is the problem, the other bit is just instantiating y.
Also stack overflows on D1 and 2.057.
The reason is, that the FQN of the delegate includes the FQN of the template.
You can see this if you use .mangleof (uncomment the pragma).
Simplified test case:

void y (alias f) () { 
    int delegate(int) qq;
//   pragma(msg, qq.mangleof);
    y!(qq)();
}

void x1() { int q;    y!(q)(); }

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Nov 14 2012
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8517


Walter Bright <bugzilla digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |bugzilla digitalmars.com
         Resolution|                            |WORKSFORME



18:03:52 PDT ---
With 2.064 head:

Michal's example:

test.d(1): Error: template instance test.x1.y!((a) => a) recursive expansion

Don's example:

test.d(7): Error: template instance test.x1.y!(q) recursive expansion

Works on D1 1.077 too.

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