fn while0(arg: s32) s32
{
    >a: s32 = arg;
    while (a < 10)
    {
        a = a + 1;
    }

    return a;
}

fn while1(arg: s32) s32
{
    >a: s32 = 1;
    if (arg)
    {
    }
    else
    {
        while (a < 10)
        {
            a = a + 1;
        }
    }

    return a;
}

fn while2(arg: s32) s32
{
    >sum: s32 = 0;
    >i: s32 = 0;

    while (i < arg)
    {
        i = i + 1;
        >j: s32 = 0;
        while (j < arg)
        {
            sum = sum + j;
            j = j + 1;
        }
    }

    return sum;
}

fn while3(arg: s32) s32
{
    >a: s32 = 1;
    >b: s32 = 2;

    while (a < 10)
    {
        if (a == 2)
        {
            a = 3;
        }
        else
        {
            b = 4;
        }
    }

    return b;
}

fn while4(arg: s32) s32
{
    >a: s32 = 1;
    >b: s32 = 2;

    while (a < 10)
    {
        if (a == 2)
        {
            a = 3;
        }
        else
        {
            b = 4;
        }

        b = b + 1;
        a = a + 1;
    }

    return b;
}

fn while5(arg: s32) s32
{
    >a: s32 = 1;
    while (a < 10)
    {
        a = a + 1;
        a = a + 2;
    }

    return a;
}

fn while6(arg: s32) s32
{
    >a: s32 = 1;
    while (arg)
    {
        a = 2;
    }

    return a;
}

fn while7(arg: s32) s32
{
    >a: s32 = 1;
    while (a < 10)
    {
        >b: s32 = a + 1;
        a = b + 2;
    }

    return a;
}

fn[cc(.c)] main[export]() s32
{
    return  while0(0) +
            while1(1) +
            while2(2) +
            while3(3) +
            while4(4) +
            while5(5) +
            while6(6) +
            while7(7);
}