Bug 19117 – Alias this incorrectly invoked in conversion to ref

Status
NEW
Severity
normal
Priority
P3
Component
dmd
Product
D
Version
D2
Platform
x86_64
OS
Linux
Creation time
2018-07-26T11:20:08Z
Last change time
2024-12-13T18:59:52Z
Assigned to
No Owner
Creator
RazvanN
Moved to GitHub: dmd#19466 →

Comments

Comment #0 by razvan.nitu1305 — 2018-07-26T11:20:08Z
struct A { immutable(A) fun() { return immutable A(); } ref A fun2(ref A a) { return this; } alias fun this; // line 6 } void main() { A a, b; b.fun2(a); } aliasthisbug.d(12): Error: function aliasthisbug.A.fun2(ref A a) is not callable using argument types (A) aliasthisbug.d(12): cannot pass argument a of type A to parameter ref A a Comment line 6 an the error disappears.
Comment #1 by razvan.nitu1305 — 2018-07-26T11:22:28Z
(In reply to RazvanN from comment #0) > struct A > { > immutable(A) fun() { return immutable A(); } > ref A fun2(ref A a) { return this; } > > > alias fun this; // line 6 > } > > void main() > { > A a, b; > b.fun2(a); > } > > aliasthisbug.d(12): Error: function aliasthisbug.A.fun2(ref A a) is not > callable using argument types (A) > aliasthisbug.d(12): cannot pass argument a of type A to parameter ref > A a > > Comment line 6 an the error disappears. Also, changing the signature of fun2 to : ref A fun2(A a) makes the example compile
Comment #2 by simen.kjaras — 2018-07-26T12:07:09Z
Further simplified: struct A { const(A) fun(); alias fun this; } void fun2(ref A a); unittest { A a; fun2(a); } This bug triggers when the alias this type is a qualified version of A (shared, const, or immutable), and A has no aliasing (pointers, dynamic arrays, AAs).
Comment #3 by robert.schadek — 2024-12-13T18:59:52Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/19466 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB