[FIR] Replace `UNSAFE_DOWNCAST_WRT_VARIANCE` with a breaking change
diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KaFirDataClassConverters.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KaFirDataClassConverters.kt
index eeef429..32a7e23 100644
--- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KaFirDataClassConverters.kt
+++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KaFirDataClassConverters.kt
@@ -4628,14 +4628,6 @@
             token,
         )
     }
-    add(FirErrors.UNSAFE_DOWNCAST_WRT_VARIANCE) { firDiagnostic ->
-        UnsafeDowncastWrtVarianceImpl(
-            firSymbolBuilder.typeBuilder.buildKtType(firDiagnostic.a),
-            firSymbolBuilder.typeBuilder.buildKtType(firDiagnostic.b),
-            firDiagnostic as KtPsiDiagnostic,
-            token,
-        )
-    }
     add(FirErrors.CANNOT_CHECK_FOR_ERASED_DEPRECATION_WARNING) { firDiagnostic ->
         CannotCheckForErasedDeprecationWarningImpl(
             firSymbolBuilder.typeBuilder.buildKtType(firDiagnostic.a),
diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KaFirDiagnostics.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KaFirDiagnostics.kt
index bb2c181..f9826fd 100644
--- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KaFirDiagnostics.kt
+++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KaFirDiagnostics.kt
@@ -3232,12 +3232,6 @@
         val type: KaType
     }
 
-    interface UnsafeDowncastWrtVariance : KaFirDiagnostic<PsiElement> {
-        override val diagnosticClass get() = UnsafeDowncastWrtVariance::class
-        val currentType: KaType
-        val futureType: KaType
-    }
-
     interface CannotCheckForErasedDeprecationWarning : KaFirDiagnostic<PsiElement> {
         override val diagnosticClass get() = CannotCheckForErasedDeprecationWarning::class
         val type: KaType
diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KaFirDiagnosticsImpl.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KaFirDiagnosticsImpl.kt
index b1c0ccf..7822358 100644
--- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KaFirDiagnosticsImpl.kt
+++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KaFirDiagnosticsImpl.kt
@@ -3886,13 +3886,6 @@
     token: KaLifetimeToken,
 ) : KaAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KaFirDiagnostic.CannotCheckForErased
 
-internal class UnsafeDowncastWrtVarianceImpl(
-    override val currentType: KaType,
-    override val futureType: KaType,
-    firDiagnostic: KtPsiDiagnostic,
-    token: KaLifetimeToken,
-) : KaAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KaFirDiagnostic.UnsafeDowncastWrtVariance
-
 internal class CannotCheckForErasedDeprecationWarningImpl(
     override val type: KaType,
     firDiagnostic: KtPsiDiagnostic,
diff --git a/compiler/fir/analysis-tests/testData/resolve/bareTypes.fir.txt b/compiler/fir/analysis-tests/testData/resolve/bareTypes.fir.txt
index 07edaa5..85ee7f2 100644
--- a/compiler/fir/analysis-tests/testData/resolve/bareTypes.fir.txt
+++ b/compiler/fir/analysis-tests/testData/resolve/bareTypes.fir.txt
@@ -8,8 +8,8 @@
     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|(future MutableA<out kotlin/String>) MutableA<kotlin/String>|)?.{ $subj$.R|SubstitutionOverride</MutableA.add: R|kotlin/Unit|>|(String()) }
-        (R|<local>/a| as R|(future MutableA<out kotlin/String>) MutableA<kotlin/String>|).R|SubstitutionOverride</MutableA.add: R|kotlin/Unit|>|(String())
+        (R|<local>/a| as? R|MutableA<out kotlin/String>|)?.{ $subj$.R|SubstitutionOverride</MutableA.add: R|kotlin/Unit|><Inapplicable(INAPPLICABLE): /MutableA.add>#|(String()) }
+        (R|<local>/a| as R|MutableA<out kotlin/String>|).R|SubstitutionOverride</MutableA.add: R|kotlin/Unit|><Inapplicable(INAPPLICABLE): /MutableA.add>#|(String())
     }
     public final fun test2(a: R|A<kotlin/String>|): R|kotlin/Unit| {
         lval b: R|MutableString| = (R|<local>/a| as R|MutableString|)
@@ -17,8 +17,8 @@
     }
     public final fun test3(a: R|A<kotlin/String>|): R|kotlin/Unit| {
         when () {
-            (R|<local>/a| is R|(future MutableA<out kotlin/String>) MutableA<kotlin/String>|) ->  {
-                R|<local>/a|.R|SubstitutionOverride</MutableA.add: R|kotlin/Unit|>|(String())
+            (R|<local>/a| is R|MutableA<out kotlin/String>|) ->  {
+                R|<local>/a|.R|SubstitutionOverride</MutableA.add: R|kotlin/Unit|><Inapplicable(INAPPLICABLE): /MutableA.add>#|(String())
             }
         }
 
diff --git a/compiler/fir/analysis-tests/testData/resolve/bareTypes.kt b/compiler/fir/analysis-tests/testData/resolve/bareTypes.kt
index 7affd71..ce84ef3 100644
--- a/compiler/fir/analysis-tests/testData/resolve/bareTypes.kt
+++ b/compiler/fir/analysis-tests/testData/resolve/bareTypes.kt
@@ -1,5 +1,4 @@
-// LATEST_LV_DIFFERENCE
-// RUN_PIPELINE_TILL: BACKEND
+// RUN_PIPELINE_TILL: FRONTEND
 interface A<out T>
 
 interface MutableA<T> : A<T> {
@@ -9,8 +8,8 @@
 interface MutableString : MutableA<String>
 
 fun test(a: A<String>) {
-    (a <!UNCHECKED_CAST!>as? <!UNSAFE_DOWNCAST_WRT_VARIANCE!>MutableA<!><!>)?.add("")
-    (a <!UNCHECKED_CAST!>as <!UNSAFE_DOWNCAST_WRT_VARIANCE!>MutableA<!><!>).add("")
+    (a as? MutableA)?.add(<!MEMBER_PROJECTED_OUT!>""<!>)
+    (a as MutableA).add(<!MEMBER_PROJECTED_OUT!>""<!>)
 }
 
 fun test2(a: A<String>) {
@@ -19,7 +18,7 @@
 }
 
 fun test3(a: A<String>) {
-    if (a is <!CANNOT_CHECK_FOR_ERASED_DEPRECATION_WARNING, UNSAFE_DOWNCAST_WRT_VARIANCE!>MutableA<!>) {
-        a.add("")
+    if (a is MutableA) {
+        a.add(<!MEMBER_PROJECTED_OUT!>""<!>)
     }
 }
diff --git a/compiler/fir/analysis-tests/testData/resolve/bareTypes.latestLV.kt b/compiler/fir/analysis-tests/testData/resolve/bareTypes.latestLV.kt
deleted file mode 100644
index 3820b47..0000000
--- a/compiler/fir/analysis-tests/testData/resolve/bareTypes.latestLV.kt
+++ /dev/null
@@ -1,25 +0,0 @@
-// LATEST_LV_DIFFERENCE
-// RUN_PIPELINE_TILL: BACKEND
-interface A<out T>
-
-interface MutableA<T> : A<T> {
-    fun add(x: T)
-}
-
-interface MutableString : MutableA<String>
-
-fun test(a: A<String>) {
-    (a as? MutableA)?.add(<!MEMBER_PROJECTED_OUT!>""<!>)
-    (a as MutableA).add(<!MEMBER_PROJECTED_OUT!>""<!>)
-}
-
-fun test2(a: A<String>) {
-    val b = a as MutableString
-    b.add("")
-}
-
-fun test3(a: A<String>) {
-    if (a is MutableA) {
-        a.add(<!MEMBER_PROJECTED_OUT!>""<!>)
-    }
-}
diff --git a/compiler/fir/analysis-tests/testData/resolve/bareTypesWithFlexibleArguments.fir.txt b/compiler/fir/analysis-tests/testData/resolve/bareTypesWithFlexibleArguments.fir.txt
index 49ce292..e7fcc27 100644
--- a/compiler/fir/analysis-tests/testData/resolve/bareTypesWithFlexibleArguments.fir.txt
+++ b/compiler/fir/analysis-tests/testData/resolve/bareTypesWithFlexibleArguments.fir.txt
@@ -1,8 +1,8 @@
 FILE: bareTypesWithFlexibleArguments.kt
     public final fun <T> R|kotlin/collections/Collection<T>?|.concat(collection: R|kotlin/collections/Collection<T>|): R|kotlin/collections/Collection<T>?| {
         when () {
-            (this@R|/concat| is R|{kotlin/collections/LinkedHashSet=} (future {kotlin/collections/LinkedHashSet=} java/util/LinkedHashSet<out T>) java/util/LinkedHashSet<T>|) ->  {
-                this@R|/concat|.R|SubstitutionOverride<java/util/LinkedHashSet.addAll: R|kotlin/Boolean|>|(R|<local>/collection|)
+            (this@R|/concat| is R|{kotlin/collections/LinkedHashSet=} java/util/LinkedHashSet<out T>|) ->  {
+                this@R|/concat|.R|SubstitutionOverride<java/util/LinkedHashSet.addAll: R|kotlin/Boolean|><Inapplicable(INAPPLICABLE): java/util/LinkedHashSet.addAll>#|(R|<local>/collection|)
                 ^concat this@R|/concat|
             }
         }
diff --git a/compiler/fir/analysis-tests/testData/resolve/bareTypesWithFlexibleArguments.kt b/compiler/fir/analysis-tests/testData/resolve/bareTypesWithFlexibleArguments.kt
index 554faaa..fea9c1a 100644
--- a/compiler/fir/analysis-tests/testData/resolve/bareTypesWithFlexibleArguments.kt
+++ b/compiler/fir/analysis-tests/testData/resolve/bareTypesWithFlexibleArguments.kt
@@ -1,11 +1,10 @@
-// RUN_PIPELINE_TILL: BACKEND
+// RUN_PIPELINE_TILL: FRONTEND
 // WITH_STDLIB
-// LATEST_LV_DIFFERENCE
 // FULL_JDK
 
 fun <T> Collection<T>?.concat(collection: Collection<T>): Collection<T>? {
-    if (this is <!CANNOT_CHECK_FOR_ERASED_DEPRECATION_WARNING, UNSAFE_DOWNCAST_WRT_VARIANCE!>LinkedHashSet<!>) {
-        addAll(collection)
+    if (this is LinkedHashSet) {
+        addAll(<!ARGUMENT_TYPE_MISMATCH!>collection<!>)
         return this
     }
     return this
diff --git a/compiler/fir/analysis-tests/testData/resolve/bareTypesWithFlexibleArguments.latestLV.kt b/compiler/fir/analysis-tests/testData/resolve/bareTypesWithFlexibleArguments.latestLV.kt
deleted file mode 100644
index 36b91e20..0000000
--- a/compiler/fir/analysis-tests/testData/resolve/bareTypesWithFlexibleArguments.latestLV.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-// RUN_PIPELINE_TILL: BACKEND
-// WITH_STDLIB
-// LATEST_LV_DIFFERENCE
-// FULL_JDK
-
-fun <T> Collection<T>?.concat(collection: Collection<T>): Collection<T>? {
-    if (this is LinkedHashSet) {
-        addAll(<!ARGUMENT_TYPE_MISMATCH!>collection<!>)
-        return this
-    }
-    return this
-}
diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/problems/smartcastToStarProjectedSubclass.fir.txt b/compiler/fir/analysis-tests/testData/resolve/smartcasts/problems/smartcastToStarProjectedSubclass.fir.txt
index 3ce351f..1876ce2 100644
--- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/problems/smartcastToStarProjectedSubclass.fir.txt
+++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/problems/smartcastToStarProjectedSubclass.fir.txt
@@ -10,7 +10,7 @@
     }
     public final fun test_2(option: R|Option<kotlin/Pair<kotlin/String, kotlin/String>>?|): R|kotlin/Unit| {
         when () {
-            (R|<local>/option| is R|Option.Some<kotlin/Pair<kotlin/String, kotlin/String>>|) ->  {
+            (R|<local>/option| is R|Option.Some<ft<kotlin/Pair<kotlin/String, kotlin/String>, kotlin/Pair<kotlin/String, kotlin/String>?>>|) ->  {
                 lval x: R|kotlin/String| = R|<local>/option|.R|SubstitutionOverride</Option.Some.get: R|ft<kotlin/Pair<kotlin/String, kotlin/String>, kotlin/Pair<kotlin/String, kotlin/String>?>|>|().R|SubstitutionOverride<kotlin/Pair.first: R|kotlin/String|>|
                 R|<local>/x|.R|kotlin/String.length|
             }
diff --git a/compiler/fir/analysis-tests/testData/resolve/types/bareWithSubjectTypeAlias.fir.txt b/compiler/fir/analysis-tests/testData/resolve/types/bareWithSubjectTypeAlias.fir.txt
index a48df1c..543f177 100644
--- a/compiler/fir/analysis-tests/testData/resolve/types/bareWithSubjectTypeAlias.fir.txt
+++ b/compiler/fir/analysis-tests/testData/resolve/types/bareWithSubjectTypeAlias.fir.txt
@@ -31,7 +31,7 @@
     }
     public final fun foo(): R|kotlin/Unit| {
         when (lval a: R|{TA=} A<kotlin/CharSequence>| = R|/bar|()) {
-            ($subj$ is R|A.B<kotlin/CharSequence>|) ->  {
+            ($subj$ is R|A.B<out kotlin/CharSequence>|) ->  {
                 R|<local>/a|.R|SubstitutionOverride</A.B.x: R|kotlin/CharSequence|>|.R|kotlin/CharSequence.length|
             }
         }
diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt
index 871c7aa..ba6ab75 100644
--- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt
+++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt
@@ -1612,10 +1612,6 @@
         val CANNOT_CHECK_FOR_ERASED by error<PsiElement> {
             parameter<ConeKotlinType>("type")
         }
-        val UNSAFE_DOWNCAST_WRT_VARIANCE by warning<PsiElement> {
-            parameter<ConeKotlinType>("currentType")
-            parameter<ConeKotlinType>("futureType")
-        }
         val CANNOT_CHECK_FOR_ERASED_DEPRECATION_WARNING by warning<PsiElement> {
             parameter<ConeKotlinType>("type")
         }
diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt
index 96644bf..3b70017 100644
--- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt
+++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt
@@ -806,7 +806,6 @@
 
     // Casts and is-checks
     val CANNOT_CHECK_FOR_ERASED: KtDiagnosticFactory1<ConeKotlinType> = KtDiagnosticFactory1("CANNOT_CHECK_FOR_ERASED", ERROR, SourceElementPositioningStrategies.DEFAULT, PsiElement::class)
-    val UNSAFE_DOWNCAST_WRT_VARIANCE: KtDiagnosticFactory2<ConeKotlinType, ConeKotlinType> = KtDiagnosticFactory2("UNSAFE_DOWNCAST_WRT_VARIANCE", WARNING, SourceElementPositioningStrategies.DEFAULT, PsiElement::class)
     val CANNOT_CHECK_FOR_ERASED_DEPRECATION_WARNING: KtDiagnosticFactory1<ConeKotlinType> = KtDiagnosticFactory1("CANNOT_CHECK_FOR_ERASED_DEPRECATION_WARNING", WARNING, SourceElementPositioningStrategies.DEFAULT, PsiElement::class)
     val CAST_NEVER_SUCCEEDS: KtDiagnosticFactory0 = KtDiagnosticFactory0("CAST_NEVER_SUCCEEDS", WARNING, SourceElementPositioningStrategies.OPERATOR, KtBinaryExpressionWithTypeRHS::class)
     val USELESS_CAST: KtDiagnosticFactory0 = KtDiagnosticFactory0("USELESS_CAST", WARNING, SourceElementPositioningStrategies.AS_TYPE, KtBinaryExpressionWithTypeRHS::class)
diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonExpressionCheckers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonExpressionCheckers.kt
index 8a7db2a..63da6eb 100644
--- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonExpressionCheckers.kt
+++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonExpressionCheckers.kt
@@ -7,7 +7,6 @@
 
 import org.jetbrains.kotlin.fir.analysis.checkers.expression.*
 import org.jetbrains.kotlin.fir.analysis.checkers.syntax.*
-import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirUnsafeDowncastWrtVarianceChecker
 
 object CommonExpressionCheckers : ExpressionCheckers() {
     override val annotationCallCheckers: Set<FirAnnotationCallChecker>
@@ -168,7 +167,6 @@
 
     override val typeOperatorCallCheckers: Set<FirTypeOperatorCallChecker>
         get() = setOf(
-            FirUnsafeDowncastWrtVarianceChecker,
             FirCastOperatorsChecker,
         )
 
diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirUnsafeDowncastWrtVarianceChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirUnsafeDowncastWrtVarianceChecker.kt
deleted file mode 100644
index e33c17c..0000000
--- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirUnsafeDowncastWrtVarianceChecker.kt
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2010-2025 JetBrains s.r.o. and Kotlin Programming Language contributors.
- * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
- */
-
-package org.jetbrains.kotlin.fir.analysis.checkers.expression
-
-import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
-import org.jetbrains.kotlin.diagnostics.reportOn
-import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
-import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
-import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
-import org.jetbrains.kotlin.fir.expressions.FirTypeOperatorCall
-import org.jetbrains.kotlin.fir.types.coneType
-import org.jetbrains.kotlin.fir.types.unsafeDowncastWrtVariance
-
-object FirUnsafeDowncastWrtVarianceChecker : FirTypeOperatorCallChecker(MppCheckerKind.Common) {
-    override fun check(
-        expression: FirTypeOperatorCall,
-        context: CheckerContext,
-        reporter: DiagnosticReporter,
-    ) {
-        val typeRef = expression.conversionTypeRef
-
-        typeRef.coneType.attributes.unsafeDowncastWrtVariance?.let {
-            reporter.reportOn(typeRef.source, FirErrors.UNSAFE_DOWNCAST_WRT_VARIANCE, typeRef.coneType, it.coneType, context)
-        }
-    }
-}
\ No newline at end of file
diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt
index 68c8a50..79059fc 100644
--- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt
+++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt
@@ -707,7 +707,6 @@
 import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNRESOLVED_REFERENCE
 import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNRESOLVED_REFERENCE_WRONG_RECEIVER
 import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNSAFE_CALL
-import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNSAFE_DOWNCAST_WRT_VARIANCE
 import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNSAFE_IMPLICIT_INVOKE_CALL
 import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNSAFE_INFIX_CALL
 import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNSAFE_OPERATOR_CALL
@@ -2601,12 +2600,6 @@
             "This check for instance of erased type ''{0}'' will be prohibited in future releases.",
             RENDER_TYPE,
         )
-        map.put(
-            UNSAFE_DOWNCAST_WRT_VARIANCE,
-            "This type is currently considered as ''{0}'' but will become ''{1}'' in future releases.",
-            RENDER_TYPE,
-            RENDER_TYPE,
-        )
         map.put(CAST_NEVER_SUCCEEDS, "This cast can never succeed.")
         map.put(USELESS_CAST, "No cast needed.")
         map.put(UNCHECKED_CAST, "Unchecked cast of ''{0}'' to ''{1}''.", RENDER_TYPE, RENDER_TYPE)
diff --git a/compiler/fir/cones/src/org/jetbrains/kotlin/fir/types/UnsafeDowncastWrtVarianceAttribute.kt b/compiler/fir/cones/src/org/jetbrains/kotlin/fir/types/UnsafeDowncastWrtVarianceAttribute.kt
deleted file mode 100644
index deed2f9..0000000
--- a/compiler/fir/cones/src/org/jetbrains/kotlin/fir/types/UnsafeDowncastWrtVarianceAttribute.kt
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright 2010-2025 JetBrains s.r.o. and Kotlin Programming Language contributors.
- * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
- */
-
-package org.jetbrains.kotlin.fir.types
-
-import kotlin.reflect.KClass
-
-class UnsafeDowncastWrtVarianceAttribute(
-    override val coneType: ConeKotlinType,
-) : ConeAttributeWithConeType<UnsafeDowncastWrtVarianceAttribute>() {
-    override fun union(other: UnsafeDowncastWrtVarianceAttribute?): UnsafeDowncastWrtVarianceAttribute? = null
-    override fun intersect(other: UnsafeDowncastWrtVarianceAttribute?): UnsafeDowncastWrtVarianceAttribute? = null
-    override fun add(other: UnsafeDowncastWrtVarianceAttribute?): UnsafeDowncastWrtVarianceAttribute = other ?: this
-    override fun isSubtypeOf(other: UnsafeDowncastWrtVarianceAttribute?): Boolean = true
-    override fun toString(): String = "(future ${coneType.renderForDebugging()})"
-    override fun copyWith(newType: ConeKotlinType): UnsafeDowncastWrtVarianceAttribute = UnsafeDowncastWrtVarianceAttribute(newType)
-
-    override val key: KClass<out UnsafeDowncastWrtVarianceAttribute>
-        get() = UnsafeDowncastWrtVarianceAttribute::class
-    override val keepInInferredDeclarationType: Boolean
-        get() = true
-}
-
-val ConeAttributes.unsafeDowncastWrtVariance: UnsafeDowncastWrtVarianceAttribute? by ConeAttributes.attributeAccessor<UnsafeDowncastWrtVarianceAttribute>()
diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/bareTypes.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/bareTypes.kt
index 9e119f1..c14d8b4 100644
--- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/bareTypes.kt
+++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/bareTypes.kt
@@ -72,8 +72,7 @@
 
     return when {
         properStaticallyKnownType == null -> staticallyKnownType
-        staticallyKnownType.equalTypes(properStaticallyKnownType, session) -> staticallyKnownType
-        else -> staticallyKnownType.withAdditionalAttribute(UnsafeDowncastWrtVarianceAttribute(properStaticallyKnownType))
+        else -> properStaticallyKnownType
     }
 }
 
diff --git a/compiler/testData/codegen/box/contracts/kt45236.jvm_abi.txt b/compiler/testData/codegen/box/contracts/kt45236.jvm_abi.txt
index 069b8c71..5770aa2 100644
--- a/compiler/testData/codegen/box/contracts/kt45236.jvm_abi.txt
+++ b/compiler/testData/codegen/box/contracts/kt45236.jvm_abi.txt
@@ -1,6 +1,16 @@
 MODULE main
 	CLASS Kt45236Kt.class
 		PACKAGE METADATA
+			FUNCTION isError(LNetRequestStatus;)Z
+				Property: class.metadata.function.contract
+					K1
+						contract {
+						  returns(true) implies (p#0 is NetRequestStatus.Error<T#0>)
+						}
+					K2
+						contract {
+						  returns(true) implies (p#0 is NetRequestStatus.Error<out T#0>)
+						}
 			FUNCTION successOrThrow()V
 				Property: class.metadata.function.typeParameters
 					K1
diff --git a/compiler/testData/diagnostics/tests/rawCastToStarProjection_Ok.fir.kt b/compiler/testData/diagnostics/tests/rawCastToStarProjection_Ok.fir.kt
deleted file mode 100644
index b48c8f7..0000000
--- a/compiler/testData/diagnostics/tests/rawCastToStarProjection_Ok.fir.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-// LATEST_LV_DIFFERENCE
-// RUN_PIPELINE_TILL: BACKEND
-// ISSUE: KT-57095
-
-open class ValueType<T> {
-    class Optional<T>: ValueType<T?>()
-}
-
-private fun checkType(type: ValueType<out Any?>) {
-    type <!UNCHECKED_CAST!>as <!UNSAFE_DOWNCAST_WRT_VARIANCE!>ValueType.Optional<!><!>
-}
diff --git a/compiler/testData/diagnostics/tests/rawCastToStarProjection_Ok.kt b/compiler/testData/diagnostics/tests/rawCastToStarProjection_Ok.kt
index 0b94ba6..d548236 100644
--- a/compiler/testData/diagnostics/tests/rawCastToStarProjection_Ok.kt
+++ b/compiler/testData/diagnostics/tests/rawCastToStarProjection_Ok.kt
@@ -1,4 +1,4 @@
-// LATEST_LV_DIFFERENCE
+// FIR_IDENTICAL
 // RUN_PIPELINE_TILL: BACKEND
 // ISSUE: KT-57095
 
diff --git a/compiler/testData/diagnostics/tests/rawCastToStarProjection_Ok.latestLV.kt b/compiler/testData/diagnostics/tests/rawCastToStarProjection_Ok.latestLV.kt
deleted file mode 100644
index 0b94ba6..0000000
--- a/compiler/testData/diagnostics/tests/rawCastToStarProjection_Ok.latestLV.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-// LATEST_LV_DIFFERENCE
-// RUN_PIPELINE_TILL: BACKEND
-// ISSUE: KT-57095
-
-open class ValueType<T> {
-    class Optional<T>: ValueType<T?>()
-}
-
-private fun checkType(type: ValueType<out Any?>) {
-    type as ValueType.Optional
-}
diff --git a/compiler/testData/diagnostics/tests/smartCasts/comparisonOfBuiltInTypesUnderOr.fir.kt b/compiler/testData/diagnostics/tests/smartCasts/comparisonOfBuiltInTypesUnderOr.fir.kt
index 83e2e67..ae5cdcd 100644
--- a/compiler/testData/diagnostics/tests/smartCasts/comparisonOfBuiltInTypesUnderOr.fir.kt
+++ b/compiler/testData/diagnostics/tests/smartCasts/comparisonOfBuiltInTypesUnderOr.fir.kt
@@ -111,13 +111,13 @@
 }
 
 fun test13(list: List<String>?) {
-    if (list is <!CANNOT_CHECK_FOR_ERASED_DEPRECATION_WARNING, UNSAFE_DOWNCAST_WRT_VARIANCE!>ArrayList<!> || list == null) {
-        var k: ArrayList<String>? = list
+    if (list is ArrayList || list == null) {
+        var k: ArrayList<String>? = <!INITIALIZER_TYPE_MISMATCH!>list<!>
     }
 }
 
 fun test14(list: List<String>?) {
-    if (list is <!CANNOT_CHECK_FOR_ERASED_DEPRECATION_WARNING, UNSAFE_DOWNCAST_WRT_VARIANCE!>ArrayList<!> || list != null) {
+    if (list is ArrayList || list != null) {
         var k: ArrayList<String>? = <!INITIALIZER_TYPE_MISMATCH!>list<!>
     }
 }
\ No newline at end of file
diff --git a/compiler/testData/ir/irText/regressions/kt45236.fir.ir.txt b/compiler/testData/ir/irText/regressions/kt45236.fir.ir.txt
index 93c26bc..aa0a12e 100644
--- a/compiler/testData/ir/irText/regressions/kt45236.fir.ir.txt
+++ b/compiler/testData/ir/irText/regressions/kt45236.fir.ir.txt
@@ -186,7 +186,7 @@
     $receiver: VALUE_PARAMETER name:<this> type:<root>.NetRequestStatus<T of <root>.isError>
     BLOCK_BODY
       RETURN type=kotlin.Nothing from='public final fun isError <T> (): kotlin.Boolean declared in <root>'
-        TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=<root>.NetRequestStatus.Error<T of <root>.isError>
+        TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=<root>.NetRequestStatus.Error<out T of <root>.isError>
           GET_VAR '<this>: <root>.NetRequestStatus<T of <root>.isError> declared in <root>.isError' type=<root>.NetRequestStatus<T of <root>.isError> origin=null
   FUN name:successOrThrow visibility:public modality:FINAL <T> () returnType:kotlin.Unit
     TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any] reified:false
@@ -202,5 +202,5 @@
             $receiver: GET_VAR 'val nextTerminal: <root>.NetRequestStatus<T of <root>.successOrThrow> declared in <root>.successOrThrow' type=<root>.NetRequestStatus<T of <root>.successOrThrow> origin=null
           then: THROW type=kotlin.Nothing
             CALL 'public final fun <get-error> (): kotlin.Throwable declared in <root>.NetRequestStatus.Error' type=kotlin.Throwable origin=GET_PROPERTY
-              $this: TYPE_OP type=<root>.NetRequestStatus.Error<T of <root>.successOrThrow> origin=IMPLICIT_CAST typeOperand=<root>.NetRequestStatus.Error<T of <root>.successOrThrow>
+              $this: TYPE_OP type=<root>.NetRequestStatus.Error<out T of <root>.successOrThrow> origin=IMPLICIT_CAST typeOperand=<root>.NetRequestStatus.Error<out T of <root>.successOrThrow>
                 GET_VAR 'val nextTerminal: <root>.NetRequestStatus<T of <root>.successOrThrow> declared in <root>.successOrThrow' type=<root>.NetRequestStatus<T of <root>.successOrThrow> origin=null