From cc28f81ff0dd9c3ceb454c0b89b2568b1f3d83ee Mon Sep 17 00:00:00 2001 From: Igor Chevdar Date: Mon, 27 Aug 2018 17:55:11 +0300 Subject: [PATCH] Devirtualization bug fix with main (#1945) Added explicit handling of arguments of
--- .../backend/konan/optimizations/Devirtualization.kt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/Devirtualization.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/Devirtualization.kt index 6430d9dd5f0..7295da9353b 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/Devirtualization.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/Devirtualization.kt @@ -242,6 +242,9 @@ internal object Devirtualization { .filterIsInstance() .filter { !it.isAbstract } .forEach { addInstantiatingClass(it) } + } else { + // String is implicitly created as argument of
. + addInstantiatingClass(symbolTable.mapType(context.irBuiltIns.stringType)) } // Traverse call graph from the roots. rootSet.forEach { dfs(it) } @@ -690,6 +693,12 @@ internal object Devirtualization { private var stack = mutableListOf() fun build() { + if (entryPoint != null) { + // String arguments are implicitly put into the array parameter of
. + concreteClass(symbolTable.mapType(context.irBuiltIns.stringType).resolved()).addEdge( + fieldNode(constraintGraph.arrayItemField) + ) + } rootSet.forEach { createFunctionConstraintGraph(it, true)!! } while (stack.isNotEmpty()) { val symbol = stack.pop()