[Issue 17769] dmd accepts conversion from shared(int)* to int* when value comes from method

2022-12-17 Thread d-bugmail--- via Digitalmars-d-bugs
https://issues.dlang.org/show_bug.cgi?id=17769

Iain Buclaw  changed:

   What|Removed |Added

   Priority|P1  |P3

--


[Issue 17769] dmd accepts conversion from shared(int)* to int* when value comes from method

2017-11-02 Thread d-bugmail--- via Digitalmars-d-bugs
https://issues.dlang.org/show_bug.cgi?id=17769

--- Comment #1 from Lucia Cojocaru  ---
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?

--


[Issue 17769] dmd accepts conversion from shared(int)* to int* when value comes from method

2017-10-03 Thread d-bugmail--- via Digitalmars-d-bugs
https://issues.dlang.org/show_bug.cgi?id=17769

Lucia Cojocaru  changed:

   What|Removed |Added

 CC||lucia.mcojoc...@gmail.com
   Assignee|nob...@puremagic.com|lucia.mcojoc...@gmail.com

--


[Issue 17769] dmd accepts conversion from shared(int)* to int* when value comes from method

2017-08-21 Thread via Digitalmars-d-bugs
https://issues.dlang.org/show_bug.cgi?id=17769

anonymous4  changed:

   What|Removed |Added

   Hardware|x86_64  |All
 OS|Linux   |All

--