[Issue 14030] New: Incorrect initialization of nested classes
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Thu Jan 22 11:16:24 PST 2015
https://issues.dlang.org/show_bug.cgi?id=14030
Issue ID: 14030
Summary: Incorrect initialization of nested classes
Product: D
Version: D2
Hardware: x86_64
OS: Linux
Status: NEW
Severity: enhancement
Priority: P1
Component: DMD
Assignee: nobody at puremagic.com
Reporter: markus at oberhumer.com
It seems that "outer" is not correctly set for nested classes
when using static const objects.
Please see "NULL" in the code below.
// dmd 2.066.1
class Outer {
size_t x = 1;
final class Inner {
size_t y = 2;
auto foo() const { return x + y; }
// <== info: here is a ref "Outer outer;"
}
}
void main() {
import std.stdio: writeln;
const a = (new Outer).new Inner;
static const b = (new Outer).new Inner;
assert(a.foo() == 3);
writeln((cast(size_t **)(a))[0]); // __vptr
writeln((cast(size_t **)(a))[1]); // __monitor
writeln((cast(size_t **)(a))[2]); // y
writeln((cast(size_t **)(a))[3]); // outer
writeln((cast(size_t **)(b))[0]);
writeln((cast(size_t **)(b))[1]);
writeln((cast(size_t **)(b))[2]);
writeln((cast(size_t **)(b))[3]); // => NULL !
assert(b.foo() == 3); // runtime crash here
// enable this for error message:
// Error: class 'this.this' is null and cannot be dereferenced
static if (0) {
static assert(b.foo() == 3);
}
}
// EOF
--
More information about the Digitalmars-d-bugs
mailing list