Add an implicit cast to Unit in returns from a constructor.

This commit is contained in:
Steven Schäfer
2019-03-25 10:39:00 +01:00
committed by Dmitry Petrov
parent 826f55ecb4
commit 59c5d8bdb8
6 changed files with 47 additions and 3 deletions
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.ir.declarations.IrVariable
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.IrTypeOperatorCallImpl
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.types.classifierOrFail
import org.jetbrains.kotlin.ir.types.impl.originalKotlinType
@@ -107,7 +108,11 @@ open class InsertImplicitCasts(
override fun visitReturn(expression: IrReturn): IrExpression =
expression.transformPostfix {
value = value.cast(expression.returnTarget.returnType)
value = if (expression.returnTargetSymbol is IrConstructorSymbol) {
value.coerceToUnit()
} else {
value.cast(expression.returnTarget.returnType)
}
}
override fun visitSetVariable(expression: IrSetVariable): IrExpression =