// 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);
}