digitalmars.D.bugs - [Issue 567] New: Compiler crash with conflicting templates
- d-bugmail puremagic.com (34/34) Nov 18 2006 http://d.puremagic.com/issues/show_bug.cgi?id=567
- d-bugmail puremagic.com (4/4) Nov 30 2006 http://d.puremagic.com/issues/show_bug.cgi?id=567
- d-bugmail puremagic.com (14/14) Dec 03 2006 http://d.puremagic.com/issues/show_bug.cgi?id=567
- d-bugmail puremagic.com (16/16) Dec 11 2006 http://d.puremagic.com/issues/show_bug.cgi?id=567
- d-bugmail puremagic.com (9/9) Dec 12 2006 http://d.puremagic.com/issues/show_bug.cgi?id=567
http://d.puremagic.com/issues/show_bug.cgi?id=567 Summary: Compiler crash with conflicting templates Product: D Version: 0.174 Platform: PC URL: http://www.digitalmars.com/d/templates-revisited.html OS/Version: Windows Status: NEW Keywords: ice-on-valid-code, rejects-valid Severity: major Priority: P2 Component: DMD AssignedTo: bugzilla digitalmars.com ReportedBy: deewiant gmail.com The code below is directly from the "Specialization" section in the spec, with only empty template bodies and aliases added to make it syntactically valid. Evidently (according to the spec and the comments) this should work, so there shouldn't be a conflict: template Foo(T) {} template Foo(T:T*) {} template Foo(T, T) {} template Foo(T, U) {} template Foo(T, U:int) {} alias Foo!(long) a; // picks Foo(T) alias Foo!(long[]) b; // picks Foo(T), T is long[] alias Foo!(int*) c; // picks Foo(T*), T is int alias Foo!(long,long) d; // picks Foo(T, T) alias Foo!(long,short) e; // picks Foo(T, U) alias Foo!(long,int) f; // picks Foo(T, U:int) alias Foo!(int,int) g; // ambiguous - Foo(T, T) // or Foo(T, U:int) DMD crashes on the above after emitting the following: asdf.d(4): template asdf.Foo(T,U) conflicts with asdf.Foo(T) at asdf.d(1) --
Nov 18 2006
http://d.puremagic.com/issues/show_bug.cgi?id=567 Spec is wrong, will fix spec. Shouldn't crash. --
Nov 30 2006
http://d.puremagic.com/issues/show_bug.cgi?id=567 deewiant gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- OtherBugsDependingO| |511 nThis| | Severity|major |normal Keywords|ice-on-invalid-code | Priority|P2 |P4 Summary|Compiler crash with |Example in spec uses |conflicting templates |conflicting templates DMD no longer crashes with version 0.176, but the spec remains incorrect. --
Dec 03 2006
http://d.puremagic.com/issues/show_bug.cgi?id=567 smjg iname.com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |smjg iname.com Keywords| |diagnostic Under DMD 0.174: bz567.d(4): template bz567.Foo(T,U) conflicts with bz567.Foo(T) at bz567.d(1) bz567.d(3): Error: parameter 'T' multiply defined So it's Foo(T, U) and Foo(T, T) that conflict. But the fact that it mentions bz567.Foo(T) and line 1 looks like a bug. Commenting out every line except 3 or 4 gives the similar bz567.d(4): template bz567.Foo(T,U) conflicts with bz567.Foo(T,T) at bz567.d(3) bz567.d(3): Error: parameter 'T' multiply defined --
Dec 11 2006
http://d.puremagic.com/issues/show_bug.cgi?id=567 bugzilla digitalmars.com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED Fixed DMD 0.176 --
Dec 12 2006