Files
2023-05-30 08:22:43 +00:00

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)
}