Fixed bug in Inliner + test
This commit is contained in:
+3
-2
@@ -35,6 +35,7 @@ import org.jetbrains.kotlin.ir.symbols.impl.createValueSymbol
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
@@ -60,9 +61,9 @@ internal class DeepCopyIrTreeWithDescriptors(val targetDescriptor: FunctionDescr
|
||||
fun copy(irElement: IrElement, typeSubstitutor: TypeSubstitutor?): IrElement {
|
||||
this.typeSubstitutor = typeSubstitutor
|
||||
// Create all class descriptors and all necessary descriptors in order to create KotlinTypes.
|
||||
irElement.acceptChildrenVoid(DescriptorCollectorCreatePhase())
|
||||
irElement.acceptVoid(DescriptorCollectorCreatePhase())
|
||||
// Initialize all created descriptors possibly using previously created types.
|
||||
irElement.acceptChildrenVoid(DescriptorCollectorInitPhase())
|
||||
irElement.acceptVoid(DescriptorCollectorInitPhase())
|
||||
return irElement.accept(InlineCopyIr(), null)
|
||||
}
|
||||
|
||||
|
||||
@@ -2326,6 +2326,11 @@ task inline_statementAsLastExprInBlock(type: RunKonanTest) {
|
||||
source = "codegen/inline/statementAsLastExprInBlock.kt"
|
||||
}
|
||||
|
||||
task inline_returnLocalClassFromBlock(type: RunKonanTest) {
|
||||
goldValue = "Zzz\n"
|
||||
source = "codegen/inline/returnLocalClassFromBlock.kt"
|
||||
}
|
||||
|
||||
task deserialized_inline0(type: RunKonanTest) {
|
||||
source = "serialization/deserialized_inline0.kt"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
package codegen.inline.returnLocalClassFromBlock
|
||||
|
||||
import kotlin.test.*
|
||||
|
||||
inline fun <R> call(block: ()->R): R {
|
||||
try {
|
||||
return block()
|
||||
} finally {
|
||||
println("Zzz")
|
||||
}
|
||||
}
|
||||
|
||||
@Test fun runTest() {
|
||||
call { class Z(); Z() }
|
||||
}
|
||||
Reference in New Issue
Block a user