FILE: bareTypes2.kt
    public abstract interface A<D : R|A<D>|> : R|kotlin/Any| {
        public abstract fun foo(): R|kotlin/Any|

        public abstract val cond: R|kotlin/Boolean|
            public get(): R|kotlin/Boolean|

        public abstract val field: R|kotlin/Any|
            public get(): R|kotlin/Any|

    }
    public abstract interface B<F : R|B<F>|> : R|A<F>| {
        public abstract override fun foo(): R|kotlin/CharSequence|

    }
    public abstract interface C : R|B<C>| {
        public abstract override fun foo(): R|kotlin/String|

    }
    public final fun test(x: R|A<*>|): R|kotlin/Unit| {
        when (lval <when-subject>: R|kotlin/Any?| = (R|<local>/x| as? R|C|)?.{ $subj$.R|SubstitutionOverride</C.field: R|kotlin/Any|>| }) {
            ($subj$ is R|kotlin/String|) ->  {
                when () {
                    ==((R|<local>/x| as? R|B<*>|)?.{ $subj$.R|SubstitutionOverride</B.cond: R|kotlin/Boolean|>| }, Boolean(true)) ->  {
                        R|<local>/x|.R|/C.foo|()
                    }
                }

            }
        }

    }
