http://d.puremagic.com/issues/show_bug.cgi?id=4366
Summary: ICE(mtype.c) constrained template pure function with array/pointer parameter Product: D Version: 2.041 Platform: All OS/Version: All Status: NEW Keywords: ice-on-valid-code Severity: normal Priority: P2 Component: DMD AssignedTo: nob...@puremagic.com ReportedBy: rsi...@gmail.com --- Comment #0 from Shin Fujishiro <rsi...@gmail.com> 2010-06-22 04:56:04 PDT --- DMD aborts with assertion failure in Type::check() if a constrained templated pure function has a named parameter of array or pointer type. Compiling the following causes dmd to abort (2.045 and r556): -------------------- void foo(T)(T a, T[] b) pure if (1) { } alias foo!(int) K; -------------------- % dmd -o- -c test Assertion failed: (tn->mod & MODimmutable || tn->mod & MODconst), function check, file mtype.c, line 871. -------------------- GDB backtrace: ... #3 0x283a2ef6 in __assert () from /lib/libc.so.7 #4 0x080fa0fe in Type::check () #5 0x080fa23f in Type::fixTo () #6 0x081001b7 in Type::constOf () #7 0x08136150 in TemplateDeclaration::makeParamNamesVisibleInConstraint () #8 0x08136415 in TemplateDeclaration::matchWithInstance () #9 0x08138cac in TemplateInstance::findBestMatch () #10 0x08139c67 in TemplateInstance::semantic () #11 0x0813a190 in TemplateInstance::semantic () #12 0x081005d3 in TypeInstance::resolve () ... The assertion does not fail in the following cases: -------------------- void bar(T)(T a, T[] b) pure { } // no constraint void dee(T)(T a, T[] ) pure if (1) { } // array parameter is unnamed void mew(T)(T a, T[] b) if (1) { } // impure alias bar!(int) L; // okay alias dee!(int) M; // okay alias mew!(int) N; // okay -------------------- -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------