digitalmars.D.bugs - [Issue 14210] New: invalid merging of template instances
- via Digitalmars-d-bugs (49/49) Feb 20 2015 https://issues.dlang.org/show_bug.cgi?id=14210
https://issues.dlang.org/show_bug.cgi?id=14210 Issue ID: 14210 Summary: invalid merging of template instances Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: major Priority: P1 Component: DMD Assignee: nobody puremagic.com Reporter: ketmar ketmar.no-ip.org compiler erroneously merges templates with different delegate types. let's run the following code: === test.d === void test(DT) (string name, DT dg) { import std.stdio; writeln(":: ", name); writeln(typeof(dg).stringof); } void main () { test("001", (int a=40) => a+2); test("000", (int a) => a+0); } === output: :: 001 int function(int a = 40) pure nothrow nogc safe :: 000 int function(int a = 40) pure nothrow nogc safe now let's change `main` to: === void main () { test("000", (int a) => a+0); test("001", (int a=40) => a+2); } === output: :: 000 int function(int a) pure nothrow nogc safe :: 001 int function(int a) pure nothrow nogc safe both results are obviously wrong, 'cause compiler should not merge two instantiations. yet compiler checks for merge possibility by checking mangled names, and both types mangles to the same string. this breaks automatic CTFE wrapping of functions for some scripting engines, and possibly many more cases. --
Feb 20 2015