FIR: support CONDITION_TYPE_MISMATCH diagnostic
We report CONDITION_TYPE_MISMATCH on - loop conditions - when branch conditions - binary logic arguments
This commit is contained in:
@@ -26,7 +26,7 @@ fun f(): Unit {
|
||||
<!ARGUMENT_TYPE_MISMATCH!>x<!> in 1..2
|
||||
|
||||
val y : Boolean? = true
|
||||
false || y
|
||||
y && true
|
||||
y && 1
|
||||
false || <!CONDITION_TYPE_MISMATCH!>y<!>
|
||||
<!CONDITION_TYPE_MISMATCH!>y<!> && true
|
||||
<!CONDITION_TYPE_MISMATCH!>y<!> && <!CONDITION_TYPE_MISMATCH!>1<!>
|
||||
}
|
||||
|
||||
@@ -82,9 +82,9 @@ fun test(notRange1: NotRange1, notRange2: NotRange2, notRange3: NotRange3, notRa
|
||||
for (i in <!HAS_NEXT_MISSING, NEXT_MISSING!>notRange2<!>);
|
||||
for (i in <!NEXT_MISSING!>notRange3<!>);
|
||||
for (i in <!HAS_NEXT_MISSING!>notRange4<!>);
|
||||
for (i in notRange5);
|
||||
<!CONDITION_TYPE_MISMATCH!>for (i in notRange5)<!>;
|
||||
for (i in notRange6);
|
||||
for (i in notRange7);
|
||||
<!CONDITION_TYPE_MISMATCH!>for (i in notRange7)<!>;
|
||||
for (i in <!HAS_NEXT_MISSING!>notRange8<!>);
|
||||
for (i in range0);
|
||||
for (i in range1);
|
||||
|
||||
+4
-4
@@ -1,7 +1,7 @@
|
||||
// !WITH_NEW_INFERENCE
|
||||
fun foo1(b: Boolean, c: Int) {
|
||||
if (b && c) {}
|
||||
if (b || c) {}
|
||||
if (c && b) {}
|
||||
if (c || b) {}
|
||||
if (b && <!CONDITION_TYPE_MISMATCH!>c<!>) {}
|
||||
if (b || <!CONDITION_TYPE_MISMATCH!>c<!>) {}
|
||||
if (<!CONDITION_TYPE_MISMATCH!>c<!> && b) {}
|
||||
if (<!CONDITION_TYPE_MISMATCH!>c<!> || b) {}
|
||||
}
|
||||
|
||||
@@ -7,10 +7,10 @@ fun foo() =
|
||||
when {
|
||||
cond1() -> 12
|
||||
cond2() -> 2
|
||||
4 -> 34
|
||||
Pair(1, 2) -> 3
|
||||
<!CONDITION_TYPE_MISMATCH!>4<!> -> 34
|
||||
<!CONDITION_TYPE_MISMATCH!>Pair(1, 2)<!> -> 3
|
||||
in 1..10 -> 34
|
||||
4 -> 38
|
||||
<!CONDITION_TYPE_MISMATCH!>4<!> -> 38
|
||||
is Int -> 33
|
||||
else -> 34
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_VARIABLE -NOTHING_TO_INLINE -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE -UNUSED_VALUE -TYPE_MISMATCH
|
||||
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_VARIABLE -NOTHING_TO_INLINE -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE -UNUSED_VALUE -TYPE_MISMATCH -CONDITION_TYPE_MISMATCH
|
||||
|
||||
inline fun inlineFunWithInvoke(s: (p: Int) -> Unit, ext: Int.(p: Int) -> Unit) {
|
||||
<!USAGE_IS_NOT_INLINABLE!>s<!> && <!USAGE_IS_NOT_INLINABLE!>ext<!>
|
||||
|
||||
+5
-5
@@ -23,23 +23,23 @@ fun test() {
|
||||
val platformJ = J.staticJ
|
||||
|
||||
if (platformNN) {}
|
||||
if (platformN) {}
|
||||
if (<!CONDITION_TYPE_MISMATCH!>platformN<!>) {}
|
||||
if (platformJ) {}
|
||||
|
||||
while (platformNN) {}
|
||||
while (platformN) {}
|
||||
while (<!CONDITION_TYPE_MISMATCH!>platformN<!>) {}
|
||||
while (platformJ) {}
|
||||
|
||||
do {} while (platformNN)
|
||||
do {} while (platformN)
|
||||
do {} while (<!CONDITION_TYPE_MISMATCH!>platformN<!>)
|
||||
do {} while (platformJ)
|
||||
|
||||
platformNN && false
|
||||
platformN && false
|
||||
<!CONDITION_TYPE_MISMATCH!>platformN<!> && false
|
||||
platformJ && false
|
||||
|
||||
platformNN || false
|
||||
platformN || false
|
||||
<!CONDITION_TYPE_MISMATCH!>platformN<!> || false
|
||||
platformJ || false
|
||||
|
||||
!platformNN
|
||||
|
||||
Vendored
+1
-1
@@ -12,7 +12,7 @@ fun isString(x: Any?): Boolean {
|
||||
}
|
||||
|
||||
fun incorrectPartDoesntMatter(x: Any?) {
|
||||
if (isString(x) && 1) {
|
||||
if (isString(x) && <!CONDITION_TYPE_MISMATCH!>1<!>) {
|
||||
x.length
|
||||
}
|
||||
else {
|
||||
|
||||
Reference in New Issue
Block a user