Bug 7763 – No template instantiation backtrace printed trying to use writefln on a const or immutable object reference

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
x86
OS
Windows
Creation time
2012-03-24T17:52:00Z
Last change time
2012-12-26T16:28:09Z
Keywords
diagnostic
Assigned to
nobody
Creator
smjg

Comments

Comment #0 by smjg — 2012-03-24T17:52:11Z
DMD 2.058, Win32 ---------- import std.stdio; class Set(Element) { void show(Element e) { writefln("%s", e); } } void main() { Set!(const(Object)) set2; } ---------- C:\Users\Stewart\Documents\Programming\D\Tests\bugs>dmd hashset1.d d:\dmd2\windows\bin\..\..\src\phobos\std\format.d(1858): Error: template instance formatObject!(LockingTextWriter,const(Object),char) formatObject!(LockingTextWriter,const(Object),char) does not match template declaration formatObject(Writer,T,Char) if (hasToString!(T,Char)) ---------- main instantiates Set Set instantiates writefln writefln instantiates File.writefln File.writefln instantiates formatGeneric formatGeneric instantiates formatValue formatValue tries to instantiates formatObject but fails Despite this chain of template instantiations, no backtrace is printed. Consequently, it took me ages to find what in my code was triggering it in order to produce this reduced testcase. Fixing issue 1824 will invalidate this testcase, but won't fix the underyling compiler bug, which could potentially bite in other ways.
Comment #1 by andrej.mitrovich — 2012-12-26T16:28:09Z
Seems fixed in 2.060: -------- D:\DMD\dmd2\windows\bin\..\..\src\phobos\std\format.d(2158): Error: template instance formatObject!(LockingTextWriter,const(Object),char) formatObject!(LockingTextWriter,const(Object),char) does not match template declaration formatObject(Writer,T,Char) if (hasToString!(T,Char)) D:\DMD\dmd2\windows\bin\..\..\src\phobos\std\format.d(2158): Error: function expected before (), not formatObject!(LockingTextWriter,const(Object),char) of type void D:\DMD\dmd2\windows\bin\..\..\src\phobos\std\format.d(2572): Error: template instance std.format.formatValue!(LockingTextWriter,const(Object),char) error instantiating D:\DMD\dmd2\windows\bin\..\..\src\phobos\std\format.d(398): instantiated from here: formatGeneric!(LockingTextWriter,const(Object),char) D:\DMD\dmd2\windows\bin\..\..\src\phobos\std\stdio.d(728): instantiated from here: formattedWrite!(LockingTextWriter,char,const(Object)) D:\DMD\dmd2\windows\bin\..\..\src\phobos\std\stdio.d(1711): instantiated from here: writefln!(string,const(Object)) test.d(5): instantiated from here: writefln!(string,const(Object)) test.d(10): instantiated from here: Set!(const(Object)) D:\DMD\dmd2\windows\bin\..\..\src\phobos\std\format.d(398): Error: template instance std.format.formatGeneric!(LockingTextWriter,const(Object),char) error instantiating D:\DMD\dmd2\windows\bin\..\..\src\phobos\std\stdio.d(728): instantiated from here: formattedWrite!(LockingTextWriter,char,const(Object)) D:\DMD\dmd2\windows\bin\..\..\src\phobos\std\stdio.d(1711): instantiated from here: writefln!(string,const(Object)) test.d(5): instantiated from here: writefln!(string,const(Object)) test.d(10): instantiated from here: Set!(const(Object)) D:\DMD\dmd2\windows\bin\..\..\src\phobos\std\stdio.d(728): Error: template instance std.format.formattedWrite!(LockingTextWriter,char,const(Object)) error instantiating D:\DMD\dmd2\windows\bin\..\..\src\phobos\std\stdio.d(1711): instantiated from here: writefln!(string,const(Object)) test.d(5): instantiated from here: writefln!(string,const(Object)) test.d(10): instantiated from here: Set!(const(Object)) D:\DMD\dmd2\windows\bin\..\..\src\phobos\std\stdio.d(1711): Error: template instance std.stdio.File.writefln!(string,const(Object)) error instantiating test.d(5): instantiated from here: writefln!(string,const(Object)) test.d(10): instantiated from here: Set!(const(Object)) test.d(5): Error: template instance std.stdio.writefln!(string,const(Object)) error instantiating test.d(10): instantiated from here: Set!(const(Object)) test.d(10): Error: template instance test.Set!(const(Object)) error instantiating --------