E:\prog\>dmd dontwork.d --- The instruction as "0x004565b9" referenced memory at "0x00000038". The memory could not be "read". --- E:\prog\>dmd work.d E:\apps\dm\bin\link.exe work,,,user32+kernel32/noi; /** dontwork.d **/ class Outer { public: this() { B sc = new B(); } class B { Strct str; } } struct Strct { int i; } int main(char[][] args) { return 0; } /** work.d **/ struct Strct { int i; } class Outer { public: this() { B sc = new B(); } class B { Strct str; } } int main(char[][] args) { return 0; } ***
Added to DStress as http://dstress.kuehne.cn/run/f/forward_reference_17_A.d http://dstress.kuehne.cn/run/f/forward_reference_17_B.d
The code generation seems to crash because the vthis member of Inner's ClassDeclaration is NULL. This happens when semantic is called again from runDeferredSemantic: first vthis is set to baseClass->vthis (baseClass is Object and vthis there is NULL) and then the interface and nested code isn't run again to correct it because sizeok != 0.
I looked at the code in dstress, not the one posted here. The Inner in my description is georg's inner B class.
No longer segfaults in DMD2.040 and 1.030. Still doesn't compile (generates a forward reference error). However, the original bug is fixed. TEST CASE: --- class A{ class B { S s; } void foo() { B b = new B(); } } struct S {} --- ice.d(6): Error: forward reference to B
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル