Bug 6338 – Immutability is lost for shared(immutable(T))
Status
RESOLVED
Resolution
DUPLICATE
Severity
major
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
Other
OS
Linux
Creation time
2011-07-17T06:07:00Z
Last change time
2011-11-10T01:42:21Z
Assigned to
nobody
Creator
bugzilla
Comments
Comment #0 by bugzilla — 2011-07-17T06:07:31Z
Test cases:
pragma(msg, (shared(immutable(int))).stringof);
pragma(msg, (shared(immutable(int[]))).stringof);
Prints:
shared(int)
shared(immutable(int)[])
Expected:
immutable(int)
immutable(int[])
In the first case, immutability is lost altogether; in the second case, immutability is lost on the outermost type.
Comment #1 by bugzilla — 2011-07-17T06:36:18Z
Actually, never mind the "expected" comment here. I don't know what to expect. :) It is probably better to keep the shared qualifier as well, not collapsing the types at all.
Comment #2 by jlquinn — 2011-09-16T18:20:22Z
I think the collapsing might be required. I was going to report this separately but it looks like a facet of your bug.
import std.stdio;
synchronized class foo {
File file;
this(string infile) {
file.open(infile);
}
}
~/dmd2/linux/bin64/dmd -c junk.d
junk.d(5): Error: function std.stdio.File.open (string name, in const(char[]) stdioOpenmode = "rb") is not callable using argument types (string) shared
/home/jlquinn/dmd2/linux/bin64/../../src/phobos/std/stdio.d(292): Error: destructor std.stdio.File.~this () is not callable using argument types ()
The compiler (dmd 2.055) doesn't realize that shared(string) is equivalent to string.
Comment #3 by k.hara.pg — 2011-11-10T01:42:21Z
*** This issue has been marked as a duplicate of issue 6922 ***