Report error on bound callable references in compatibility mode

Previously examples were failing with IllegalStateException from JVM back-end
because there was an error type without any error reported
This commit is contained in:
Alexander Udalov
2016-10-06 16:40:05 +03:00
parent 73dc5fefcb
commit 2e4592c6dc
8 changed files with 118 additions and 8 deletions
@@ -0,0 +1,14 @@
// !LANGUAGE: -BoundCallableReferences
class C { companion object }
val ok1 = C::hashCode
val fail1 = <!UNSUPPORTED_FEATURE!>C.Companion<!>::hashCode
object O
val fail2 = <!UNSUPPORTED_FEATURE!>O<!>::hashCode
fun hashCode() {}
val fail3 = <!UNSUPPORTED_FEATURE!>""<!>::hashCode
val fail4 = <!UNSUPPORTED_FEATURE!>(C)<!>::hashCode
val fail5 = <!UNSUPPORTED_FEATURE!>(C.Companion)<!>::hashCode
@@ -0,0 +1,30 @@
package
public val fail1: kotlin.reflect.KFunction0<kotlin.Int>
public val fail2: kotlin.reflect.KFunction0<kotlin.Int>
public val fail3: kotlin.reflect.KFunction0<kotlin.Int>
public val fail4: kotlin.reflect.KFunction0<kotlin.Int>
public val fail5: kotlin.reflect.KFunction0<kotlin.Int>
public val ok1: kotlin.reflect.KFunction1<C, kotlin.Int>
public fun hashCode(): kotlin.Unit
public final class C {
public constructor C()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public companion object Companion {
private constructor Companion()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
public object O {
private constructor O()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,14 @@
// !LANGUAGE: -BoundCallableReferences
class C { companion object }
val ok1 = C::class
val ok2 = C.Companion::class
object O
val ok3 = O::class
val fail1 = <!UNSUPPORTED_FEATURE!>""<!>::class
val fail2 = <!CLASS_LITERAL_LHS_NOT_A_CLASS!>String?::class<!>
val fail3 = <!UNSUPPORTED_FEATURE!>(C)<!>::class
val fail4 = <!UNSUPPORTED_FEATURE!>(C.Companion)<!>::class
@@ -0,0 +1,30 @@
package
public val fail1: kotlin.reflect.KClass<kotlin.String>
public val fail2: kotlin.reflect.KClass<kotlin.String?>
public val fail3: kotlin.reflect.KClass<C.Companion>
public val fail4: kotlin.reflect.KClass<C.Companion>
public val ok1: kotlin.reflect.KClass<C>
public val ok2: kotlin.reflect.KClass<C.Companion>
public val ok3: kotlin.reflect.KClass<O>
public final class C {
public constructor C()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public companion object Companion {
private constructor Companion()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
public object O {
private constructor O()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -7,5 +7,5 @@ val <T : Any> KClass<T>.java: Class<T> get() = null!!
val <T : Any> KClass<T>.javaObjectType: Class<T>
get() {
return java.lang.Class::class.java as Class<T>
return java.<!UNRESOLVED_REFERENCE!>lang<!>.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>Class<!>::class.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>java<!> <!USELESS_CAST!>as Class<T><!>
}
@@ -6,5 +6,5 @@ val <T : Any> KClass<T>.java: Class<T> get() = null!!
val <T : Any> KClass<T>.foo: Any?
get() {
return java.lang.Integer::hashCode
return <!UNSUPPORTED_FEATURE!>java.<!UNRESOLVED_REFERENCE!>lang<!>.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>Integer<!><!>::<!OVERLOAD_RESOLUTION_AMBIGUITY!>hashCode<!>
}