[FIR2IR] Correctly calculate signature for non-dynamic calls on dynamic receiver

If dispatch receiver is dynamic and call on it is not dynamic that means
  that this call was resolved to some specific declaration because of
  smartcast. So we should use original type of this declaration as
  dispatch receiver during calculation of IdSignature instead of Any
  (which came from dynamic type). Otherwise we will have two different
  signatures for the same member declaration

^KT-57682 Fixed
This commit is contained in:
Dmitriy Novozhilov
2023-03-31 13:45:57 +03:00
committed by Space Team
parent e3c7241abd
commit d7d7620db2
5 changed files with 40 additions and 2 deletions
@@ -0,0 +1,13 @@
// TARGET_BACKEND: JS_IR
// ISSUE: KT-57682
fun test_1(x: String) = x.length
fun test_2(x: dynamic): Int = when (x) {
is String -> x.length
else -> x.something
}
fun box(): String {
val result = test_1("a") + test_2("ab")
return if (result == 3) "OK" else "fail"
}