FIR2IR: check non-parameter Unit type for adapted callable references

This commit is contained in:
Jinseong Jeon
2021-01-08 12:56:09 -08:00
committed by Mikhail Glukhikh
parent 4d3ec301c0
commit 093f62caac
2 changed files with 4 additions and 5 deletions
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.resolve.inference.* import org.jetbrains.kotlin.fir.resolve.inference.*
import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.coneType import org.jetbrains.kotlin.fir.types.coneType
import org.jetbrains.kotlin.ir.builders.declarations.UNDEFINED_PARAMETER_INDEX import org.jetbrains.kotlin.ir.builders.declarations.UNDEFINED_PARAMETER_INDEX
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
@@ -51,8 +50,6 @@ internal class AdapterGenerator(
private val conversionScope: Fir2IrConversionScope private val conversionScope: Fir2IrConversionScope
) : Fir2IrComponents by components { ) : Fir2IrComponents by components {
private fun FirTypeRef.toIrType(): IrType = with(typeConverter) { toIrType() }
private fun ConeKotlinType.toIrType(): IrType = with(typeConverter) { toIrType() } private fun ConeKotlinType.toIrType(): IrType = with(typeConverter) { toIrType() }
internal fun needToGenerateAdaptedCallableReference( internal fun needToGenerateAdaptedCallableReference(
@@ -85,7 +82,10 @@ internal class AdapterGenerator(
*/ */
private fun needCoercionToUnit(type: IrSimpleType, function: IrFunction): Boolean { private fun needCoercionToUnit(type: IrSimpleType, function: IrFunction): Boolean {
val expectedReturnType = type.arguments.last().typeOrNull val expectedReturnType = type.arguments.last().typeOrNull
return expectedReturnType?.isUnit() == true && !function.returnType.isUnit() val actualReturnType = function.returnType
return expectedReturnType?.isUnit() == true &&
// In case of an external function whose return type is a type parameter, e.g., operator fun <T, R> invoke(T): R
!actualReturnType.isUnit() && !actualReturnType.isTypeParameter()
} }
/** /**
@@ -1,6 +1,5 @@
// WITH_RUNTIME // WITH_RUNTIME
// WITH_COROUTINES // WITH_COROUTINES
// IGNORE_BACKEND_FIR: JVM_IR
import kotlin.coroutines.* import kotlin.coroutines.*
import helpers.* import helpers.*