From c6bec2fa7514d662bc274dd8594bbf24f65b348c Mon Sep 17 00:00:00 2001 From: Nikolay Lunyak Date: Wed, 18 Oct 2023 18:04:33 +0300 Subject: [PATCH] [FIR] Relax `incompatibleEnumAndUnrelatedInterfaceThroughTypeParameter` --- .../checkers/expression/FirEqualityCompatibilityChecker.kt | 6 +++--- .../testsWithStdLib/equalityCompatibilityCommonCases.fir.kt | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirEqualityCompatibilityChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirEqualityCompatibilityChecker.kt index f0f1fbbd277..0d5a5a8a05c 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirEqualityCompatibilityChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirEqualityCompatibilityChecker.kt @@ -53,9 +53,9 @@ object FirEqualityCompatibilityChecker : FirEqualityOperatorCallChecker() { // sees a non-empty intersection and none of the // types is an enum, but intersections in K1 // work differently from intersections in K2. - val isCaseMissedByK1 = (l.originalTypeInfo.isEnumClass == r.originalTypeInfo.isEnumClass) - && l.originalTypeInfo.isLiterallyTypeParameter - && r.originalTypeInfo.isLiterallyTypeParameter + val isCaseMissedByK1 = (l.originalTypeInfo.isLiterallyTypeParameter && r.originalTypeInfo.isLiterallyTypeParameter) + || (l.originalTypeInfo.isLiterallyTypeParameter && r.originalTypeInfo.isEnumClass) + || (l.originalTypeInfo.isEnumClass && r.originalTypeInfo.isLiterallyTypeParameter) val replicateK1Behavior = !context.languageVersionSettings.supportsFeature(LanguageFeature.ReportErrorsForComparisonOperators) return reporter.reportInapplicabilityDiagnostic( diff --git a/compiler/testData/diagnostics/testsWithStdLib/equalityCompatibilityCommonCases.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/equalityCompatibilityCommonCases.fir.kt index d1bcecee0e2..4c095344c20 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/equalityCompatibilityCommonCases.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/equalityCompatibilityCommonCases.fir.kt @@ -107,6 +107,6 @@ interface A enum class G : B fun incompatibleEnumAndUnrelatedInterfaceThroughTypeParameter(x: G?, i: I?) { - x == i + x == i }