diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java index 44095be80d5..ec7cfdc491b 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java @@ -23474,6 +23474,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/overload/disambiguateByFailedAbstractClassCheck.kt"); } + @Test + @TestMetadata("doubleWinsOverFloat.kt") + public void testDoubleWinsOverFloat() throws Exception { + runTest("compiler/testData/diagnostics/tests/overload/doubleWinsOverFloat.kt"); + } + @Test @TestMetadata("EmptyArgumentListInLambda.kt") public void testEmptyArgumentListInLambda() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java index 8b7b090148b..d2637207fa2 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java @@ -23474,6 +23474,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/overload/disambiguateByFailedAbstractClassCheck.kt"); } + @Test + @TestMetadata("doubleWinsOverFloat.kt") + public void testDoubleWinsOverFloat() throws Exception { + runTest("compiler/testData/diagnostics/tests/overload/doubleWinsOverFloat.kt"); + } + @Test @TestMetadata("EmptyArgumentListInLambda.kt") public void testEmptyArgumentListInLambda() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java index dd6a98ce7e9..df39af5d7e1 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java @@ -23480,6 +23480,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/overload/disambiguateByFailedAbstractClassCheck.kt"); } + @Test + @TestMetadata("doubleWinsOverFloat.kt") + public void testDoubleWinsOverFloat() throws Exception { + runTest("compiler/testData/diagnostics/tests/overload/doubleWinsOverFloat.kt"); + } + @Test @TestMetadata("EmptyArgumentListInLambda.kt") public void testEmptyArgumentListInLambda() throws Exception { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/AbstractConeCallConflictResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/AbstractConeCallConflictResolver.kt index 74db8a050f2..8aa9ea154ae 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/AbstractConeCallConflictResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/AbstractConeCallConflictResolver.kt @@ -67,9 +67,6 @@ abstract class AbstractConeCallConflictResolver( requireOrDescribe(specific is ConeKotlinType, specific) requireOrDescribe(general is ConeKotlinType, general) - // TODO: support unsigned types - // see OverloadingConflictResolver.kt:294 - val int = StandardClassIds.Int val long = StandardClassIds.Long val byte = StandardClassIds.Byte @@ -87,7 +84,6 @@ abstract class AbstractConeCallConflictResolver( // int >= long, int >= short, short >= byte when { - //TypeUtils.equalTypes(specific, _double) && TypeUtils.equalTypes(general, _float) -> return true specificClassId == int -> { when (generalClassId) { long -> return true @@ -104,6 +100,7 @@ abstract class AbstractConeCallConflictResolver( } } specificClassId == uShort && generalClassId == uByte -> return true + specificClassId == StandardClassIds.Double && generalClassId == StandardClassIds.Float -> return true } return false } diff --git a/compiler/testData/diagnostics/tests/overload/doubleWinsOverFloat.kt b/compiler/testData/diagnostics/tests/overload/doubleWinsOverFloat.kt new file mode 100644 index 00000000000..243f51cde2b --- /dev/null +++ b/compiler/testData/diagnostics/tests/overload/doubleWinsOverFloat.kt @@ -0,0 +1,20 @@ +// FIR_IDENTICAL +// SKIP_TXT +// DIAGNOSTICS: -USELESS_IS_CHECK, -DEBUG_INFO_SMARTCAST +// ISSUE: KT-57194 + +fun foo(arg: Double) {} +fun foo(arg: Float) {} +fun Double.bar() {} +fun Float.bar() {} + +fun test(arg: Any) { + ::foo + + if (arg is Double) { + if (arg is Float) { + foo(arg) + arg.bar() + } + } +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index 313b0157b85..3c3f544df5e 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -23480,6 +23480,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/overload/disambiguateByFailedAbstractClassCheck.kt"); } + @Test + @TestMetadata("doubleWinsOverFloat.kt") + public void testDoubleWinsOverFloat() throws Exception { + runTest("compiler/testData/diagnostics/tests/overload/doubleWinsOverFloat.kt"); + } + @Test @TestMetadata("EmptyArgumentListInLambda.kt") public void testEmptyArgumentListInLambda() throws Exception {