Bug 11107 – variable initialized to mutable non-TLS global.

Status
NEW
Severity
normal
Priority
P3
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2013-09-22T23:57:30Z
Last change time
2024-12-13T18:11:52Z
Assigned to
No Owner
Creator
monarchdodra
See also
https://issues.dlang.org/show_bug.cgi?id=2947
Moved to GitHub: dmd#18678 →

Comments

Comment #0 by monarchdodra — 2013-09-22T23:57:30Z
//---- class A{} auto a = new A; //(3) immutable ia = new immutable(A); //(4) auto i = new int; //(5) immutable ii = new immutable(int); //(6) struct S { auto a = new A; //(10) HERE!!! auto i = new int; //(11) } //---- I'm not sure if this is a reg, but: 2.062: main.d(3): Error: cannot evaluate new A at compile time main.d(4): Error: cannot evaluate new immutable(A) at compile time main.d(5): Error: cannot evaluate new int at compile time main.d(6): Error: cannot evaluate new immutable(int) at compile time main.d(10): Error: cannot evaluate new A at compile time main.d(11): Error: cannot evaluate new int at compile time 2.063 has allowed evaluating classes at compile time (but not ints, apparently): main.d(3): Error: variable main.a is mutable. Only const or immutable class thread local variable are allowed, not main.A main.d(5): Error: Cannot interpret new int at compile time main.d(6): Error: Cannot interpret new immutable(int) at compile time main.d(11): Error: Cannot interpret new int at compile time I believe that this code is wrong: - first, because it is surprising that 'a' reference a global class instance, as opposed to a new A for each new S (even if it's the correct behavior). - second, because the new global instance is not TLS (referenced by T.init), yet is placed in a non-shared. Line 10 should be illegal. It should be either of: immutable ai = new immutable(A); shared as = new shared(A);
Comment #1 by yebblies — 2013-11-20T03:45:05Z
This is basically the class version of issue 2947
Comment #2 by robert.schadek — 2024-12-13T18:11:52Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/18678 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB