[CFA] Mark arguments of all annotation calls as USED_AS_EXPRESSION
Also revert hacky fix of KT-37294 introduced in 80caa063b
#KT-37447 Fixed
This commit is contained in:
+104
@@ -0,0 +1,104 @@
|
||||
== Test_1 ==
|
||||
class Test_1 {
|
||||
@Target(AnnotationTarget.VALUE_PARAMETER)
|
||||
annotation class Range(val min: Long = 0)
|
||||
|
||||
fun foo(@Range(min = -90L) x: Int) = Unit // KtPrefixExpression isn't marked as BindingContext.USED_AS_EXPRESSION
|
||||
}
|
||||
---------------------
|
||||
L0:
|
||||
1 <START>
|
||||
L1:
|
||||
<END> NEXT:[<SINK>]
|
||||
error:
|
||||
<ERROR> PREV:[]
|
||||
sink:
|
||||
<SINK> PREV:[<ERROR>, <END>]
|
||||
=====================
|
||||
== foo ==
|
||||
fun foo(@Range(min = -90L) x: Int) = Unit // KtPrefixExpression isn't marked as BindingContext.USED_AS_EXPRESSION
|
||||
---------------------
|
||||
L0:
|
||||
1 <START>
|
||||
v(@Range(min = -90L) x: Int)
|
||||
magic[FAKE_INITIALIZER](@Range(min = -90L) x: Int) -> <v0>
|
||||
w(x|<v0>)
|
||||
r(Unit) -> <v1>
|
||||
ret(*|<v1>) L1
|
||||
L1:
|
||||
<END> NEXT:[<SINK>]
|
||||
error:
|
||||
<ERROR> PREV:[]
|
||||
sink:
|
||||
<SINK> PREV:[<ERROR>, <END>]
|
||||
=====================
|
||||
== Test_2 ==
|
||||
class Test_2 {
|
||||
@Target(AnnotationTarget.FUNCTION)
|
||||
annotation class Range(val min: Long = 0)
|
||||
|
||||
@Range(min = -90L) // KtPrefixExpression is marked as BindingContext.USED_AS_EXPRESSION
|
||||
fun foo(x: Int) = Unit
|
||||
}
|
||||
---------------------
|
||||
L0:
|
||||
1 <START>
|
||||
L1:
|
||||
<END> NEXT:[<SINK>]
|
||||
error:
|
||||
<ERROR> PREV:[]
|
||||
sink:
|
||||
<SINK> PREV:[<ERROR>, <END>]
|
||||
=====================
|
||||
== foo ==
|
||||
@Range(min = -90L) // KtPrefixExpression is marked as BindingContext.USED_AS_EXPRESSION
|
||||
fun foo(x: Int) = Unit
|
||||
---------------------
|
||||
L0:
|
||||
1 <START>
|
||||
v(x: Int)
|
||||
magic[FAKE_INITIALIZER](x: Int) -> <v0>
|
||||
w(x|<v0>)
|
||||
r(Unit) -> <v1>
|
||||
ret(*|<v1>) L1
|
||||
L1:
|
||||
<END> NEXT:[<SINK>]
|
||||
error:
|
||||
<ERROR> PREV:[]
|
||||
sink:
|
||||
<SINK> PREV:[<ERROR>, <END>]
|
||||
=====================
|
||||
== Test_3 ==
|
||||
class Test_3 {
|
||||
@Target(AnnotationTarget.EXPRESSION)
|
||||
annotation class Range(val min: Long = 0)
|
||||
|
||||
fun foo(x: Int) = @Range(min = -90L) Unit
|
||||
}
|
||||
---------------------
|
||||
L0:
|
||||
1 <START>
|
||||
L1:
|
||||
<END> NEXT:[<SINK>]
|
||||
error:
|
||||
<ERROR> PREV:[]
|
||||
sink:
|
||||
<SINK> PREV:[<ERROR>, <END>]
|
||||
=====================
|
||||
== foo ==
|
||||
fun foo(x: Int) = @Range(min = -90L) Unit
|
||||
---------------------
|
||||
L0:
|
||||
1 <START>
|
||||
v(x: Int)
|
||||
magic[FAKE_INITIALIZER](x: Int) -> <v0>
|
||||
w(x|<v0>)
|
||||
r(Unit) -> <v1>
|
||||
ret(*|<v1>) L1
|
||||
L1:
|
||||
<END> NEXT:[<SINK>]
|
||||
error:
|
||||
<ERROR> PREV:[]
|
||||
sink:
|
||||
<SINK> PREV:[<ERROR>, <END>]
|
||||
=====================
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
// ISSUE: KT-37447
|
||||
|
||||
class Test_1 {
|
||||
@Target(AnnotationTarget.VALUE_PARAMETER)
|
||||
annotation class Range(val min: Long = 0)
|
||||
|
||||
fun foo(@Range(min = -90L) x: Int) = Unit // KtPrefixExpression isn't marked as BindingContext.USED_AS_EXPRESSION
|
||||
}
|
||||
|
||||
class Test_2 {
|
||||
@Target(AnnotationTarget.FUNCTION)
|
||||
annotation class Range(val min: Long = 0)
|
||||
|
||||
@Range(min = -90L) // KtPrefixExpression is marked as BindingContext.USED_AS_EXPRESSION
|
||||
fun foo(x: Int) = Unit
|
||||
}
|
||||
|
||||
class Test_3 {
|
||||
@Target(AnnotationTarget.EXPRESSION)
|
||||
annotation class Range(val min: Long = 0)
|
||||
|
||||
fun foo(x: Int) = @Range(min = -90L) Unit
|
||||
}
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
== Test_1 ==
|
||||
class Test_1 {
|
||||
@Target(AnnotationTarget.VALUE_PARAMETER)
|
||||
annotation class Range(val min: Long = 0)
|
||||
|
||||
fun foo(@Range(min = -90L) x: Int) = Unit // KtPrefixExpression isn't marked as BindingContext.USED_AS_EXPRESSION
|
||||
}
|
||||
---------------------
|
||||
=====================
|
||||
== foo ==
|
||||
fun foo(@Range(min = -90L) x: Int) = Unit // KtPrefixExpression isn't marked as BindingContext.USED_AS_EXPRESSION
|
||||
---------------------
|
||||
<v0>: Int NEW: magic[FAKE_INITIALIZER](@Range(min = -90L) x: Int) -> <v0>
|
||||
Unit <v1>: Unit NEW: r(Unit) -> <v1>
|
||||
=====================
|
||||
== Test_2 ==
|
||||
class Test_2 {
|
||||
@Target(AnnotationTarget.FUNCTION)
|
||||
annotation class Range(val min: Long = 0)
|
||||
|
||||
@Range(min = -90L) // KtPrefixExpression is marked as BindingContext.USED_AS_EXPRESSION
|
||||
fun foo(x: Int) = Unit
|
||||
}
|
||||
---------------------
|
||||
=====================
|
||||
== foo ==
|
||||
@Range(min = -90L) // KtPrefixExpression is marked as BindingContext.USED_AS_EXPRESSION
|
||||
fun foo(x: Int) = Unit
|
||||
---------------------
|
||||
<v0>: Int NEW: magic[FAKE_INITIALIZER](x: Int) -> <v0>
|
||||
Unit <v1>: Unit NEW: r(Unit) -> <v1>
|
||||
=====================
|
||||
== Test_3 ==
|
||||
class Test_3 {
|
||||
@Target(AnnotationTarget.EXPRESSION)
|
||||
annotation class Range(val min: Long = 0)
|
||||
|
||||
fun foo(x: Int) = @Range(min = -90L) Unit
|
||||
}
|
||||
---------------------
|
||||
=====================
|
||||
== foo ==
|
||||
fun foo(x: Int) = @Range(min = -90L) Unit
|
||||
---------------------
|
||||
<v0>: Int NEW: magic[FAKE_INITIALIZER](x: Int) -> <v0>
|
||||
Unit <v1>: Unit NEW: r(Unit) -> <v1>
|
||||
@Range(min = -90L) Unit <v1>: Unit COPY
|
||||
=====================
|
||||
Reference in New Issue
Block a user