www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 11107] New: variable initialized to mutable non-TLS global.

http://d.puremagic.com/issues/show_bug.cgi?id=11107

           Summary: variable initialized to mutable non-TLS global.
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: monarchdodra gmail.com



//----
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);

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Sep 22 2013