Bug 7106 – DMD Segmentation faults!

Status
RESOLVED
Resolution
WORKSFORME
Severity
critical
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
x86_64
OS
Linux
Creation time
2011-12-14T01:25:00Z
Last change time
2012-01-02T00:50:51Z
Assigned to
nobody
Creator
iteronvexor

Comments

Comment #0 by iteronvexor — 2011-12-14T01:25:54Z
struct Ma(T){ pure T alpha() const{ return 1.1; } Ma opBinary(string op)(in Ma m) const if(op == "-"){ return Ma(m); } } struct Pa(T){ Ma!T _m; alias _m this; } pure T foo(alias P, T)(in P!T p){ return (p - p).alpha(); } void main(){ Pa!double p1; foo(p1); } This is as far as I could narrow it down. Something starts to go wrong when 'opBinary' is called. Also, removing pure from 'foo' doesn't cause the seg fault. DMD 2.56, Linux-64bit
Comment #1 by k.hara.pg — 2012-01-02T00:50:51Z
In 2.057 and later, following errors are raised: test.d(17): Error: incompatible types for ((p) - (p)): 'const(Pa!(double))' and 'const(Pa!(double))' test.d(22): Error: template instance test.foo!(Pa,double) error instantiating Because, in Ma!T.opBinary(), return Ma(m); is not valid expression (it does not ignite copy construction). After fixing it to return Ma(); , the sample code compiles fine.