Bug 14030 – Incorrect initialization of nested classes

Status
NEW
Severity
enhancement
Priority
P4
Component
dmd
Product
D
Version
D2
Platform
x86_64
OS
Linux
Creation time
2015-01-22T19:16:24Z
Last change time
2024-12-13T18:39:15Z
Assigned to
No Owner
Creator
mfx
Moved to GitHub: dmd#18934 →

Comments

Comment #0 by markus — 2015-01-22T19:16:24Z
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
Comment #1 by robert.schadek — 2024-12-13T18:39:15Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/18934 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB