176 lines
3.2 KiB
Kotlin
Vendored
176 lines
3.2 KiB
Kotlin
Vendored
//!LANGUAGE: -ProhibitTailrecOnVirtualMember
|
|
|
|
open class A {
|
|
<!TAILREC_ON_VIRTUAL_MEMBER_ERROR!>tailrec<!> open fun foo(x: Int) {
|
|
foo(x)
|
|
}
|
|
|
|
internal <!TAILREC_ON_VIRTUAL_MEMBER_ERROR!>tailrec<!> open fun bar(y: Int) {
|
|
bar(y)
|
|
}
|
|
|
|
protected <!TAILREC_ON_VIRTUAL_MEMBER_ERROR!>tailrec<!> open fun baz(y: Int) {
|
|
baz(y)
|
|
}
|
|
|
|
private tailrec fun boo(y: Int) {
|
|
boo(y)
|
|
}
|
|
|
|
<!INCOMPATIBLE_MODIFIERS!>private<!> <!INCOMPATIBLE_MODIFIERS!>open<!> tailrec fun booOpen(y: Int) {
|
|
booOpen(y)
|
|
}
|
|
|
|
internal tailrec fun baa(y: Int) {
|
|
baa(y)
|
|
}
|
|
}
|
|
|
|
open class B : A() {
|
|
final tailrec override fun foo(x: Int) {
|
|
foo(x)
|
|
}
|
|
|
|
final tailrec override fun bar(y: Int) {
|
|
bar(y)
|
|
}
|
|
|
|
final tailrec override fun baz(y: Int) {
|
|
baz(y)
|
|
}
|
|
}
|
|
|
|
|
|
open class C : A() {
|
|
<!TAILREC_ON_VIRTUAL_MEMBER_ERROR!>tailrec<!> override fun foo(x: Int) {
|
|
foo(x)
|
|
}
|
|
|
|
<!TAILREC_ON_VIRTUAL_MEMBER_ERROR!>tailrec<!> override fun bar(y: Int) {
|
|
bar(y)
|
|
}
|
|
|
|
<!TAILREC_ON_VIRTUAL_MEMBER_ERROR!>tailrec<!> override fun baz(y: Int) {
|
|
baz(y)
|
|
}
|
|
}
|
|
|
|
object D : A() {
|
|
tailrec override fun foo(x: Int) {
|
|
foo(x)
|
|
}
|
|
|
|
tailrec override fun bar(y: Int) {
|
|
bar(y - 1)
|
|
}
|
|
|
|
tailrec override fun baz(y: Int) {
|
|
baz(y)
|
|
}
|
|
}
|
|
|
|
sealed class E : A() {
|
|
<!TAILREC_ON_VIRTUAL_MEMBER_ERROR!>tailrec<!> override fun foo(x: Int) {
|
|
foo(x)
|
|
}
|
|
|
|
<!TAILREC_ON_VIRTUAL_MEMBER_ERROR!>tailrec<!> override fun bar(y: Int) {
|
|
bar(y)
|
|
}
|
|
|
|
<!TAILREC_ON_VIRTUAL_MEMBER_ERROR!>tailrec<!> override fun baz(y: Int) {
|
|
baz(y)
|
|
}
|
|
|
|
class E1 : E() {
|
|
tailrec override fun foo(x: Int) {
|
|
foo(x)
|
|
}
|
|
|
|
tailrec override fun bar(y: Int) {
|
|
bar(y)
|
|
}
|
|
|
|
tailrec override fun baz(y: Int) {
|
|
baz(y)
|
|
}
|
|
}
|
|
}
|
|
|
|
enum class F {
|
|
F0,
|
|
F1() {
|
|
tailrec override fun foo(x: Int) {
|
|
foo(x)
|
|
}
|
|
|
|
tailrec override fun bar(y: Int) {
|
|
bar(y)
|
|
}
|
|
|
|
tailrec override fun baz(y: Int) {
|
|
baz(y)
|
|
}
|
|
};
|
|
|
|
<!TAILREC_ON_VIRTUAL_MEMBER_ERROR!>tailrec<!> open fun foo(x: Int) {
|
|
foo(x)
|
|
}
|
|
|
|
internal <!TAILREC_ON_VIRTUAL_MEMBER_ERROR!>tailrec<!> open fun bar(y: Int) {
|
|
bar(y)
|
|
}
|
|
|
|
protected <!TAILREC_ON_VIRTUAL_MEMBER_ERROR!>tailrec<!> open fun baz(y: Int) {
|
|
baz(y)
|
|
}
|
|
|
|
private tailrec fun boo(y: Int) {
|
|
boo(y)
|
|
}
|
|
|
|
internal tailrec fun baa(y: Int) {
|
|
baa(y)
|
|
}
|
|
}
|
|
|
|
enum class G {
|
|
|
|
G1;
|
|
|
|
<!TAILREC_ON_VIRTUAL_MEMBER_ERROR!>tailrec<!> open fun foo(x: Int) {
|
|
foo(x)
|
|
}
|
|
|
|
internal <!TAILREC_ON_VIRTUAL_MEMBER_ERROR!>tailrec<!> open fun bar(y: Int) {
|
|
bar(y)
|
|
}
|
|
|
|
protected <!TAILREC_ON_VIRTUAL_MEMBER_ERROR!>tailrec<!> open fun baz(y: Int) {
|
|
baz(y)
|
|
}
|
|
|
|
private tailrec fun boo(y: Int) {
|
|
boo(y)
|
|
}
|
|
|
|
internal tailrec fun baa(y: Int) {
|
|
baa(y)
|
|
}
|
|
}
|
|
|
|
|
|
val z = object : A() {
|
|
tailrec override fun foo(x: Int) {
|
|
foo(x)
|
|
}
|
|
|
|
tailrec override fun bar(y: Int) {
|
|
bar(y)
|
|
}
|
|
|
|
tailrec override fun baz(y: Int) {
|
|
baz(y)
|
|
}
|
|
}
|