Propagate control flow to bound double colon expressions

"Unused expression" should be reported on unused double colon expressions, this
is postponed

 #KT-12551 Open
This commit is contained in:
Alexander Udalov
2016-05-30 13:35:00 +03:00
parent 0ce6bd9999
commit e2d6e0cbab
8 changed files with 55 additions and 9 deletions
@@ -18,12 +18,12 @@ fun foo(): Any = ::bar
L0:
1 <START>
mark(::bar)
magic[CALLABLE_REFERENCE](::bar) -> <v0>
magic[UNBOUND_CALLABLE_REFERENCE](::bar) -> <v0>
ret(*|<v0>) L1
L1:
<END> NEXT:[<SINK>]
<END> NEXT:[<SINK>]
error:
<ERROR> PREV:[]
<ERROR> PREV:[]
sink:
<SINK> PREV:[<ERROR>, <END>]
=====================
<SINK> PREV:[<ERROR>, <END>]
=====================
@@ -6,5 +6,5 @@ fun bar(): Int = 1
== foo ==
fun foo(): Any = ::bar
---------------------
::bar <v0>: {<: Any} NEW: magic[CALLABLE_REFERENCE](::bar) -> <v0>
::bar <v0>: {<: Any} NEW: magic[UNBOUND_CALLABLE_REFERENCE](::bar) -> <v0>
=====================
@@ -0,0 +1,23 @@
fun unusedExpression(s: String) {
// TODO: report UNUSED_EXPRESSION (KT-12551)
s::hashCode
s::class
}
fun noUnusedParameter(s: String): Int {
val f = s::hashCode
return f()
}
fun unreachableCode(): Int {
(if (true) return 1 else return 0)::toString
<!UNREACHABLE_CODE!>return 0<!>
}
fun unreachableCodeInLoop(): Int {
while (true) {
(break)::toString
<!UNREACHABLE_CODE!>return 1<!>
}
return 2
}
@@ -0,0 +1,6 @@
package
public fun noUnusedParameter(/*0*/ s: kotlin.String): kotlin.Int
public fun unreachableCode(): kotlin.Int
public fun unreachableCodeInLoop(): kotlin.Int
public fun unusedExpression(/*0*/ s: kotlin.String): kotlin.Unit
@@ -15,6 +15,6 @@ data class User(val surname: String)
fun foo() {
bar<String> {
<!UNUSED_EXPRESSION!><!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>User<!>::<!OVERLOAD_RESOLUTION_AMBIGUITY!>surname<!><!>
<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>User<!>::<!OVERLOAD_RESOLUTION_AMBIGUITY!>surname<!>
}
}