Fixed bug in Inliner + test

This commit is contained in:
Igor Chevdar
2018-05-11 13:44:42 +03:00
parent 2b97610301
commit 7ded115ddd
3 changed files with 23 additions and 2 deletions
@@ -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)
}
+5
View File
@@ -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() }
}