Prohibit using array based on non-reified type parameters as reified type arguments

#KT-31227 fixed
This commit is contained in:
Ilya Chernikov
2019-11-14 08:22:04 +01:00
parent 8a1f8714e7
commit 27ff2d7816
13 changed files with 131 additions and 16 deletions
@@ -0,0 +1,19 @@
// !LANGUAGE: +ProhibitNonReifiedArraysAsReifiedTypeArguments
// !DIAGNOSTICS: -UNUSED_PARAMETER
inline fun <reified T> foo() {}
fun <T> bar() {
foo<<!TYPE_PARAMETER_AS_REIFIED!>T<!>>()
foo<<!TYPE_PARAMETER_AS_REIFIED_ARRAY!>Array<T><!>>()
foo<<!TYPE_PARAMETER_AS_REIFIED_ARRAY!>Array<Array<T>><!>>()
foo<Array<Int>>()
foo<Array<Array<Int>>>()
foo<IntArray>()
foo<List<T>>()
foo<List<Array<T>>>()
}
fun test(x: Array<String>, y: Array<*>) {
bar<Int>()
}
@@ -0,0 +1,5 @@
package
public fun </*0*/ T> bar(): kotlin.Unit
public inline fun </*0*/ reified T> foo(): kotlin.Unit
public fun test(/*0*/ x: kotlin.Array<kotlin.String>, /*1*/ y: kotlin.Array<*>): kotlin.Unit
@@ -0,0 +1,19 @@
// !LANGUAGE: -ProhibitNonReifiedArraysAsReifiedTypeArguments
// !DIAGNOSTICS: -UNUSED_PARAMETER
inline fun <reified T> foo() {}
fun <T> bar() {
foo<<!TYPE_PARAMETER_AS_REIFIED!>T<!>>()
foo<<!TYPE_PARAMETER_AS_REIFIED_ARRAY_WARNING!>Array<T><!>>()
foo<<!TYPE_PARAMETER_AS_REIFIED_ARRAY_WARNING!>Array<Array<T>><!>>()
foo<Array<Int>>()
foo<Array<Array<Int>>>()
foo<IntArray>()
foo<List<T>>()
foo<List<Array<T>>>()
}
fun test(x: Array<String>, y: Array<*>) {
bar<Int>()
}
@@ -0,0 +1,5 @@
package
public fun </*0*/ T> bar(): kotlin.Unit
public inline fun </*0*/ reified T> foo(): kotlin.Unit
public fun test(/*0*/ x: kotlin.Array<kotlin.String>, /*1*/ y: kotlin.Array<*>): kotlin.Unit
@@ -1,4 +1,5 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE -UNCHECKED_CAST -USELESS_CAST
// !LANGUAGE: +ProhibitNonReifiedArraysAsReifiedTypeArguments
class A<T>
fun test1(
@@ -49,6 +50,6 @@ fun test6() = <!UNSUPPORTED!>foo<!><Nothing>()
class B<T>(val array: Array<T>)
fun <T> bar() = B<Array<T>>(arrayOf())
fun <T> bar() = B<Array<T>>(<!TYPE_PARAMETER_AS_REIFIED_ARRAY!>arrayOf<!>())
fun test7() = <!UNSUPPORTED!>bar<!><Nothing>()
@@ -1,17 +1,18 @@
// !USE_EXPERIMENTAL: kotlin.ExperimentalStdlibApi
// !LANGUAGE: +ProhibitNonReifiedArraysAsReifiedTypeArguments
import kotlin.reflect.typeOf
inline fun <X, reified Y, Z : Y> test1() {
<!UNSUPPORTED!>typeOf<!><<!TYPE_PARAMETER_AS_REIFIED!>X<!>>()
<!UNSUPPORTED!>typeOf<!><List<X>>()
<!UNSUPPORTED!>typeOf<!><Array<X?>>()
<!UNSUPPORTED!>typeOf<!><<!TYPE_PARAMETER_AS_REIFIED_ARRAY!>Array<X?><!>>()
typeOf<Y>()
<!UNSUPPORTED!>typeOf<!><<!TYPE_PARAMETER_AS_REIFIED!>Z<!>>()
<!UNSUPPORTED!>typeOf<!><List<Z>?>()
<!UNSUPPORTED!>typeOf<!><Array<Z>>()
<!UNSUPPORTED!>typeOf<!><<!TYPE_PARAMETER_AS_REIFIED_ARRAY!>Array<Z><!>>()
}
@@ -19,7 +20,7 @@ class Test2<W> {
fun test2() {
<!UNSUPPORTED!>typeOf<!><<!TYPE_PARAMETER_AS_REIFIED!>W<!>>()
<!UNSUPPORTED!>typeOf<!><List<W?>>()
<!UNSUPPORTED!>typeOf<!><Array<W>>()
<!UNSUPPORTED!>typeOf<!><<!TYPE_PARAMETER_AS_REIFIED_ARRAY!>Array<W><!>>()
}
}