http://d.puremagic.com/issues/show_bug.cgi?id=7335
Walter Bright <bugzi...@digitalmars.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |bugzi...@digitalmars.com --- Comment #1 from Walter Bright <bugzi...@digitalmars.com> 2012-01-24 14:32:40 PST --- A somewhat simplified example: ---------------------- import core.stdc.stdio; class A { int mValue = 10; void setValue( int newValue) in { printf("A.setValue.in()\n"); } out { printf("A.setValue.Out(value = %d)\n", mValue); } body { mValue = newValue; } } class B : A { override void setValue( int newValue) in { // not checked because super.IN-check will pass printf("B.setValue.in()\n"); } out { printf("B.setValue.Out(value = %d)\n", mValue); } body { mValue = newValue; } } class C : A { override void setValue( int newValue) in { // not checked because super.IN-check will pass printf("C.setValue.in()\n"); int a = newValue; // The only difference to B } out { printf("C.setValue.Out(value = %d)\n", mValue); } body { mValue = newValue; } } void main() { printf("B:\n"); A aObject = new B(); aObject.setValue(3); printf("\nC:\n"); A bObject = new C(); bObject.setValue(3); // <<<<< will crash because undefined mValue in the // A.setValue().out-block. } -------------------- The output is: B: A.setValue.in() A.setValue.Out(value = 3) B.setValue.Out(value = 3) C: A.setValue.in() A.setValue.Out(value = 9772960) C.setValue.Out(value = 3) ---------------------- I suspect the problem is the stack layout is not correct on the call to A.setValue.in(). -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------