// #failed: resolve
// #expected_error_count: 41

E :: typedef int;
EA :: 0;
EB :: ^;

S :: struct {a: int;}
Ts :: typedef int;
@weak T :: typedef int;

main :: proc(): int {
    {
        a: int;
        a = EB;
        a /= 1;
        a *= 1;
        a %= 1;
        a -= 1;
        a += 1;
        a &= 1;
        a |= 1;
        a <<= 1;
        a >>= 1;
    }

    {
        a: float;
        a = 1;
        a /= 1;
        a *= 1;
        a -= 1;
        a += 1;
        {a %= 1;}
        {a &= 1;}
        {a |= 1;}
        {a <<= 1;}
        {a >>= 1;}
    }

    {
        a: E;
        a = 1;
        a /= 1;
        a *= 1;
        a %= 1;
        a -= 1;
        a += 1;
        a &= 1;
        a |= 1;
        a <<= 1;
        a >>= 1;

        a = EB;
        a /= EB;
        a *= EB;
        a %= EB;
        a -= EB;
        a += EB;
        a &= EB;
        a |= EB;
        a <<= EB;
        a >>= EB;
    }

    {
        b: int;
        a: *int;
        a = &b;
        {a /= &b;}
        {a *= &b;}
        {a %= &b;}
        {a -= &b;}
        {a += &b;}
        {a &= &b;}
        {a |= &b;}
        {a <<= &b;}
        {a >>= &b;}
    }

    {
        a: S;
        b: S;
        a = b;
        {a /= b;}
        {a *= b;}
        {a %= b;}
        {a -= b;}
        {a += b;}
        {a &= b;}
        {a |= b;}
        {a <<= b;}
        {a >>= b;}
    }

    {
        a: Ts;
        b: Ts;
        a = 1;
        a /= 1;
        a *= 1;
        a %= 1;
        a -= 1;
        a += 1;
        a &= 1;
        a |= 1;
        a <<= 1;
        a >>= 1;
        a = b;
        a /= b;
        a *= b;
        a %= b;
        a -= b;
        a += b;
        a &= b;
        a |= b;
        a <<= b;
        a >>= b;
    }

    {
        a: T;
        b: T;
        a = 1;
        a /= 1;
        a *= 1;
        a %= 1;
        a -= 1;
        a += 1;
        a &= 1;
        a |= 1;
        a <<= 1;
        a >>= 1;
        a = b;
        a /= b;
        a *= b;
        a %= b;
        a -= b;
        a += b;
        a &= b;
        a |= b;
        a <<= b;
        a >>= b;
    }

    {
        a: String = "memes";
        b: String = "memes";
        a = "something_else";
        a /= "something_else";
        a *= "something_else";
        a %= "something_else";
        a -= "something_else";
        a += "something_else";
        a &= "something_else";
        a |= "something_else";
        a <<= "something_else";
        a >>= "something_else";
        a = b;
        a /= b;
        a *= b;
        a %= b;
        a -= b;
        a += b;
        a &= b;
        a |= b;
        a <<= b;
        a >>= b;
    }

    return 0;
}

