Error on 'if' without an 'else' branch when used as an expression
This commit is contained in:
@@ -1,12 +0,0 @@
|
||||
fun box(): String {
|
||||
if (true);
|
||||
if (false);
|
||||
val iftrue = if (true);
|
||||
val iffalse = if (false);
|
||||
|
||||
var state = 0
|
||||
val k = if (state++==1);
|
||||
if (state != 1) return "Fail: $state"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
fun box(): String {
|
||||
val a = if(true) {
|
||||
}
|
||||
return if (a.toString() == "kotlin.Unit") "OK" else "fail"
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
fun foo(condition: Boolean): String {
|
||||
val u = if (condition) {
|
||||
"OK"
|
||||
} else {
|
||||
}
|
||||
return u.toString()
|
||||
}
|
||||
|
||||
fun box() = foo(true)
|
||||
+7
-2
@@ -1,5 +1,10 @@
|
||||
fun unsupportedEx() = if (true) throw UnsupportedOperationException()
|
||||
fun runtimeEx() = if (true) throw RuntimeException()
|
||||
fun unsupportedEx() {
|
||||
if (true) throw UnsupportedOperationException()
|
||||
}
|
||||
|
||||
fun runtimeEx() {
|
||||
if (true) throw RuntimeException()
|
||||
}
|
||||
|
||||
fun test1() : String {
|
||||
var s = "";
|
||||
|
||||
+7
-2
@@ -1,5 +1,10 @@
|
||||
fun unsupportedEx() = if (true) throw UnsupportedOperationException()
|
||||
fun runtimeEx() = if (true) throw RuntimeException()
|
||||
fun unsupportedEx() {
|
||||
if (true) throw UnsupportedOperationException()
|
||||
}
|
||||
|
||||
fun runtimeEx() {
|
||||
if (true) throw RuntimeException()
|
||||
}
|
||||
|
||||
fun test1WithFinally() : String {
|
||||
var s = "";
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
// This test checks that our bytecode is consistent with javac bytecode
|
||||
|
||||
fun _assert(condition: Boolean): Unit =
|
||||
fun _assert(condition: Boolean) {
|
||||
if (!condition) throw AssertionError("Fail")
|
||||
}
|
||||
|
||||
fun _assertFalse(condition: Boolean) = _assert(!condition)
|
||||
|
||||
|
||||
+2
-2
@@ -4,9 +4,9 @@ class A (val p: String, p1: String, p2: String) {
|
||||
|
||||
var cond2: String = ""
|
||||
|
||||
val prop1 = if (cond1(p)) p1
|
||||
val prop1 = if (cond1(p)) p1 else null
|
||||
|
||||
val prop2 = if (cond2(p)) else;
|
||||
val prop2 = if (cond2(p)) p2 else null;
|
||||
|
||||
|
||||
fun cond1(p: String): Boolean {
|
||||
|
||||
@@ -6,9 +6,9 @@ class A (val p: String, p1: String, p2: String) {
|
||||
|
||||
val prop: String = if (p == "test") p1 else p2
|
||||
|
||||
val prop1 = if (cond1(p)) p1
|
||||
val prop1 = if (cond1(p)) p1 else false
|
||||
|
||||
val prop2 = if (cond2(p)) else;
|
||||
val prop2 = if (cond2(p)) true else false
|
||||
|
||||
fun cond1(p: String): Boolean {
|
||||
cond1 = "cond1"
|
||||
|
||||
@@ -69,10 +69,10 @@ fun blockReturnValueTypeMatch1() : Int {
|
||||
return if (1 > 2) <!CONSTANT_EXPECTED_TYPE_MISMATCH!>1.0<!> else <!CONSTANT_EXPECTED_TYPE_MISMATCH!>2.0<!>
|
||||
}
|
||||
fun blockReturnValueTypeMatch2() : Int {
|
||||
return <!TYPE_MISMATCH!>if (1 > 2) 1<!>
|
||||
return <!TYPE_MISMATCH, INVALID_IF_AS_EXPRESSION!>if (1 > 2) 1<!>
|
||||
}
|
||||
fun blockReturnValueTypeMatch3() : Int {
|
||||
return <!TYPE_MISMATCH!>if (1 > 2) else 1<!>
|
||||
return <!TYPE_MISMATCH, INVALID_IF_AS_EXPRESSION!>if (1 > 2) else 1<!>
|
||||
}
|
||||
fun blockReturnValueTypeMatch4() : Int {
|
||||
if (1 > 2)
|
||||
@@ -105,7 +105,7 @@ fun blockReturnValueTypeMatch9() : Int {
|
||||
<!UNUSED_EXPRESSION!>1.0<!>
|
||||
<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
|
||||
fun blockReturnValueTypeMatch10() : Int {
|
||||
return <!TYPE_MISMATCH!>if (1 > 2)
|
||||
return <!TYPE_MISMATCH, INVALID_IF_AS_EXPRESSION!>if (1 > 2)
|
||||
1<!>
|
||||
}
|
||||
fun blockReturnValueTypeMatch11() : Int {
|
||||
|
||||
@@ -4,13 +4,13 @@ fun test() {
|
||||
if (false);
|
||||
if (true);
|
||||
|
||||
val x = <!IMPLICIT_CAST_TO_UNIT_OR_ANY!>if (false)<!>;
|
||||
val x = <!INVALID_IF_AS_EXPRESSION!>if (false)<!>;
|
||||
foo(x)
|
||||
|
||||
val y: Unit = if (false);
|
||||
val y: Unit = <!INVALID_IF_AS_EXPRESSION!>if (false)<!>;
|
||||
foo(y)
|
||||
|
||||
foo({if (1==1);}())
|
||||
|
||||
return if (true);
|
||||
return <!INVALID_IF_AS_EXPRESSION!>if (true)<!>;
|
||||
}
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
||||
|
||||
fun example() {
|
||||
val a = if (true) true else false
|
||||
val b = <!INVALID_IF_AS_EXPRESSION!>if (true) else false<!>
|
||||
val c = <!INVALID_IF_AS_EXPRESSION!>if (true) true<!>
|
||||
val d = <!INVALID_IF_AS_EXPRESSION!>if (true) true else<!>;
|
||||
val e = <!IMPLICIT_CAST_TO_UNIT_OR_ANY!>if (true) {} else false<!>
|
||||
val f = <!IMPLICIT_CAST_TO_UNIT_OR_ANY!>if (true) true else {}<!>
|
||||
|
||||
{
|
||||
if (true) <!UNUSED_EXPRESSION!>true<!>
|
||||
}();
|
||||
|
||||
{
|
||||
if (true) true else false
|
||||
}();
|
||||
|
||||
{
|
||||
if (true) {} else false
|
||||
}();
|
||||
|
||||
|
||||
{
|
||||
if (true) true else {}
|
||||
}()
|
||||
|
||||
fun t(): Boolean {
|
||||
return <!TYPE_MISMATCH, INVALID_IF_AS_EXPRESSION!>if (true) true<!>
|
||||
}
|
||||
|
||||
return if (true) <!CONSTANT_EXPECTED_TYPE_MISMATCH!>true<!> else {}
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package
|
||||
|
||||
public fun example(): kotlin.Unit
|
||||
@@ -7,5 +7,5 @@ fun test(a: Boolean, b: Boolean): Int {
|
||||
<!TYPE_MISMATCH!>if (b) {
|
||||
3
|
||||
}<!>
|
||||
} // no error, but must be
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -34,7 +34,7 @@ fun foo() {
|
||||
fun box() : Int {
|
||||
val d = 2
|
||||
var z = 0
|
||||
when(d) {
|
||||
when(d) {
|
||||
5, 3 -> z++
|
||||
else -> z = -1000
|
||||
}
|
||||
@@ -100,10 +100,10 @@ fun testImplicitCoercion() {
|
||||
else -> <!UNUSED_CHANGED_VALUE!>z--<!>
|
||||
}<!>
|
||||
|
||||
var <!UNUSED_VARIABLE!>iff<!> = <!IMPLICIT_CAST_TO_UNIT_OR_ANY!>if (true) {
|
||||
var <!UNUSED_VARIABLE!>iff<!> = <!INVALID_IF_AS_EXPRESSION!>if (true) {
|
||||
<!UNUSED_VALUE!>z =<!> 34
|
||||
}<!>
|
||||
val <!UNUSED_VARIABLE!>g<!> = <!IMPLICIT_CAST_TO_UNIT_OR_ANY!>if (true) 4<!>
|
||||
val <!UNUSED_VARIABLE!>g<!> = <!INVALID_IF_AS_EXPRESSION!>if (true) 4<!>
|
||||
val <!UNUSED_VARIABLE!>h<!> = <!IMPLICIT_CAST_TO_UNIT_OR_ANY!>if (false) 4 else {}<!>
|
||||
|
||||
bar(if (true) {
|
||||
|
||||
+3
-3
@@ -18,7 +18,7 @@ fun f3(s: Number?) {
|
||||
}
|
||||
|
||||
fun f4(s: Int?) {
|
||||
var u = <!IMPLICIT_CAST_TO_UNIT_OR_ANY!>if (s!! == 42)<!>;
|
||||
if (u == Unit) u = if (s == 239);
|
||||
var u = <!INVALID_IF_AS_EXPRESSION!>if (s!! == 42)<!>;
|
||||
if (u == Unit) u = <!INVALID_IF_AS_EXPRESSION!>if (s == 239)<!>;
|
||||
return u
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
val flag = true
|
||||
|
||||
// type of a was checked by txt
|
||||
val a/*: () -> Any*/ = l@ { // commonSupertype(Int, Unit) = Any
|
||||
val a/*: () -> Any*/ = l@ {
|
||||
if (flag) return@l 4
|
||||
}
|
||||
|
||||
|
||||
+1
-5
@@ -2,10 +2,6 @@ fun foo() {
|
||||
if (0 < 1) {
|
||||
return
|
||||
}
|
||||
|
||||
val u: Unit = if (0 < 1) {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 2 3 6 7 6 9
|
||||
// 2 3 5
|
||||
|
||||
Reference in New Issue
Block a user