Fir2Ir: generate 'finally' block always with Unit type

This is important for IR lowerings like PolymorphicSignatureLowering
which are very sensitive about the correct types of expressions and
placement of coercions to Unit (KT-59218).

A boolean parameter to `insertImplicitCasts` is not the best solution to
ensure that coercion to Unit is added. The best solution would be to fix
the TODO and generate coercion to the block's type for the last
statement. But that will affect many other places and will need to be
done separately => KT-59781.

Code in IrInterpreter is uncommented to fix the FIR test
`compiler/testData/ir/interpreter/exceptions/tryFinally.kt`; otherwise
evaluation of the function `returnTryFinally` there crashes with
"NoSuchElementException: ArrayDeque is empty". No idea why this test
didn't fail for K1 though, since the created IR is exactly the same.

For some unknown reason this breaks WASM backend with K2, but not with
K1 => KT-59800.
This commit is contained in:
Alexander Udalov
2023-06-29 17:59:50 +02:00
committed by Space Team
parent 79fa2b6db0
commit 69059362b8
23 changed files with 119 additions and 69 deletions
+2
View File
@@ -1,3 +1,5 @@
// IGNORE_BACKEND_K2: WASM
// ^ KT-59800 K2 + Wasm: test failure after changing `finally` block generation
fun test1() : Boolean {
try {