From 37cad476e8048fd217218ed78070784f7382a74c Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 29 Oct 2019 11:26:57 +0300 Subject: [PATCH] Fix incorrect assertion in FIR DFA --- .../fir/resolve/dfa/FirDataFlowAnalyzer.kt | 3 +-- .../resolve/stdlib/anonymousInDelegate.txt | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 compiler/fir/resolve/testData/resolve/stdlib/anonymousInDelegate.txt diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt index 5621db659a7..8e7a46e8afc 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt @@ -561,8 +561,7 @@ class FirDataFlowAnalyzer(private val components: FirAbstractBodyResolveTransfor * x.length * } */ - variableStorage[initializer]?.let { initializerVariable -> - assert(initializerVariable.isSynthetic()) + variableStorage[initializer]?.takeIf { it.isSynthetic() }?.let { initializerVariable -> val realVariable = getOrCreateRealVariable(variable) requireNotNull(realVariable) logicSystem.changeVariableForConditionFlow(node.flow, initializerVariable, realVariable) diff --git a/compiler/fir/resolve/testData/resolve/stdlib/anonymousInDelegate.txt b/compiler/fir/resolve/testData/resolve/stdlib/anonymousInDelegate.txt new file mode 100644 index 00000000000..5077ccf3fa6 --- /dev/null +++ b/compiler/fir/resolve/testData/resolve/stdlib/anonymousInDelegate.txt @@ -0,0 +1,23 @@ +FILE: anonymousInDelegate.kt + public abstract interface Foo : R|kotlin/Any| { + public abstract fun bar(): R|kotlin/Int| + + } + public final val x: R|kotlin/Int|by R|kotlin/lazy|( = lazy@fun (): R|kotlin/Int| { + lval foo: R|anonymous| = object : R|Foo| { + private constructor(): R|kotlin/Any| { + super() + } + + public final override fun bar(): R|kotlin/Int| { + ^bar Int(42) + } + + } + + R|/foo|.R|/bar|() + } + ) + public get(): R|kotlin/Int| { + ^ D|/x|.R|kotlin/getValue|(Null(null), ::R|/x|) + }