Dispatch Any methods called on interface via vtable instead of itable (#1753)
This commit is contained in:
committed by
SvyatoslavScherbina
parent
627d28db8a
commit
a8d6113308
@@ -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()
|
||||
}
|
||||
Reference in New Issue
Block a user