FIR2IR: don't generate unnecessary 'return throw'
#KT-60245 Fixed
This commit is contained in:
committed by
Space Team
parent
90904e4f8a
commit
7d5e2f85cc
+1
-1
@@ -190,7 +190,7 @@ class Fir2IrImplicitCastInserter(
|
||||
(data as? IrContainerExpression)?.insertImplicitCasts() ?: data
|
||||
|
||||
override fun visitReturnExpression(returnExpression: FirReturnExpression, data: IrElement): IrElement {
|
||||
val irReturn = data as IrReturn
|
||||
val irReturn = data as? IrReturn ?: return data
|
||||
val expectedType = returnExpression.target.labeledElement.returnTypeRef
|
||||
irReturn.value = irReturn.value.cast(returnExpression.result, returnExpression.result.typeRef, expectedType)
|
||||
return data
|
||||
|
||||
@@ -498,9 +498,13 @@ class Fir2IrVisitor(
|
||||
// ==================================================================================
|
||||
|
||||
override fun visitReturnExpression(returnExpression: FirReturnExpression, data: Any?): IrElement {
|
||||
val result = returnExpression.result
|
||||
if (result is FirThrowExpression) {
|
||||
// Note: in FIR we must have 'return' as the last statement
|
||||
return convertToIrExpression(result)
|
||||
}
|
||||
val irTarget = conversionScope.returnTarget(returnExpression, declarationStorage)
|
||||
return returnExpression.convertWithOffsets { startOffset, endOffset ->
|
||||
val result = returnExpression.result
|
||||
// For implicit returns, use the expression endOffset to generate the expected line number for debugging.
|
||||
val returnStartOffset = if (returnExpression.source?.kind is KtFakeSourceElementKind.ImplicitReturn) endOffset else startOffset
|
||||
IrReturnImpl(
|
||||
|
||||
Reference in New Issue
Block a user