Commit Graph

7661 Commits

Author SHA1 Message Date
Mads Ager 1e444e0451 [JVM IR] Limit local variables in do-while conditions.
Locals introduced in the body of a do-while loop are not
necessarily live at the do-while condition. For example,
if there is a continue in the body before the declaration:

    do {
      if (shouldContinue(x))
        continue
      val y = 32  // not always defined in the condition
      doSomething(y)
    } while (x < 2)

For locals referenced in the condition such code is rejected
by the frontend because a local referenced in the condition
must be always defined when you get there.

However, locals that are not used in the condition were always
put in the local variable table. This leads to invalid locals
information which can trip of debuggers and other build tools
such as the D8 dexer.

This patch only puts in locals information for locals actually
referenced in the local variable table for the condition.

^Fixes KT-51754
2022-04-12 15:47:14 +02:00
Roman Golyshev 32fa2fc476 [FIR] Resolve receiver in qualified expressions with no selector
In qualified expression like `foo().`, selector expression is null.
Because of that the whole expression was marked as an error FIR
expression, and `foo()` part was not resolved at all (including
arguments and everything else).

This commit fixes the problem by providing receiver's FIR expression
as an underlying expression for error FIR expression. That way
it will be seen by all resolve transformers and will be successfully
resolved.

^KTIJ-21484 Fixed
2022-04-12 10:55:12 +00:00
pyos a07e21d913 JVM: streamline handling of tail-call suspend functions
Just see if every suspend call is followed only by safe instructions or
returns, then insert a suspension point check if there isn't a direct
return.

The first part of this is equivalent to the old implementation, just
refactored. The second part generates strictly more checks; see, for
example, the fixed test, in which the previous implementation failed to
insert a check before a CHECKCAST.

^KT-51818 Fixed
2022-04-11 17:00:26 +00:00
Ilmir Usmanov 6e30ce2763 FE: Make synchronized suspend functions and lambdas error in 1.8
#KT-27333 Fixed
2022-04-11 12:02:30 +00:00
Ilmir Usmanov f473998e8b FIR: Make 'suspend fun', where 'suspend' is not builtin error in 1.8
#KT-49264
2022-04-11 12:02:29 +00:00
Ilmir Usmanov f75a8109d2 FE 1.0: Make 'suspend fun', where 'suspend' is not builtin error in 1.8
#KT-49264 Fixed
2022-04-11 12:02:28 +00:00
Ilmir Usmanov 1e3f84402d Safely check for suspend function parent
The issue here is that the function can be in unlowered file, and
thus its parent package fragment and not class.

 #KT-49317 Fixed
2022-04-08 23:31:49 +02:00
Ivan Kochurkin 81b1ed9ad4 [FIR] Fix false positive RETURN_TYPE_MISMATCH in intellij ultimate 2022-04-07 21:03:08 +03:00
Dmitriy Novozhilov b79f5a445f [FIR] Use proper ReturnTypeCalculator inside FakeOverrideTypeCalculator 2022-04-07 12:18:49 +00:00
Dmitriy Novozhilov 6e2402620f [FIR] Fix collecting member candidates on receiver with smartcast
^KT-51460 Fixed
^KT-51827
2022-04-07 12:18:48 +00:00
Dmitriy Novozhilov 51bd0fd2db [FIR] Add ability to specify module name in modularized test
Use `fir.bench.filter.name` property to specify module name instead of
  module path regex
2022-04-07 12:18:48 +00:00
Ilmir Usmanov 1488790cd3 Replace recursion with a loop
#KT-51530 Fixed
2022-04-07 01:08:22 +00:00
Denis.Zharkov 6937e08b9c FIR: Remove effectively incorrect code from Candidate.getReceiverType 2022-04-06 16:05:42 +00:00
Denis.Zharkov 82b6fdf97e FIR: Serialize type attributes for non-type-ref types, too 2022-04-06 16:05:41 +00:00
Denis.Zharkov 41bc842b9d FIR: Support context receivers in Fir2Ir 2022-04-06 16:05:39 +00:00
Denis.Zharkov aa74bd4293 FIR: Minor. Drop effectively-always-null body parameter 2022-04-06 16:05:38 +00:00
Denis.Zharkov 512446843b FIR: Support typeRef-name label for this 2022-04-06 16:05:37 +00:00
Denis.Zharkov ac399321f0 FIR: Add replace method for contextReceiverNumber 2022-04-06 16:05:37 +00:00
Denis.Zharkov 445705369e FIR: Support context receivers in FirPropertyTypeParametersChecker 2022-04-06 16:05:36 +00:00
Denis.Zharkov 0ba5c528d0 FIR: Support (de)serialization of context receivers 2022-04-06 16:05:35 +00:00
Denis.Zharkov dfc736161a FIR: Fix overload resolution with context receivers 2022-04-06 16:05:35 +00:00
Denis.Zharkov c33f06b9e4 FIR tree: add context receivers helper properties 2022-04-06 16:05:34 +00:00
Denis.Zharkov 202413c2f4 FIR: Add context receivers from the containing class to constructors 2022-04-06 16:05:33 +00:00
Denis.Zharkov ef84dddc88 FIR: Add preliminary support for context receivers in resolution 2022-04-06 16:05:32 +00:00
Denis.Zharkov 90b12433ec FIR: Add replaceContextReceivers to FirCallableDeclaration 2022-04-06 16:05:31 +00:00
Denis.Zharkov 8f013db94d FIR: Simplify resolution for invokeExtension on implicit extension 2022-04-06 16:05:29 +00:00
Denis.Zharkov 9a070ad4f6 FIR: Get rid of SessionBasedTowerLevel 2022-04-06 16:05:28 +00:00
Denis.Zharkov 150f951fb2 FIR: Simplify and clarify contracts in FirInvokeResolveTowerExtension 2022-04-06 16:05:28 +00:00
Denis.Zharkov f7371816de FIR: Minor. Simplify FirInvokeResolveTowerExtension 2022-04-06 16:05:27 +00:00
Denis.Zharkov c595780d83 FIR: Add two label-related fields to FirContextReceiver 2022-04-06 16:05:26 +00:00
Denis.Zharkov 550d24f8c6 FIR: Introduce ContextFunctionTypeParams type attribute 2022-04-06 16:05:26 +00:00
Denis.Zharkov f3e28c3767 FIR: Prepare ConeAttribute infrastructure for non-singleton attrs 2022-04-06 16:05:25 +00:00
Denis.Zharkov 54c3e7e7c5 FIR: Support context receiver in FIR building 2022-04-06 16:05:24 +00:00
Denis.Zharkov a89680fb34 FIR: Prepare tree for context receivers 2022-04-06 16:05:23 +00:00
Mikhail Glukhikh 9bd6a9c069 FIR: handle 'SinceKotlin' as a special kind of deprecated
#KT-51850 Fixed
2022-04-06 12:51:20 +00:00
Mikhail Glukhikh 07b5bd72ae FIR: suppress CONFLICTING_OVERLOADS diagnostic properly 2022-04-06 12:51:19 +00:00
Ivan Kochurkin 46dd6520af Fix typo 2022-04-05 15:50:48 +00:00
Ivan Kochurkin 3566b7fe02 [FIR] Fix smartcast after elvis with escaping lambda, ^KT-44510 Fixed 2022-04-05 15:50:48 +00:00
Ivan Kochurkin c7122c1492 [FIR] Fix break/continue in try-finally in loop, ^KT-51759 2022-04-05 15:50:47 +00:00
Ivan Kochurkin e9b9322672 [FIR] Track inc and dec operator calls in preliminary loop visitor, ^KT-44879 Fixed 2022-04-05 15:50:46 +00:00
Ivan Kochurkin fc77d0d26b [FIR] Fix false positive errors for members with explicit API mode, ^KT-51758 Fixed 2022-04-05 15:50:45 +00:00
Ivan Kochurkin 1eefca4259 [FIR] Fix dependencies duplication 2022-04-05 15:50:44 +00:00
Ivan Kochurkin 48dbb9ceb9 [FIR] Fix resolving of refs with implicit this in lambdas in smartcasts 2022-04-05 15:50:43 +00:00
Ivan Kochurkin c6f52893fb [FIR] Fix inconsistent RETURN_TYPE_MISMATCH and TYPE_MISMATCH reporting on functions and properties
^KT-51203 Fixed
2022-04-05 15:50:43 +00:00
Ivan Kochurkin 4617615fd9 [FIR] Fix false-positive INAPPLICABLE_LATEINIT_MODIFIER for property with unresolved type
^KT-51624 Fixed
2022-04-05 15:50:42 +00:00
Alexander Udalov df86290083 Add another test for KT-49715 and fix JS IR behavior
#KT-49715
 #KT-51798 Fixed
2022-04-05 01:06:57 +02:00
Xin Wang 24105139ea Handle methods descriptor clash in data class
1. Extension functions declared in data classes are generated earlier by `generateMembersDeclaredInClassBody`
2. Extension functions fake override from parent class are generated earlier by `generateFakeOverrideMemberDeclarations`

So it is safe to filter out extension functions inside `generateAdditionalMembersForDataClass`

 #KT-49715
 #KT-51798
2022-04-05 01:06:57 +02:00
Dmitriy Novozhilov 5a3b397552 [FIR] Get rid of FirTypedDeclaration
`FirTypedDeclaration` has only one inheritor (`FirCallableDeclaration`),
  so there is no much sense to keep this class
2022-04-04 15:23:58 +00:00
Dmitriy Novozhilov ae0ce57b2c [FIR] Don't force calculation of return type of overrides during status resolution 2022-04-04 15:23:57 +00:00
Dmitriy Novozhilov effa3f197a [FIR] Move ReturnTypeCalculator to :fir:providers module
Also make it an abstract class and turn ReturnTypeCalculatorForFullBodyResolve
  into object (because it has no state and there is no need to create
  different instances of it)
2022-04-04 15:23:56 +00:00