You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The reason for the bug is that there are different overloads in dcast.d for implicitConvTo for CallExp (int* foo = s.method() falling here) and Expression (where the other examples in this issue go).
https://github.com/dlang/dmd/blob/master/src/ddmd/dcast.d#L179
Expression: https://github.com/dlang/dmd/blob/master/src/ddmd/dcast.d#L194
CallExp: https://github.com/dlang/dmd/blob/master/src/ddmd/dcast.d#L809
For: int* foo = s.method();
Code goes into visit(CallExp) and calls visit(Expression) which defaults to NOMATCH(false).
https://github.com/dlang/dmd/blob/master/src/ddmd/dcast.d#L817
On NOMATCH, the checks continue in visit(CallExp) and if nothing is found, it dafaults to success (true).
https://github.com/dlang/dmd/blob/master/src/ddmd/dcast.d#L940
Everything else hits the default in visit(Expression) which is NOMATCH - hence the rejecting.
Now I have a fix here disallowing pointer conversions from shared to nonshared
https://github.com/somzzz/dmd/commit/6fdead01822071b464016f1c0313358f40494de2
But DIP29 allows this kind of conversions as long as the pointers are unique.
https://wiki.dlang.org/DIP29
This results in my fix breaking the following compiler tests for DIP29:
https://github.com/dlang/dmd/blob/master/test/runnable/implicit.d#L217
I'm not sure how to check if the pointer is unique. Also, are there any other subtleties related to DIP29 that these changes could be disregarding?
ag0aep6g reported this on 2017-08-20T18:09:10Z
Transferred from https://issues.dlang.org/show_bug.cgi?id=17769
CC List
Description
The text was updated successfully, but these errors were encountered: