Status Update
Comments
ch...@google.com <ch...@google.com> #3
Actual CL that fixed this is aosp/2267993
an...@nrk.no <an...@nrk.no> #4
Will this be released with 1.3.x or only 1.4? We've gotten a lot of crashes with the same error messages recently and hope the fixes mentioned will fix it, but would prefer not to use alpha-version of the compiler for production.
ch...@google.com <ch...@google.com> #5
Unfortunately, this requires an API change to the runtime which the compiler will call if present so it relies on both a new compiler and a new runtime. It will not go stable until 1.4 goes stable.
wo...@gmail.com <wo...@gmail.com> #6
For us this surfaced with the change from 1.3 to 1.4. Seems like some form of regression.
ad...@yazio.com <ad...@yazio.com> #7
[Deleted User] <[Deleted User]> #8
wo...@gmail.com <wo...@gmail.com> #9
Still happening in 1.4.0 and 1.4.2
I opened a new issue as closed ones don't seem to be monitored
ia...@google.com <ia...@google.com> #10
Chuck, can you confirm what versions of the compiler and the runtime the fix is in?
wo...@gmail.com <wo...@gmail.com> #11
ap...@google.com <ap...@google.com> #13
Branch: androidx-main
commit dea72172bafc5dd895caced9545a05f99f04ff19
Author: Andrei Shikov <ashikov@google.com>
Date: Fri Mar 03 20:14:27 2023
Fix Composable inline lambda returns
Updates code generated around inline lambda return to only use a marker when return is non-local.
If the return targets another nested inline function, marker is now positioned before the body of the function instead of the call.
Fixes: 264467571
Test: Compiler and runtime tests
Change-Id: I6a52547fc9ee515476095837596df58194944b25
M compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTests.kt
M compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
M compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrSourcePrinter.kt
M compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/CompositionTests.kt
ch...@google.com <ch...@google.com> #14
This bug is marked fixed with the above fix for my "fix". My previous fix fixed the issue but introduced a different bug that Andrei's fix resolves, that is, it traded a begin/end imbalance for an index out of bounds.
The fix to the original bug (as well as the above fix to the fix) is in the compiler but relies on calling methods on Composer
that were introduced in 1.4-alpha02
. The compiler inspects the runtime it receives on the compiler class path to determine if the Composer
in the runtime contains the methods it needs to call (currentMarker
and endToMarker()
). If these are present it will generate call to them. However, if it doesn't find them it silently produces the same code it used to for 1.3 and below. The reason we did this was that, in some circumstances, the previous code generation worked but detecting when it would work or not is not a trivial problem so reporting or warning would be noisy and, itself, error prone.
This means, to see the fix, you need to use a 1.4+ compiler together with a 1.4+ runtime passed to the compiler in its class path. The easiest way to do this is to add a dependency explicitly to a 1.4 runtime to the gradle dependencies. However, this means that the module or application with this dependency now requires that version or later as a minimum runtime dependency.
al...@mercari.com <al...@mercari.com> #15
Thanks. Can you share target compose version for this fix?
ch...@google.com <ch...@google.com> #16
The compiler fix has been committed in the main branch but has not been released yet. I will update this bug when it is released.
ub...@gmail.com <ub...@gmail.com> #17
I am still seeing the issue with the March Compose BOM, and Compiler 1.4.4, Kotlin 1.8.10. I assumed those updates would take care of it.
pr...@google.com <pr...@google.com> #18
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.compose.runtime:runtime:1.5.0-alpha01
ub...@gmail.com <ub...@gmail.com> #19
I am curious if anyone else can confirm success with the recent compose releases. The 1.5.0 alpha does not make a difference for me, either. I have 2 different cases of crashing early returns, I guess it's possible that neither one was addressed.
ch...@google.com <ch...@google.com> #20
The current status of this bug:
The compiler fix landed in 1.4.4 and the above code no longer crashes.
However, this uncovers a runtime bug where the wrong value of isNode
is passed to end
is being called in the composer by endToMarker()
when the group is a node group. This means that the runtime will get confused about which nodes will be executed which either produces incorrect results or will raise an exception.
The simple version of the above example now works:
@Composable
fun Greeting(name: String, show: Unit? = null) {
Column {
Text(text = "Hello $name!")
if (show == null) return@Column
Text(text = "Hello $name!")
}
}
This doesn't need to call endToMarker()
and now generates the correct code. However,
@Composable
fun Greeting(name: String, show: Unit? = null) {
Column outer@{
Column {
Text(text = "Hello $name!")
if (show == null) return@outer
Text(text = "Hello $name!")
}
}
}
does use endToMarker()
and then gets confused and the content is not emitted correctly.
This also works if the inline function is not a wrapper around Layout
or similar function that generates a node, but, this is quite rare and Column
and Row
are much more common and are affected by the incorrect call in the runtime.
I am now working on a fix to the runtime to determine when to pass true
instead of false
to end()
in endToMarker()
. This will require an update to the runtime and have this change cherry-picked into the 1.4 stable branch of the runtime once I have a fix.
ub...@gmail.com <ub...@gmail.com> #21
I've created a new issue for one of my remaining early return inline function issues:
Don't know if it's the same as the runtime bug.
ch...@google.com <ch...@google.com> #22
The bug is related and looks to be another runtime bug. As it is different enough to the above I will keep it a separate bug instead of dup'ing it into this one.
I have a fix pending for the above but I will amend it to include this one. I will leave details in 274889428 once I have a fix.
wo...@gmail.com <wo...@gmail.com> #23
Thanks! It's great that you're so responsive and intend to release it as a hotfix rather than a 1.5 version 🙏 Great to see compose improving!
ap...@google.com <ap...@google.com> #24
Branch: androidx-main
commit d71d980734a752e516140dd3ac031af5bab86aa3
Author: Chuck Jazdzewski <chuckj@google.com>
Date: Wed Mar 22 16:20:43 2023
Fix `endToMarker()` when ending node groups.
`endToMarker()` is called when a composable function calls
an inline function that has a non-local return. If the non-local
return would return passed the `endNode()` call of an inline
composable function `endToMarker()` was supposed to call `end()`
of the composer with `true` but it was unconditionally calling
it with `false` causing the runtime to get confused as to when
to generate a node.
Also if the `currentMarker()` was called when recomposing existing
content but the `endToMaker()` was called with new content the
groups in the new content would not correctly be closed if the
current marker is in the direct parent group of the new content.
Fixes: 264467571
Fixes: 274889428
Test: ./gradlew :compose:r:r:tDUT
Change-Id: Ibe7063cf22f4bff6eda5bde05c37c1e665c09167
M compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composer.kt
M compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/CompositionTests.kt
M compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/MockViewValidator.kt
M compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/Views.kt
ch...@google.com <ch...@google.com> #25
This change has also been requested to be cherry-picked into the 1.4 branch.
na...@google.com <na...@google.com> #26
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.compose.runtime:runtime:1.4.1
androidx.compose.runtime:runtime:1.5.0-alpha02
as...@google.com <as...@google.com> #27
It seems like a few more bugs got reported with the same issue:
- Early return:
b/300953248 - Continue:
b/296272626
as...@google.com <as...@google.com> #28
Also while
loop (waiting for confirmation that it happens on latest versions)
ay...@gmail.com <ay...@gmail.com> #29
bm...@fieldwire.com <bm...@fieldwire.com> #30
Still happening
ap...@google.com <ap...@google.com> #31
Branch: androidx-main
commit 948362fe0833f6afa28bb4f4fbbd1ee47f39d1ff
Author: Andrei Shikov <ashikov@google.com>
Date: Tue Sep 26 00:03:56 2023
Fix Compose groups generated in for-loops
The group was generated before a loop variable, breaking whenever Kotlin loop optimizer was used.
Bug: 264467571
Fixes: 299500357
Fixes: 296272626
Test: Updated compiler and composition tests
Change-Id: I1d15d4834a4501a67230c0599fe03ce645e80284
M compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt
M compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
M compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/CompositionTests.kt
le...@google.com <le...@google.com> #32
I believe with the above CL landed, all known group misalignment bugs are fixed. We can open new bug if more are found.
ou...@gmail.com <ou...@gmail.com> #33
Am using compose version : 1.2.1
Fatal Exception: java.lang.ArrayIndexOutOfBoundsException: length=0; index=-5
at androidx.compose.runtime.SlotTableKt.key(SlotTable.kt:3220)
at androidx.compose.runtime.SlotTableKt.access$groupInfo(SlotTable.kt:1)
at androidx.compose.runtime.SlotTableKt.access$key(SlotTable.kt:1)
ch...@google.com <ch...@google.com> #34
#33 is unrelated to the original bug. Please file a new issue.
si...@adevinta.com <si...@adevinta.com> #35
Here is a fresh new report for a stacktrace very similar to #33
al...@gmail.com <al...@gmail.com> #36
androidx.compose:compose-bom:2024.04.01"
Android 12,
Brand:Vivo
Model:V2061
Fatal Exception: z0.l: Compose Runtime internal error. Unexpected or incorrect use of the Compose internal runtime API (Cannot skip the enclosing group while in an empty region). Please report to Google or use
at androidx.compose.runtime.ComposerKt.composeRuntimeError(Composer.kt:4187)
at androidx.compose.runtime.SlotReader.skipToGroupEnd(SlotTable.kt:3754)
at androidx.compose.runtime.ComposerImpl.skipReaderToGroupEnd(Composer.kt:2835)
at androidx.compose.runtime.ComposerImpl.skipToGroupEnd(Composer.kt:2848)
at androidx.compose.ui.platform.WrappedComposition$setContent$1$1$2.invoke(Wrapper.android.kt:139)
at androidx.compose.ui.platform.WrappedComposition$setContent$1$1$2.invoke(Wrapper.android.kt:138)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:248)
at androidx.compose.ui.platform.WrappedComposition$setContent$1$1.invoke(WrappedComposition.java:138)
at androidx.compose.ui.platform.WrappedComposition$setContent$1$1.invoke(WrappedComposition.java:123)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
at androidx.compose.runtime.ActualJvm_jvmKt.invokeComposable(ActualJvm_jvm.kt:90)
at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:3302)
at androidx.compose.runtime.ComposerImpl.composeContent$runtime_release(Composer.kt:3235)
at androidx.compose.runtime.CompositionImpl.composeContent(Composition.kt:725)
at androidx.compose.runtime.Recomposer.composeInitial$runtime_release(Recomposer.kt:1071)
at androidx.compose.runtime.CompositionImpl.composeInitial(Composition.kt:633)
at androidx.compose.runtime.CompositionImpl.setContent(Composition.kt:619)
at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(WrappedComposition.java:123)
at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(WrappedComposition.java:114)
at androidx.compose.ui.platform.AndroidComposeView.setOnViewTreeOwnersAvailable(AndroidComposeView.android.kt:1289)
at androidx.compose.ui.platform.WrappedComposition.setContent(Wrapper.android.kt:114)
at androidx.compose.ui.platform.WrappedComposition.onStateChanged(Wrapper.android.kt:164)
at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.kt:322)
at androidx.lifecycle.LifecycleRegistry.addObserver(LifecycleRegistry.kt:199)
at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(WrappedComposition.java:121)
at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(WrappedComposition.java:114)
at androidx.compose.ui.platform.AndroidComposeView.onAttachedToWindow(AndroidComposeView.android.kt:1364)
at android.view.View.dispatchAttachedToWindow(View.java:20968)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3571)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3578)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3578)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3578)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3578)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3578)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3578)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3578)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3578)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3578)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3578)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3578)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3578)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2857)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2315)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9216)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1198)
at android.view.Choreographer.doCallbacks(Choreographer.java:986)
at android.view.Choreographer.doFrame(Choreographer.java:912)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1183)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:233)
at android.os.Looper.loop(Looper.java:334)
at android.app.ActivityThread.main(ActivityThread.java:8333)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:582)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1065)
ch...@google.com <ch...@google.com> #37
The error Cannot skip the enclosing group while in an empty region
is not the same as the original bug. Please submit a separate bug with this trace as it is unlikely to be related to the start/end imbalance
issue.
sh...@gmail.com <sh...@gmail.com> #38
compose compiler plugin: 2.0.0 compose: 1.6.7
OuterComposableFunction(
content = {
Column {
if (condition) return@OuterComposableFunction
...
}
...
}
)
Moving if (condition) return@OuterComposableFunction
above the Column() call fixes the issue.
OuterComposableFunction(
content = {
if (condition) return@OuterComposableFunction
Column {
...
}
...
}
)
androidx.compose.runtime.ComposeRuntimeError: Compose Runtime internal error. Unexpected or incorrect use of the Compose internal runtime API (Start/end imbalance). Please report to Google or use https://goo.gle/compose-feedback
at androidx.compose.runtime.ComposerKt.composeRuntimeError(Composer.kt:4187)
at androidx.compose.runtime.ComposerImpl.finalizeCompose(Composer.kt:4365)
at androidx.compose.runtime.ComposerImpl.endRoot(Composer.kt:1485)
at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:3317)
at androidx.compose.runtime.ComposerImpl.composeContent$runtime_release(Composer.kt:3235)
at androidx.compose.runtime.CompositionImpl.composeContent(Composition.kt:725)
at androidx.compose.runtime.Recomposer.composeInitial$runtime_release(Recomposer.kt:1071)
at androidx.compose.runtime.ComposerImpl$CompositionContextImpl.composeInitial$runtime_release(Composer.kt:3599)
at androidx.compose.runtime.CompositionImpl.composeInitial(Composition.kt:633)
at androidx.compose.runtime.CompositionImpl.setContent(Composition.kt:619)
at androidx.compose.ui.layout.LayoutNodeSubcompositionsState.subcomposeInto(SubcomposeLayout.kt:500)
at androidx.compose.ui.layout.LayoutNodeSubcompositionsState.subcompose(SubcomposeLayout.kt:472)
at androidx.compose.ui.layout.LayoutNodeSubcompositionsState.subcompose(SubcomposeLayout.kt:463)
at androidx.compose.ui.layout.LayoutNodeSubcompositionsState.subcompose(SubcomposeLayout.kt:447)
at androidx.compose.ui.layout.LayoutNodeSubcompositionsState$Scope.subcompose(SubcomposeLayout.kt:872)
at androidx.compose.material3.ScaffoldKt$ScaffoldLayoutWithMeasureFix$1$1.invoke-0kLqBqw(Scaffold.kt:285)
at androidx.compose.material3.ScaffoldKt$ScaffoldLayoutWithMeasureFix$1$1.invoke(Scaffold.kt:179)
at androidx.compose.ui.layout.LayoutNodeSubcompositionsState$createMeasurePolicy$1.measure-3p2s80s(SubcomposeLayout.kt:709)
at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(InnerNodeCoordinator.kt:126)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasureBlock$1.invoke(LayoutNodeLayoutDelegate.kt:252)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasureBlock$1.invoke(LayoutNodeLayoutDelegate.kt:251)
at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:2303)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:500)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:256)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:133)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:113)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.performMeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:1617)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.access$performMeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:36)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:620)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.measure-BRTryo0(LayoutNodeLayoutDelegate.kt:596)
at androidx.compose.foundation.layout.BoxMeasurePolicy.measure-3p2s80s(Box.kt:122)
at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(InnerNodeCoordinator.kt:126)
at androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure-3p2s80s(GraphicsLayerModifier.kt:646)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure-3p2s80s(GraphicsLayerModifier.kt:646)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasureBlock$1.invoke(LayoutNodeLayoutDelegate.kt:252)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasureBlock$1.invoke(LayoutNodeLayoutDelegate.kt:251)
at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:2303)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:500)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:256)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:133)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:113)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.performMeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:1617)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.access$performMeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:36)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:620)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.measure-BRTryo0(LayoutNodeLayoutDelegate.kt:596)
at androidx.compose.ui.layout.RootMeasurePolicy.measure-3p2s80s(RootMeasurePolicy.kt:38)
at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(InnerNodeCoordinator.kt:126)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasureBlock$1.invoke(LayoutNodeLayoutDelegate.kt:252)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasureBlock$1.invoke(LayoutNodeLayoutDelegate.kt:251)
at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:2303)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:500)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:256)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:133)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:113)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.performMeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:1617)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.access$performMeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:36)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:620)
at androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release(LayoutNode.kt:1145)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure-sdFAvZA(MeasureAndLayoutDelegate.kt:354)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.remeasureOnly(MeasureAndLayoutDelegate.kt:562)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.measureOnly(MeasureAndLayoutDelegate.kt:407)
at androidx.compose.ui.platform.AndroidComposeView.onMeasure(AndroidComposeView.android.kt:1058)
at android.view.View.measure(View.java:24530)
at androidx.compose.ui.platform.AbstractComposeView.internalOnMeasure$ui_release(ComposeView.android.kt:302)
at androidx.compose.ui.platform.AbstractComposeView.onMeasure(ComposeView.android.kt:289)
at android.view.View.measure(View.java:24530)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:24530)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:24530)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828)
at androidx.coordinatorlayout.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:760)
at androidx.coordinatorlayout.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:833)
at android.view.View.measure(View.java:24530)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:141)
at android.view.View.measure(View.java:24530)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
at android.view.View.measure(View.java:24530)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:24530)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
at android.view.View.measure(View.java:24530)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:742)
at android.view.View.measure(View.java:24530)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3006)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1833)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2122)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1721)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7598)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:966)
at android.view.Choreographer.doCallbacks(Choreographer.java:790)
at android.view.Choreographer.doFrame(Choreographer.java:725)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:951)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Description
Public version of b/236183902 to link existing public issues against. This consolidates crashes that have this error message: "Compose Runtime internal error. Unexpected or incorrect use of the Compose internal runtime API (Start/end imbalance). Please report to Google or use https://goo.gle/compose-feedback " and are most likely caused by early returns within composables.
Jetpack Compose version: bom 2022-12-00, Compiler v1.3.2
Kotlin version: 1.7.20
Steps to Reproduce or Code Sample to Reproduce:
Include early returns within a composable, for example:
Stack trace (if applicable):