[FIR] Don't miss non-const annotation args

This code with `b()` crashes the JVM
backend.

^KT-59822 Fixed
^KT-59874
This commit is contained in:
Nikolay Lunyak
2023-10-30 11:42:47 +02:00
committed by Space Team
parent 5a1a23afac
commit c656a83a02
13 changed files with 52 additions and 40 deletions
@@ -0,0 +1,5 @@
// Properties can be recursively annotated
annotation class ann(val x: Int)
class My {
@ann(<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>x<!>) val x: Int = 1
}
@@ -1,6 +1,5 @@
// FIR_IDENTICAL
// Properties can be recursively annotated
annotation class ann(val x: Int)
class My {
@ann(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>x<!>) val x: Int = 1
}
}
@@ -4,7 +4,7 @@ annotation class Anno(val number: Int)
fun topLevelFun() {
class LocalClass {
@Anno(<!TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>function(42)<!>)
fun function(@Anno(<!TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>function(24)<!>) param: Int = <!TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>function(0)<!>) = 1
@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST, TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>function(42)<!>)
fun function(@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST, TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>function(24)<!>) param: Int = <!TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>function(0)<!>) = 1
}
}
@@ -6,6 +6,6 @@ annotation class Anno(val number: Int)
fun topLevelFun() {
class LocalClass {
fun function(param: @Anno(<!TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>function(42)<!>) Int) = 1
fun function(param: @Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST, TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>function(42)<!>) Int) = 1
}
}
@@ -1,15 +0,0 @@
package myPack
annotation class Anno(val number: String)
fun topLevelFun() {
class LocalClass {
@Anno(variableToResolve)
@field:Anno(variableToResolve)
var variableToResolve = "${42}"
@Anno(variableToResolve)
get() = field + "str"
@Anno(variableToResolve)
set(@Anno(variableToResolve) value) = Unit
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
package myPack
annotation class Anno(val number: String)
@@ -4,11 +4,11 @@ annotation class Anno(val number: Int)
fun topLevel() {
class LocalClass {
@Anno(<!TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>prop<!>)
@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST, TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>prop<!>)
var prop
@Anno(<!TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>prop<!>)
@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST, TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>prop<!>)
get() = 22
@Anno(prop)
set(@Anno(prop) value) = Unit
@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>prop<!>)
set(@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>prop<!>) value) = Unit
}
}
@@ -4,6 +4,6 @@ annotation class Anno(val number: Int)
fun topLevelFun() {
class LocalClass {
fun @receiver:Anno(<!TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>42.function()<!>) Int.function() = 1
fun @receiver:Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST, TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>42.function()<!>) Int.function() = 1
}
}
@@ -6,6 +6,6 @@ annotation class Anno(val number: Int)
fun topLevelFun() {
class LocalClass {
fun <@Anno(<!TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>function<String>()<!>) T> function() = 1
fun <@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST, TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>function<String>()<!>) T> function() = 1
}
}
@@ -23,8 +23,8 @@ class A
Companion.CONST,
Nested.CONST,
Interface.CONST,
<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>a<!>,
b()
<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>a<!>,
<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>b()<!>
)
constructor() {
@@ -36,8 +36,8 @@ constructor() {
Companion.CONST,
Nested.CONST,
Interface.CONST,
<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>a<!>,
b()
<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>a<!>,
<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>b()<!>
)
constructor(dummy: Int) : this()