Introduce warnings reporting by missed constraints because of incorrect optimization in the constraints processor

This commit is contained in:
Victor Petukhov
2021-04-26 20:14:21 +03:00
parent e110b49cab
commit 7c62e9aecd
41 changed files with 535 additions and 46 deletions
@@ -4,5 +4,5 @@
class Foo<T : Enum<T>>(val values: Array<T>)
fun foo(x: Array<out Enum<*>>) {
val y = Foo(<!ARGUMENT_TYPE_MISMATCH!>x<!>)
val y = Foo(<!ARGUMENT_TYPE_MISMATCH{LT}!>x<!>)
}
@@ -1,4 +1,3 @@
// !WITH_NEW_INFERENCE
// SKIP_JAVAC
// FILE: MySettings.java
@@ -1,4 +1,3 @@
// !WITH_NEW_INFERENCE
// SKIP_JAVAC
// FILE: MySettings.java
@@ -28,5 +27,5 @@ abstract class MySettingsListener<S extends MyComparableSettings> {}
fun test() {
val a = MySettings.getSettings()
a.getLinkedProjectsSettings()
a.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE{OI}, TYPE_INFERENCE_UPPER_BOUND_VIOLATED{OI}!>linkedProjectsSettings<!>
a.linkedProjectsSettings
}
@@ -1,3 +1,4 @@
// !LANGUAGE: -ProperTypeInferenceConstraintsProcessing
// WITH_RUNTIME
// !DIAGNOSTICS: -UNUSED_PARAMETER -CAST_NEVER_SUCCEEDS
@@ -5,5 +6,5 @@ fun <E : Enum<E>> createMap(enumClass: Class<E>) {}
fun reproduce() {
val enumClass: Class<Enum<*>> = "any" as Class<Enum<*>>
createMap(<!ARGUMENT_TYPE_MISMATCH!>enumClass<!>)
createMap(enumClass)
}
@@ -1,3 +1,4 @@
// !LANGUAGE: -ProperTypeInferenceConstraintsProcessing
// WITH_RUNTIME
// !DIAGNOSTICS: -UNUSED_PARAMETER -CAST_NEVER_SUCCEEDS
@@ -5,5 +6,5 @@ fun <E : Enum<E>> createMap(enumClass: Class<E>) {}
fun reproduce() {
val enumClass: Class<Enum<*>> = "any" as Class<Enum<*>>
createMap(enumClass)
createMap(<!TYPE_MISMATCH_WARNING("Enum<in Enum<*>>; Enum<*>")!>enumClass<!>)
}
@@ -0,0 +1,10 @@
// !LANGUAGE: +ProperTypeInferenceConstraintsProcessing
// WITH_RUNTIME
// !DIAGNOSTICS: -UNUSED_PARAMETER -CAST_NEVER_SUCCEEDS
fun <E : Enum<E>> createMap(enumClass: Class<E>) {}
fun reproduce() {
val enumClass: Class<Enum<*>> = "any" as Class<Enum<*>>
createMap(<!ARGUMENT_TYPE_MISMATCH!>enumClass<!>)
}
@@ -0,0 +1,10 @@
// !LANGUAGE: +ProperTypeInferenceConstraintsProcessing
// WITH_RUNTIME
// !DIAGNOSTICS: -UNUSED_PARAMETER -CAST_NEVER_SUCCEEDS
fun <E : Enum<E>> createMap(enumClass: Class<E>) {}
fun reproduce() {
val enumClass: Class<Enum<*>> = "any" as Class<Enum<*>>
createMap(<!TYPE_MISMATCH, TYPE_MISMATCH!>enumClass<!>)
}
@@ -0,0 +1,4 @@
package
public fun </*0*/ E : kotlin.Enum<E>> createMap(/*0*/ enumClass: java.lang.Class<E>): kotlin.Unit
public fun reproduce(): kotlin.Unit
@@ -0,0 +1,13 @@
// !LANGUAGE: -ProperTypeInferenceConstraintsProcessing
sealed class Subtype<A1, B1> {
abstract fun cast(value: A1): B1
class Trivial<A2 : B2, B2> : Subtype<A2, B2>() {
override fun cast(value: A2): B2 = value
}
}
fun <A, B> unsafeCast(value: A): B {
val proof: Subtype<A, B> = <!UPPER_BOUND_VIOLATED!>Subtype.Trivial()<!>
return proof.cast(value)
}
@@ -0,0 +1,13 @@
// !LANGUAGE: -ProperTypeInferenceConstraintsProcessing
sealed class Subtype<A1, B1> {
abstract fun cast(value: A1): B1
class Trivial<A2 : B2, B2> : Subtype<A2, B2>() {
override fun cast(value: A2): B2 = value
}
}
fun <A, B> unsafeCast(value: A): B {
val proof: Subtype<A, B> = Subtype.<!TYPE_MISMATCH_WARNING("B; A")!>Trivial()<!>
return proof.cast(value)
}
@@ -0,0 +1,19 @@
package
public fun </*0*/ A, /*1*/ B> unsafeCast(/*0*/ value: A): B
public sealed class Subtype</*0*/ A1, /*1*/ B1> {
protected constructor Subtype</*0*/ A1, /*1*/ B1>()
public abstract fun cast(/*0*/ value: A1): B1
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 final class Trivial</*0*/ A2 : B2, /*1*/ B2> : Subtype<A2, B2> {
public constructor Trivial</*0*/ A2 : B2, /*1*/ B2>()
public open override /*1*/ fun cast(/*0*/ value: A2): B2
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,13 @@
// !LANGUAGE: +ProperTypeInferenceConstraintsProcessing
sealed class Subtype<A1, B1> {
abstract fun cast(value: A1): B1
class Trivial<A2 : B2, B2> : Subtype<A2, B2>() {
override fun cast(value: A2): B2 = value
}
}
fun <A, B> unsafeCast(value: A): B {
val proof: Subtype<A, B> = <!UPPER_BOUND_VIOLATED!>Subtype.Trivial()<!>
return proof.cast(value)
}
@@ -0,0 +1,13 @@
// !LANGUAGE: +ProperTypeInferenceConstraintsProcessing
sealed class Subtype<A1, B1> {
abstract fun cast(value: A1): B1
class Trivial<A2 : B2, B2> : Subtype<A2, B2>() {
override fun cast(value: A2): B2 = value
}
}
fun <A, B> unsafeCast(value: A): B {
val proof: Subtype<A, B> = Subtype.<!TYPE_MISMATCH, TYPE_MISMATCH!>Trivial()<!>
return proof.cast(value)
}
@@ -0,0 +1,19 @@
package
public fun </*0*/ A, /*1*/ B> unsafeCast(/*0*/ value: A): B
public sealed class Subtype</*0*/ A1, /*1*/ B1> {
protected constructor Subtype</*0*/ A1, /*1*/ B1>()
public abstract fun cast(/*0*/ value: A1): B1
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 final class Trivial</*0*/ A2 : B2, /*1*/ B2> : Subtype<A2, B2> {
public constructor Trivial</*0*/ A2 : B2, /*1*/ B2>()
public open override /*1*/ fun cast(/*0*/ value: A2): B2
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
}
}