Dispatch Any methods called on interface via vtable instead of itable (#1753)

This commit is contained in:
Vsevolod Tolstopyatov
2018-07-04 10:10:58 +03:00
committed by SvyatoslavScherbina
parent 627d28db8a
commit a8d6113308
3 changed files with 56 additions and 14 deletions
+5
View File
@@ -1478,6 +1478,11 @@ task vtable1(type: RunKonanTest) {
source = "datagen/rtti/vtable1.kt"
}
task vtable_any(type: RunKonanTest) {
source = "datagen/rtti/vtable_any.kt"
goldValue = "[1]\n[2]\n[3]\n[4]\n"
}
task strdedup1(type: RunKonanTest) {
goldValue = "true\ntrue\n"
source = "datagen/literals/strdedup1.kt"
@@ -0,0 +1,18 @@
package datagen.rtti.vtable_any
import kotlin.test.*
@Test
fun runTest() {
// Try to trick devirtualizer
println(anyMethods(arrayListOf("1")))
println(anyMethods(mapOf("2" to 1).keys))
println(anyMethods(mapOf("1" to 3).values))
println(anyMethods(setOf("4")))
}
fun anyMethods(iterable: Iterable<*>): String {
assert(iterable.equals(iterable))
assert(iterable.hashCode() != 0)
return iterable.toString()
}