Fix for KT-8204: java.lang.VerifyError for super method invocation in inline function

#KT-8204 Fixed
This commit is contained in:
Michael Bogdanov
2015-11-11 11:22:15 +03:00
parent 04f7805d52
commit 5a8ead0092
14 changed files with 154 additions and 55 deletions
@@ -0,0 +1,11 @@
import test.*
fun box(): String {
val packageResult = packageInline { a, b -> a + b }
if (packageResult != "OK") return "package inline fail: $packageResult"
val samePackageResult = samePackageCall()
if (samePackageResult != "OK") return "same package inline fail: $samePackageResult"
return "OK"
}
@@ -0,0 +1,13 @@
package test
private val packageProp = "O"
private fun packageFun() = "K"
internal inline fun packageInline(p: (String, String) -> String): String {
return p(packageProp, packageFun())
}
internal fun samePackageCall(): String {
return packageInline { s, s2 -> s + s2 }
}
@@ -0,0 +1,10 @@
import test.*
fun box() : String {
val p = P()
if (p.testPrivate() != "OK") return "fail 1 ${p.testPrivate()}"
if (p.testFinal() != "OK") return "fail 2 ${p.testFinal()}"
return "OK"
}
@@ -0,0 +1,23 @@
package test
class P {
private val FOO_PRIVATE = "OK"
final val FOO_FINAL = "OK"
private inline fun fooPrivate(): String {
return FOO_PRIVATE
}
private inline fun fooFinal(): String {
return FOO_FINAL
}
fun testPrivate(): String {
return fooPrivate()
}
fun testFinal(): String {
return fooFinal()
}
}
@@ -0,0 +1,5 @@
import test.*
fun box(): String {
return X.doTest()
}
@@ -0,0 +1,15 @@
package test
open class A {
open fun test() = "OK"
}
object X : A() {
override fun test(): String {
return "fail"
}
inline fun doTest(): String {
return super.test()
}
}
@@ -0,0 +1,5 @@
import test.*
fun box(): String {
return X.doTest()
}
@@ -0,0 +1,14 @@
package test
open class A {
open val test = "OK"
}
object X : A() {
override val test: String
get() = "fail"
inline fun doTest(): String {
return super.test
}
}