// https://bugzilla.gdcproject.org/show_bug.cgi?id=191 // { dg-do run } // { dg-skip-if "needs gcc/config.d" { ! d_runtime } } class C191 { int count = 0; void testA() { class Inner { void test() { void localFunction() { if (++count != 5) testA(); } localFunction(); } } scope ic = new Inner(); ic.test(); } void testB() { class Inner { void test() { void localFunction() { void anotherLocalFunction() { if (++count != 10) testB(); } anotherLocalFunction(); } localFunction(); } } scope ic = new Inner(); ic.test(); } void testC() { class Inner { int a = 1; void test() { void localFunction() { count += a; if (count != 15) testC(); assert(a == 1); } localFunction(); } } scope ic = new Inner(); ic.test(); } void testD() { class Inner { void test() { int a = 1; void localFunction() { count += a; if (count != 20) testD(); assert(a == 1); } localFunction(); } } scope ic = new Inner(); ic.test(); } void testE() { class Inner { int a = 1; void test() { void localFunction() { void anotherLocalFunction() { count += a; if (count != 25) testE(); assert(a == 1); } anotherLocalFunction(); } localFunction(); } } scope ic = new Inner(); ic.test(); } void testF() { class Inner { void test() { int a = 1; void localFunction() { void anotherLocalFunction() { count += a; if (count != 30) testF(); assert(a == 1); } anotherLocalFunction(); } localFunction(); } } scope ic = new Inner(); ic.test(); } void testG() { class Inner { void test() { void localFunction() { int a = 1; void anotherLocalFunction() { count += a; if (count != 35) testG(); assert(a == 1); } anotherLocalFunction(); } localFunction(); } } scope ic = new Inner(); ic.test(); } } void main() { scope oc = new C191(); oc.testA(); assert(oc.count == 5); oc.testB(); assert(oc.count == 10); oc.testC(); assert(oc.count == 15); oc.testD(); assert(oc.count == 20); oc.testE(); assert(oc.count == 25); oc.testF(); assert(oc.count == 30); oc.testG(); assert(oc.count == 35); }