www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 241] New: Template function ICE

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

           Summary: Template function ICE
           Product: D
           Version: 0.162
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla digitalmars.com
        ReportedBy: oskar.linde gmail.com


T func(T, T c = 1)(T x) { return x * c; }
void main() { func(1.0); }

Generates (with DMD 0.162 linux):
dmd: template.c:622: void TemplateDeclaration::declareParameter(Scope*,
TemplateParameter*, Object*): Assertion `0' failed.


-- 
Jul 06 2006
next sibling parent reply Oskar Linde <oskar.lindeREM OVEgmail.com> writes:
d-bugmail puremagic.com wrote:
 http://d.puremagic.com/issues/show_bug.cgi?id=241
 
            Summary: Template function ICE
            Product: D
            Version: 0.162
           Platform: PC
         OS/Version: Linux
             Status: NEW
           Severity: normal
           Priority: P2
          Component: DMD
         AssignedTo: bugzilla digitalmars.com
         ReportedBy: oskar.linde gmail.com
 
 
 T func(T, T c = 1)(T x) { return x * c; }
 void main() { func(1.0); }
 
 Generates (with DMD 0.162 linux):
 dmd: template.c:622: void TemplateDeclaration::declareParameter(Scope*,
 TemplateParameter*, Object*): Assertion `0' failed.
 
 

Upon closer inspection, it appears that using a template TypeParameter type as a value type doesn't work. Both: func!(double)(1.0); and func!(double,1)(1.0); give: "template instance [...] does not match any template declaration" I would expect template(T,T c) {...} to work for any T such that T is a valid value type, and in other cases generate an error message on instantiation saying something like "T is not a valid template value type". If, on the other hand, the use of a template type as value parameter type is not meant to be allowed, an error message on template declaration would be helpful. /Oskar
Jul 06 2006
parent Oskar Linde <oskar.lindeREM OVEgmail.com> writes:
Oskar Linde wrote:
 d-bugmail puremagic.com wrote:
 http://d.puremagic.com/issues/show_bug.cgi?id=241

            Summary: Template function ICE
            Product: D
            Version: 0.162
           Platform: PC
         OS/Version: Linux
             Status: NEW
           Severity: normal
           Priority: P2
          Component: DMD
         AssignedTo: bugzilla digitalmars.com
         ReportedBy: oskar.linde gmail.com


 T func(T, T c = 1)(T x) { return x * c; }
 void main() { func(1.0); }

 Generates (with DMD 0.162 linux):
 dmd: template.c:622: void TemplateDeclaration::declareParameter(Scope*,
 TemplateParameter*, Object*): Assertion `0' failed.

Upon closer inspection, it appears that using a template TypeParameter type as a value type doesn't work. Both: func!(double)(1.0); and func!(double,1)(1.0); give: "template instance [...] does not match any template declaration" I would expect template(T,T c) {...} to work for any T such that T is a valid value type, and in other cases generate an error message on instantiation saying something like "T is not a valid template value type". If, on the other hand, the use of a template type as value parameter type is not meant to be allowed, an error message on template declaration would be helpful. /Oskar

Further attempts resulted in issue 242 and found that the following does work: template func(T) { template f(T c = 1)(T x) { return c*x; } } void main() { func!(double).f(5.0); // OK func!(double).f!(2.0)(5.0); // OK } /Oskar
Jul 06 2006
prev sibling next sibling parent Thomas Kuehne <thomas-dloop kuehne.cn> writes:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

d-bugmail puremagic.com schrieb am 2006-07-06:
 http://d.puremagic.com/issues/show_bug.cgi?id=241

 T func(T, T c = 1)(T x) { return x * c; }
 void main() { func(1.0); }

 Generates (with DMD 0.162 linux):
 dmd: template.c:622: void TemplateDeclaration::declareParameter(Scope*,
 TemplateParameter*, Object*): Assertion `0' failed.

Added to DStress as http://dstress.kuehne.cn/run/b/bug_template_622_A.d http://dstress.kuehne.cn/run/b/bug_template_622_B.d http://dstress.kuehne.cn/run/b/bug_template_622_C.d Thomas -----BEGIN PGP SIGNATURE----- iD8DBQFErkkPLK5blCcjpWoRAjlyAJ0YlSkOiUS7B/4or7smStmAfahBaQCeIVFH d0U7OoDuoMmndj5HyGWyGx8= =mScX -----END PGP SIGNATURE-----
Jul 07 2006
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=241


jpelcis gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED




------- Comment #1 from jpelcis gmail.com  2006-07-18 16:39 -------
Fixed DMD 0.163.


-- 
Jul 18 2006