Bug 6923 – Not restrictive initialization semantics
Status
RESOLVED
Resolution
FIXED
Severity
minor
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
x86
OS
Windows
Creation time
2011-11-09T19:56:08Z
Last change time
2019-08-29T17:40:18Z
Assigned to
No Owner
Creator
bearophile_hugs
Comments
Comment #0 by bearophile_hugs — 2011-11-09T19:56:08Z
This is not exactly a bug report, it's just an example of code that shows a possible design/implementation problem.
Code by Timon Gehr:
http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=148455
A comment:
> I think the current initialization semantics are not restrictive enough.
-------------------------
immutable(int)* p;
void foo() { // checks if values pointed to by p are really immutable
static int[immutable(int)*] mem;
if (p !in mem)
mem[p] = *p;
else
assert(mem[p] == *p); // fail.
}
struct Foo {
immutable int x;
this(int y) {
p = &x;
foo();
x = 1;
foo();
}
}
void main() {
Foo(2);
}
Comment #1 by pro.mathias.lang — 2019-08-29T17:40:18Z
Nowadays this code yields:
```
f1.d(18): Error: immutable field x initialized multiple times
f1.d(16): Previous initialization is here.
```