D issues are now tracked on GitHub. This Bugzilla instance remains as a read-only archive.
Issue 7763 - No template instantiation backtrace printed trying to use writefln on a const or immutable object reference
Summary: No template instantiation backtrace printed trying to use writefln on a const...
Status: RESOLVED FIXED
Alias: None
Product: D
Classification: Unclassified
Component: dmd (show other issues)
Version: D2
Hardware: x86 Windows
: P2 normal
Assignee: No Owner
URL:
Keywords: diagnostic
Depends on:
Blocks:
 
Reported: 2012-03-24 17:52 UTC by Stewart Gordon
Modified: 2012-12-26 16:28 UTC (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this issue.
Description Stewart Gordon 2012-03-24 17:52:11 UTC
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 Andrej Mitrovic 2012-12-26 16:28:09 UTC
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
--------