FILE: bareTypes.kt
    public abstract interface A<out T> : R|kotlin/Any| {
    }
    public abstract interface MutableA<T> : R|A<T>| {
        public abstract fun add(x: R|T|): R|kotlin/Unit|

    }
    public abstract interface MutableString : R|MutableA<kotlin/String>| {
    }
    public final fun test(a: R|A<kotlin/String>|): R|kotlin/Unit| {
        (R|<local>/a| as? R|MutableA<kotlin/String>|)?.{ $subj$.R|SubstitutionOverride</MutableA.add: R|kotlin/Unit|>|(String()) }
        (R|<local>/a| as R|MutableA<kotlin/String>|).R|SubstitutionOverride</MutableA.add: R|kotlin/Unit|>|(String())
    }
    public final fun test2(a: R|A<kotlin/String>|): R|kotlin/Unit| {
        lval b: R|MutableString| = (R|<local>/a| as R|MutableString|)
        R|<local>/b|.R|SubstitutionOverride</MutableString.add: R|kotlin/Unit|>|(String())
    }
    public final fun test3(a: R|A<kotlin/String>|): R|kotlin/Unit| {
        when () {
            (R|<local>/a| is R|MutableA<kotlin/String>|) ->  {
                R|<local>/a|.R|SubstitutionOverride</MutableA.add: R|kotlin/Unit|>|(String())
            }
        }

    }
