8066f1b7d2
^KT-58599 Fixed
56 lines
1.0 KiB
Kotlin
Vendored
56 lines
1.0 KiB
Kotlin
Vendored
// TARGET_BACKEND: JS_IR
|
|
// ONLY_IR_DCE
|
|
// RUN_PLAIN_BOX_FUNCTION
|
|
// INFER_MAIN_MODULE
|
|
|
|
// MODULE: remove_unused_override
|
|
// FILE: lib.kt
|
|
|
|
interface I {
|
|
fun foo() = "OK"
|
|
}
|
|
|
|
abstract class A : I
|
|
|
|
class B : A()
|
|
|
|
class C : A() {
|
|
override fun foo(): String {
|
|
return "C::foo"
|
|
}
|
|
}
|
|
|
|
@JsExport
|
|
fun makeB(): A {
|
|
val b = B()
|
|
b.foo()
|
|
return b
|
|
}
|
|
|
|
@JsExport
|
|
fun makeC(): A {
|
|
return C()
|
|
}
|
|
|
|
// FILE: test.js
|
|
function box() {
|
|
var b = this["remove_unused_override"].makeB()
|
|
var c = this["remove_unused_override"].makeC()
|
|
|
|
var cnt = 0
|
|
for(var prop in b) {
|
|
if (typeof b[prop] === 'function' && prop != 'constructor') {
|
|
++cnt
|
|
if (b[prop].call(b) != "OK") return "expect inherited method"
|
|
}
|
|
}
|
|
for(var prop in c) {
|
|
if (typeof c[prop] === 'function' && prop != 'constructor') {
|
|
++cnt
|
|
if (c[prop].call(c) != "OK") return "override C::foo() should be removed by DCE"
|
|
}
|
|
}
|
|
|
|
return cnt == 2 ? "OK" : ("Expected 2 calls, got " + cnt)
|
|
}
|