Mads Ager
8dee3c1ca0
[JVM] Do not unbox when local variable initialized with null.
...
This is already the case for straightline code such as
```
inline fun <R> f(size: Int, block: () -> R): R {
var result: R
result = block()
return result
}
```
However, if the local variable introduction happens at a merge
point as in the following example, we allow the unboxing but
only do it halfway. The initialization of the local is still
done with a null value.
```
inline fun <R> f(size: Int, block: () -> R): R {
var result: R
while (true) {
result = block()
if (size == 0) break
}
return result
}
```
This change disallows unboxing for this move complicated
case as well by bailing out if a local use is with a
TaintedBoxedValue (merge of Object and Integer).
^KT-48394 Fixed.
2021-08-26 15:14:02 +03:00
Ilya Goncharov
0ca9e08c11
[JS IR] Add test with fail with vararg call in suspend
...
^KT-48344 fixed
2021-08-26 08:52:34 +00:00
Ilya Goncharov
4179d078ca
[JS IR] Add test on call of suspend super type
2021-08-26 08:50:14 +00:00
Dmitriy Novozhilov
0924216ed2
[FIR] Distinguish stub types for builder inference and for subtyping
...
^KT-48110 Fixed
2021-08-26 10:08:52 +03:00
Ivan Kochurkin
34cc7e5199
[FIR] Fix resolving to star import member instead of builtin (^KT-48157 Fixed)
2021-08-25 21:53:23 +00:00
Dmitry Petrov
c30b23ed01
JVM_IR fixes after review
2021-08-24 18:56:22 +03:00
Dmitry Petrov
f4a1e27124
JVM optimize unneeded temporary vals
2021-08-24 18:56:20 +03:00
Dmitry Petrov
d8f6d82411
JVM don't optimize temporary vals in old back-end
2021-08-24 18:56:19 +03:00
Dmitry Petrov
568958492a
JVM_IR optimize temporary vals initialized with other vals
2021-08-24 18:56:18 +03:00
Dmitry Petrov
939f25333e
JVM update testData
2021-08-24 18:56:17 +03:00
Dmitry Petrov
7e943ab757
JVM don't optimize out starting ASTORE of TCB handler
2021-08-24 18:56:14 +03:00
Dmitry Petrov
dcbc2ea2b3
JVM infer temporary vals from bytecode
2021-08-24 18:56:13 +03:00
Dmitry Petrov
041773fd25
JVM optimize out temporary variables in bytecode
2021-08-24 18:56:11 +03:00
Alexander Udalov
8d4f26cf84
IR: use inlineClassRepresentation in getInlineClassUnderlyingType
...
Looking for the primary constructor manually doesn't work if it's
private in the other module on JVM, because private declarations are
skipped in IrLazyClass.
2021-08-24 12:28:31 +02:00
Mikhail Glukhikh
bbb76aae3f
Provide more precise check for ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED
...
#KT-47542 Fixed
2021-08-24 12:32:30 +03:00
Steven Schäfer
f05f9882ab
IR: Handle annotation instantiations in constructor calls
2021-08-23 23:04:35 +02:00
Steven Schäfer
6d518c8e57
JVM IR: Mark annotation implementation classes as anonymous
...
And add tests to ensure that annotation implementation classes are
handled correctly in jvm-abi-gen.
2021-08-23 18:25:33 +02:00
Steven Schäfer
1b5214a2dc
JVM: Fix usage of ClassBuilder API in AnonymousObjectTransformer
2021-08-23 18:25:33 +02:00
Steven Schäfer
c9b0cc5b32
JVM: Only produce inline SAM wrappers in public inline scope
2021-08-23 18:25:33 +02:00
Dmitriy Novozhilov
40614507d3
[FE 1.0] Report warning about new IL operator resolve in initializers and default values
...
^KT-48361 Fixed
2021-08-23 16:20:41 +03:00
pyos
a15a5aa429
JVM_IR: generate instance fields even when reification is needed
...
The inliner supports that, we just need to generate the reification
markers on GETFIELD to instance fields.
2021-08-23 14:27:51 +02:00
Ilmir Usmanov
c01c356817
Do not extend LVT ranges during inplace arguments inlining
...
Otherwise, R8 does not transform kotlin-reflect, failing bootstrap.
Leaving end label the same is safe, since we do not remove labels during
transformation.
2021-08-23 11:51:30 +00:00
Dmitriy Novozhilov
27ac7dbf9a
[Test] Unmute passing codegen tests
2021-08-23 14:29:12 +03:00
Ilya Chernikov
47ea5330ff
IR: Allow references to script constructor in module
...
aso add test checking (somewhat confusing) semantic of
script nested classes.
2021-08-23 12:49:45 +03:00
Ilya Chernikov
e7cbc9a0fb
IR: Process script with LDL as if it is a function body
...
#KT-46645 fixed
#KT-48025 fixed
2021-08-23 12:49:43 +03:00
Dmitry Petrov
a3bb9dde45
JVM_IR KT-48295 don't upcast field receiver with super qualifier
2021-08-20 12:27:43 +03:00
pyos
858bd47c45
JVM_IR: use substituted return type when lowering inline references
...
#KT-48267 Fixed
2021-08-20 06:41:03 +02:00
Victor Petukhov
a1519b7b4e
Be able to infer a type variable based on several builder inference lambdas
...
^KT-48329 Fixed
2021-08-20 01:28:12 +03:00
Victor Petukhov
bf1e68a53f
Resolve calls using the builder inference despite the presence of the annotation if there are uninferred type variables
...
^KT-48194 Fixed
2021-08-20 01:28:11 +03:00
Victor Petukhov
55811c8851
Don't use builder inference if possible
...
The builder inference is running only if there are still uninferred type variables
^KT-48193 Fixed
2021-08-20 01:28:10 +03:00
Ilmir Usmanov
b5fa129540
Loosen tail-call optimization check for functions returning Unit
...
Do not check, that all Unit predecessors are POPs. This is safe for the
same reason, as it is safe to allow some of ARETURN sources not be
suspension point results.
To elaborate, before Unit, the stack is empty. This is because if there
are multiple paths to Unit and at least one of them comes from POP after
suspension point (we are interested in this case only - otherwise, the
call is not tail-call), in path from said POP the stack is empty, since
after suspension point the stack contains only one element. Thus, the
stack in other paths leading to Unit has to be empty, otherwise, merge
operation is not possible and ASM will report error during analysis.
Since the stack is empty in all paths, we can hoist Unit and following
ARETURN to predecessors, effectively turning path from suspension point
to tail-call.
2021-08-19 16:05:21 +00:00
Andrey Zinovyev
894a446585
[FIR] Add missing messages for jvm diagnostics and fix some tests
2021-08-19 15:25:51 +03:00
pyos
d3de0109ca
Add tests for KT-48180
2021-08-18 18:39:33 +02:00
Mikhael Bogdanov
8ab546ba51
[FIR]: Pass special origins for local functions (named and anonymous)
2021-08-18 09:58:27 +00:00
Mikhael Bogdanov
a5e59e09ee
Copy methods for lambdas to DefaultImpls without receiver transformation
...
#KT-48230 Fixed
2021-08-18 09:58:27 +00:00
pyos
6d7eb2bd21
Add test for KT-48230
2021-08-18 09:58:27 +00:00
Denis.Zharkov
a8077aebb0
FIR: Ignore suspicious test on StrictJavaNullabilityAssertions
...
^KT-48302 Open
2021-08-17 21:38:01 +03:00
Denis.Zharkov
a0553f4dfd
FIR: Do not build synthetic property named with first capital character
2021-08-17 21:38:01 +03:00
Denis.Zharkov
c3a327e118
FIR: Fix ambiguity on Int2IntMap in IC
2021-08-17 21:38:01 +03:00
Ilmir Usmanov
ebb340fe68
Do not just merge consequent LVT ranges, but also extend them
2021-08-13 23:12:10 +03:00
Dmitry Petrov
f8503ba1bf
JVM_IR KT-47984 minor avoid using @Deprecated function in tests
2021-08-13 18:08:55 +03:00
Dmitry Petrov
15c41b2610
JVM_IR KT-47984 add test for argument reordering
2021-08-13 18:08:52 +03:00
Dmitry Petrov
edd2ca775b
JVM_IR KT-47984 use stack size calculator from ASM
2021-08-13 18:08:52 +03:00
Dmitry Petrov
5096e8c5c4
JVM_IR KT-47984 transform inplace arguments before inlining
2021-08-13 18:08:49 +03:00
Dmitry Petrov
7a99f9ff2e
JVM_IR KT-47984 allow noinline functional inplace args
2021-08-13 18:08:48 +03:00
Dmitry Petrov
9be941def2
JVM_IR KT-47984 don't move inplace arguments with suspension points
2021-08-13 18:08:47 +03:00
Dmitry Petrov
9acdcc7590
JVM_IR KT-47984 minor cleanup
2021-08-13 18:08:47 +03:00
Dmitry Petrov
b01c13a4df
JVM_IR KT-47984 inplace arguments inlining for @InlineOnly functions
2021-08-13 18:08:44 +03:00
Ivan Kylchik
2f2e608502
Expand the possibilities of object's interpretation
...
It is possible to create object in interpreter even if its
receiver symbol came from function parameter instead of object's class.
#KT-48174 Fixed
2021-08-13 16:18:36 +03:00
Ivan Kylchik
b85a796492
Support interpretation for floorDiv and mod functions
2021-08-13 16:18:28 +03:00