[JS IR] Do not copy interface method if base class inherits it
^KT-58599 Fixed
This commit is contained in:
committed by
Space Team
parent
9ca9fc9c68
commit
8066f1b7d2
@@ -0,0 +1,55 @@
|
||||
// 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)
|
||||
}
|
||||
Reference in New Issue
Block a user