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 ***