Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

variable initialized to mutable non-TLS global. #18678

Open
dlangBugzillaToGithub opened this issue Sep 22, 2013 · 1 comment
Open

variable initialized to mutable non-TLS global. #18678

dlangBugzillaToGithub opened this issue Sep 22, 2013 · 1 comment

Comments

@dlangBugzillaToGithub
Copy link

monarchdodra reported this on 2013-09-22T23:57:30Z

Transferred from https://issues.dlang.org/show_bug.cgi?id=11107

CC List

  • yebblies

Description

//----
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);
@dlangBugzillaToGithub
Copy link
Author

yebblies commented on 2013-11-20T03:45:05Z

This is basically the class version of issue 2947

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant