skylot / jadx

Dex to Java decompiler
Apache License 2.0
40.86k stars 4.8k forks source link

[core] android kotlin coroutine suspend function happen to "Code decompiled incorrectly, please refer to instructions dump" #2219

Open louiewh opened 1 month ago

louiewh commented 1 month ago

Issue details

android kotlin suspend function

suspend fun firstFun(value:String){

    val result = secondFun()
    delay(1000)
    Log.d("Coroutine", "firstFun delay finish $value $result")
}

AndroidStudio decomile is like this.

@Nullable
   public static final Object firstFun(@NotNull String value, @NotNull Continuation $completion) {
      Object $continuation;
      label27: {
         if ($completion instanceof <undefinedtype>) {
            $continuation = (<undefinedtype>)$completion;
            if ((((<undefinedtype>)$continuation).label & Integer.MIN_VALUE) != 0) {
               ((<undefinedtype>)$continuation).label -= Integer.MIN_VALUE;
               break label27;
            }
         }

         $continuation = new ContinuationImpl($completion) {
            Object L$0;
            Object L$1;
            // $FF: synthetic field
            Object result;
            int label;

            @Nullable
            public final Object invokeSuspend(@NotNull Object $result) {
               this.result = $result;
               this.label |= Integer.MIN_VALUE;
               return MainActivityKt.firstFun((String)null, (Continuation)this);
            }
         };
      }

      String result;
      label22: {
         Object $result = ((<undefinedtype>)$continuation).result;
         Object var5 = IntrinsicsKt.getCOROUTINE_SUSPENDED();
         Object var10000;
         switch (((<undefinedtype>)$continuation).label) {
            case 0:
               ResultKt.throwOnFailure($result);
               ((<undefinedtype>)$continuation).L$0 = value;
               ((<undefinedtype>)$continuation).label = 1;
               var10000 = secondFun((Continuation)$continuation);
               if (var10000 == var5) {
                  return var5;
               }
               break;
            case 1:
               value = (String)((<undefinedtype>)$continuation).L$0;
               ResultKt.throwOnFailure($result);
               var10000 = $result;
               break;
            case 2:
               result = (String)((<undefinedtype>)$continuation).L$1;
               value = (String)((<undefinedtype>)$continuation).L$0;
               ResultKt.throwOnFailure($result);
               break label22;
            default:
               throw new IllegalStateException("call to 'resume' before 'invoke' with coroutine");
         }

         result = (String)var10000;
         ((<undefinedtype>)$continuation).L$0 = value;
         ((<undefinedtype>)$continuation).L$1 = result;
         ((<undefinedtype>)$continuation).label = 2;
         if (DelayKt.delay(1000L, (Continuation)$continuation) == var5) {
            return var5;
         }
      }

      Log.d("Coroutine", "firstFun delay finish " + value + ' ' + result);
      return Unit.INSTANCE;
   }
     $continuation = new ContinuationImpl($completion) {

before
switch ((()$continuation).label) {

jadx decompile is

public static final Object firstFun(String value, Continuation<? super Unit> continuation) {
        FirstContinuation firstContinuation;
        FirstContinuation firstContinuation2;
        Object secondFun;
        String value2;
        String value3;
        if (continuation instanceof FirstContinuation) {
            firstContinuation = (FirstContinuation) continuation;
            if ((firstContinuation.label & Integer.MIN_VALUE) != 0) {
                firstContinuation.label -= Integer.MIN_VALUE;
                firstContinuation2 = firstContinuation;
                Object $result = firstContinuation2.result;
                Object coroutine_suspended = IntrinsicsKt.getCOROUTINE_SUSPENDED();
                switch (firstContinuation2.label) {
                    case 0:
                        ResultKt.throwOnFailure($result);
                        firstContinuation2.L$0 = value;
                        firstContinuation2.label = 1;
                        secondFun = secondFun(firstContinuation2);
                        if (secondFun == coroutine_suspended) {
                            return coroutine_suspended;
                        }
                        String result = (String) secondFun;
                        firstContinuation2.L$0 = value;
                        firstContinuation2.L$1 = result;
                        firstContinuation2.label = 2;
                        if (DelayKt.delay(1000L, firstContinuation2) != coroutine_suspended) {
                            return coroutine_suspended;
                        }
                        value2 = value;
                        value3 = result;
                        Log.d("Coroutine", "firstFun delay finish " + value2 + ' ' + value3);
                        return Unit.INSTANCE;
                    case 1:
                        value = (String) firstContinuation2.L$0;
                        ResultKt.throwOnFailure($result);
                        secondFun = $result;
                        String result2 = (String) secondFun;
                        firstContinuation2.L$0 = value;
                        firstContinuation2.L$1 = result2;
                        firstContinuation2.label = 2;
                        if (DelayKt.delay(1000L, firstContinuation2) != coroutine_suspended) {
                        }
                        break;
                    case 2:
                        value3 = (String) firstContinuation2.L$1;
                        value2 = (String) firstContinuation2.L$0;
                        ResultKt.throwOnFailure($result);
                        Log.d("Coroutine", "firstFun delay finish " + value2 + ' ' + value3);
                        return Unit.INSTANCE;
                    default:
                        throw new IllegalStateException("call to 'resume' before 'invoke' with coroutine");
                }
            }
        }
        firstContinuation = new FirstContinuation(continuation);
        firstContinuation2 = firstContinuation;
        Object $result2 = firstContinuation2.result;
        Object coroutine_suspended2 = IntrinsicsKt.getCOROUTINE_SUSPENDED();
        switch (firstContinuation2.label) {
        }
    }`

switch is before .  so the code is wrong

### Relevant log output or stacktrace

```java
INFO : output directory: app-debug
INFO : loading ...
WARN : Found duplicated class: kotlin.coroutines.jvm.internal.DebugProbesKt, count: 2. Only one will be loaded!
  classes5.dex
  app-debug.apk:DebugProbesKt.bin
INFO : Loaded classes: 12233, methods: 78428, instructions: 2544353
INFO : Loading obfuscation map from: /Users/louiewang/AndroidStudioProjects/DebugApk/app/build/outputs/apk/debug/app-debug.jobf
INFO : Resetting disk code cache, base dir: /Users/louiewang/Library/Caches/io.github.skylot.jadx/projects/app-debug-34254274931a13b42a4d9b6e5741442f/code
WARN : Removed duplicated region for block: B:18:0x0063  in method: com.example.debugapk.MainActivityKt.firstFun(java.lang.String, kotlin.coroutines.Continuation<? super kotlin.Unit>):java.lang.Object, file: classes4.dex
WARN : Removed duplicated region for block: B:17:0x0062 A[RETURN] in method: com.example.debugapk.MainActivityKt.firstFun(java.lang.String, kotlin.coroutines.Continuation<? super kotlin.Unit>):java.lang.Object, file: classes4.dex
WARN : Removed duplicated region for block: B:19:0x0042  in method: com.example.debugapk.MainActivityKt.firstFun(java.lang.String, kotlin.coroutines.Continuation<? super kotlin.Unit>):java.lang.Object, file: classes4.dex
WARN : Removed duplicated region for block: B:14:0x0039  in method: com.example.debugapk.MainActivityKt.firstFun(java.lang.String, kotlin.coroutines.Continuation<? super kotlin.Unit>):java.lang.Object, file: classes4.dex
WARN : Removed duplicated region for block: B:11:0x002d  in method: com.example.debugapk.MainActivityKt.firstFun(java.lang.String, kotlin.coroutines.Continuation<? super kotlin.Unit>):java.lang.Object, file: classes4.dex
WARN : Removed duplicated region for block: B:8:0x0025  in method: com.example.debugapk.MainActivityKt.firstFun(java.lang.String, kotlin.coroutines.Continuation<? super kotlin.Unit>):java.lang.Object, file: classes4.dex
WARN : Removed duplicated region for block: B:14:0x0031  in method: com.example.debugapk.MainActivityKt.secondFun(kotlin.coroutines.Continuation<? super java.lang.String>):java.lang.Object, file: classes4.dex
WARN : Removed duplicated region for block: B:11:0x002d  in method: com.example.debugapk.MainActivityKt.secondFun(kotlin.coroutines.Continuation<? super java.lang.String>):java.lang.Object, file: classes4.dex
WARN : Removed duplicated region for block: B:8:0x0025  in method: com.example.debugapk.MainActivityKt.secondFun(kotlin.coroutines.Continuation<? super java.lang.String>):java.lang.Object, file: classes4.dex
ERROR: Error in decompile pass: KotlinMetadataDecompile, class: kotlin.coroutines.jvm.internal.DebugProbesKt
kotlinx.metadata.InconsistentKotlinMetadataException: Exception occurred when reading Kotlin metadata
    at kotlinx.metadata.jvm.internal.JvmReadUtils.readMetadataImpl$kotlinx_metadata_jvm(JvmReadUtils.kt:114)
    at kotlinx.metadata.jvm.KotlinClassMetadata$Companion.readLenient(KotlinClassMetadata.kt:813)
    at jadx.plugins.kotlin.metadata.utils.KotlinMetadataExtKt.getKotlinClassMetadata(KotlinMetadataExt.kt:71)
    at jadx.plugins.kotlin.metadata.utils.KmClassWrapper$Companion.getWrapper(KmClassWrapper.kt:37)
    at jadx.plugins.kotlin.metadata.pass.KotlinMetadataDecompilePass.visit(KotlinMetadataDecompilePass.kt:35)
    at jadx.api.impl.passes.DecompilePassWrapper.visit(DecompilePassWrapper.java:40)
    at jadx.core.dex.visitors.DepthTraversal.visit(DepthTraversal.java:12)
    at jadx.core.ProcessClass.process(ProcessClass.java:75)
    at jadx.core.ProcessClass.generateCode(ProcessClass.java:110)
    at jadx.core.dex.nodes.ClassNode.generateClassCode(ClassNode.java:400)
    at jadx.core.dex.nodes.ClassNode.decompile(ClassNode.java:388)
    at jadx.core.dex.nodes.ClassNode.decompile(ClassNode.java:309)
    at jadx.api.JavaClass.load(JavaClass.java:132)
    at jadx.api.JavaClass.getCodeInfo(JavaClass.java:61)
    at jadx.gui.treemodel.JClass.getCodeInfo(JClass.java:114)
    at jadx.gui.ui.MainWindow.preLoadOpenTabs(MainWindow.java:1490)
    at jadx.gui.ui.MainWindow.lambda$onOpen$2(MainWindow.java:595)
    at jadx.core.utils.tasks.TaskExecutor.wrapTask(TaskExecutor.java:166)
    at jadx.core.utils.tasks.TaskExecutor.runStages(TaskExecutor.java:142)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
    at java.base/java.lang.Thread.run(Thread.java:1570)
Caused by: kotlinx.metadata.internal.protobuf.InvalidProtocolBufferException: Protocol message tag had invalid wire type.
    at kotlinx.metadata.internal.protobuf.InvalidProtocolBufferException.invalidWireType(InvalidProtocolBufferException.java:99)
    at kotlinx.metadata.internal.protobuf.CodedInputStream.skipField(CodedInputStream.java:262)
    at kotlinx.metadata.internal.protobuf.GeneratedMessageLite.parseUnknownField(GeneratedMessageLite.java:73)
    at kotlinx.metadata.internal.metadata.jvm.JvmProtoBuf$StringTableTypes.<init>(JvmProtoBuf.java:112)
    at kotlinx.metadata.internal.metadata.jvm.JvmProtoBuf$StringTableTypes.<init>(JvmProtoBuf.java:71)
    at kotlinx.metadata.internal.metadata.jvm.JvmProtoBuf$StringTableTypes$1.parsePartialFrom(JvmProtoBuf.java:177)
    at kotlinx.metadata.internal.metadata.jvm.JvmProtoBuf$StringTableTypes$1.parsePartialFrom(JvmProtoBuf.java:172)
    at kotlinx.metadata.internal.protobuf.AbstractParser.parsePartialFrom(AbstractParser.java:192)
    at kotlinx.metadata.internal.protobuf.AbstractParser.parsePartialDelimitedFrom(AbstractParser.java:233)
    at kotlinx.metadata.internal.protobuf.AbstractParser.parseDelimitedFrom(AbstractParser.java:245)
    at kotlinx.metadata.internal.protobuf.AbstractParser.parseDelimitedFrom(AbstractParser.java:49)
    at kotlinx.metadata.internal.metadata.jvm.JvmProtoBuf$StringTableTypes.parseDelimitedFrom(JvmProtoBuf.java:1738)
    at kotlinx.metadata.internal.metadata.jvm.deserialization.JvmProtoBufUtil.readNameResolver(JvmProtoBufUtil.kt:52)
    at kotlinx.metadata.internal.metadata.jvm.deserialization.JvmProtoBufUtil.readPackageDataFrom(JvmProtoBufUtil.kt:42)
    at kotlinx.metadata.internal.metadata.jvm.deserialization.JvmProtoBufUtil.readPackageDataFrom(JvmProtoBufUtil.kt:37)
    at kotlinx.metadata.jvm.internal.JvmReadUtils.readKmPackage$kotlinx_metadata_jvm(JvmReadUtils.kt:33)
    at kotlinx.metadata.jvm.KotlinClassMetadata$FileFacade.<init>(KotlinClassMetadata.kt:192)
    at kotlinx.metadata.jvm.internal.JvmReadUtils.readMetadataImpl$kotlinx_metadata_jvm(JvmReadUtils.kt:52)
    ... 21 common frames omitted
WARN : Code restructure failed: missing block: B:14:0x003e, code lost:

    if (r5 == null) goto L14;
 in method: kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(kotlin.coroutines.CoroutineContext, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope, ? super kotlin.coroutines.Continuation<? super T>, ? extends java.lang.Object>):T, file: classes5.dex
WARN : Skipping pending alias: 'Finishing[cancelling'
WARN : Skipping pending alias: 'completing'
WARN : Skipping pending alias: 'rootCause'
WARN : Skipping pending alias: 'exceptions'
WARN : Removed duplicated region for block: B:75:0x0118  in method: kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(kotlin.coroutines.Continuation<? super T>, java.lang.Object, kotlin.jvm.functions.Function1<? super java.lang.Throwable, kotlin.Unit>):void, file: classes5.dex
WARN : Removed duplicated region for block: B:22:0x00b3  in method: kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(kotlin.coroutines.Continuation<? super T>, java.lang.Object, kotlin.jvm.functions.Function1<? super java.lang.Throwable, kotlin.Unit>):void, file: classes5.dex
WARN : Can't wrap try/catch for region: R(11:15|16|17|(3:77|78|(8:80|81|20|(15:22|23|24|25|26|27|(2:59|60)(1:29)|30|31|32|33|34|35|(1:47)|39)(1:75)|40|(1:41)|44|45))|19|20|(0)(0)|40|(1:41)|44|45) in method: kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(kotlin.coroutines.Continuation<? super T>, java.lang.Object, kotlin.jvm.functions.Function1<? super java.lang.Throwable, kotlin.Unit>):void, file: classes5.dex
WARN : Code restructure failed: missing block: B:76:0x0128, code lost:

    r0 = th;
 in method: kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(kotlin.coroutines.Continuation<? super T>, java.lang.Object, kotlin.jvm.functions.Function1<? super java.lang.Throwable, kotlin.Unit>):void, file: classes5.dex
WARN : Code restructure failed: missing block: B:6:0x001d, code lost:

    if (r1.equals(kotlinx.coroutines.Debug.DEBUG_PROPERTY_VALUE_AUTO) != false) goto L21;
 in method: kotlinx.coroutines.DebugKt.<clinit>():void, file: classes5.dex
WARN : Code restructure failed: missing block: B:19:0x0030, code lost:

    if (r1.equals(kotlinx.coroutines.Debug.DEBUG_PROPERTY_VALUE_ON) != false) goto L18;
 in method: kotlinx.coroutines.DebugKt.<clinit>():void, file: classes5.dex
WARN : Code restructure failed: missing block: B:20:0x003b, code lost:

    r4 = true;
 in method: kotlinx.coroutines.DebugKt.<clinit>():void, file: classes5.dex
WARN : Code restructure failed: missing block: B:22:0x0039, code lost:

    if (r1.equals("") != false) goto L18;
 in method: kotlinx.coroutines.DebugKt.<clinit>():void, file: classes5.dex
WARN : Removed duplicated region for block: B:75:0x0118  in method: kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(kotlin.coroutines.Continuation<? super T>, java.lang.Object, kotlin.jvm.functions.Function1<? super java.lang.Throwable, kotlin.Unit>):void, file: classes5.dex
WARN : Removed duplicated region for block: B:22:0x00b3  in method: kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(kotlin.coroutines.Continuation<? super T>, java.lang.Object, kotlin.jvm.functions.Function1<? super java.lang.Throwable, kotlin.Unit>):void, file: classes5.dex
WARN : Can't wrap try/catch for region: R(11:15|16|17|(3:77|78|(8:80|81|20|(15:22|23|24|25|26|27|(2:59|60)(1:29)|30|31|32|33|34|35|(1:47)|39)(1:75)|40|(1:41)|44|45))|19|20|(0)(0)|40|(1:41)|44|45) in method: kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(kotlin.coroutines.Continuation<? super T>, java.lang.Object, kotlin.jvm.functions.Function1<? super java.lang.Throwable, kotlin.Unit>):void, file: classes5.dex
WARN : Code restructure failed: missing block: B:76:0x0128, code lost:

    r0 = th;
 in method: kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(kotlin.coroutines.Continuation<? super T>, java.lang.Object, kotlin.jvm.functions.Function1<? super java.lang.Throwable, kotlin.Unit>):void, file: classes5.dex
WARN : Code restructure failed: missing block: B:51:0x020c, code lost:

    if (r12.changed(r68) != false) goto L176;
 in method: androidx.compose.material3.TextKt.Text-fLXpl1I(java.lang.String, androidx.compose.ui.Modifier, long, long, androidx.compose.ui.text.font.FontStyle, androidx.compose.ui.text.font.FontWeight, androidx.compose.ui.text.font.FontFamily, long, androidx.compose.ui.text.style.TextDecoration, androidx.compose.ui.text.style.TextAlign, long, int, boolean, int, kotlin.jvm.functions.Function1, androidx.compose.ui.text.TextStyle, androidx.compose.runtime.Composer, int, int, int):void, file: classes.dex
WARN : Skipping pending alias: 'color'
WARN : Skipping pending alias: 'brush'
WARN : Skipping pending alias: 'alpha'
WARN : Skipping pending alias: 'fontSize'
WARN : Skipping pending alias: 'fontWeight'
WARN : Skipping pending alias: 'fontStyle'
WARN : Skipping pending alias: 'fontSynthesis'
WARN : Skipping pending alias: 'fontFamily'
WARN : Skipping pending alias: 'fontFeatureSettings'
WARN : Skipping pending alias: 'letterSpacing'
WARN : Skipping pending alias: 'baselineShift'
WARN : Skipping pending alias: 'textGeometricTransform'
WARN : Skipping pending alias: 'localeList'
WARN : Skipping pending alias: 'background'
WARN : Skipping pending alias: 'textDecoration'
WARN : Skipping pending alias: 'shadow'
WARN : Skipping pending alias: 'drawStyle'
WARN : Skipping pending alias: 'textAlign'
WARN : Skipping pending alias: 'textDirection'
WARN : Skipping pending alias: 'lineHeight'
WARN : Skipping pending alias: 'textIndent'
WARN : Skipping pending alias: 'lineHeightStyle'
WARN : Skipping pending alias: 'lineBreak'
WARN : Skipping pending alias: 'hyphens'
WARN : Removed duplicated region for block: B:37:0x0096  in method: com.example.debugapk.ui.theme.ThemeKt.DebugApkTheme(boolean, boolean, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.Composer, ? super java.lang.Integer, kotlin.Unit>, androidx.compose.runtime.Composer, int, int):void, file: classes3.dex
WARN : Removed duplicated region for block: B:52:0x00dd  in method: com.example.debugapk.ui.theme.ThemeKt.DebugApkTheme(boolean, boolean, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.Composer, ? super java.lang.Integer, kotlin.Unit>, androidx.compose.runtime.Composer, int, int):void, file: classes3.dex
WARN : Removed duplicated region for block: B:51:0x00d9  in method: com.example.debugapk.ui.theme.ThemeKt.DebugApkTheme(boolean, boolean, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.Composer, ? super java.lang.Integer, kotlin.Unit>, androidx.compose.runtime.Composer, int, int):void, file: classes3.dex
WARN : Removed duplicated region for block: B:47:0x00fb  in method: com.example.debugapk.ui.theme.ThemeKt.DebugApkTheme(boolean, boolean, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.Composer, ? super java.lang.Integer, kotlin.Unit>, androidx.compose.runtime.Composer, int, int):void, file: classes3.dex
WARN : Removed duplicated region for block: B:14:0x0032  in method: kotlinx.coroutines.DelayKt.awaitCancellation(kotlin.coroutines.Continuation<?>):java.lang.Object, file: classes5.dex
WARN : Removed duplicated region for block: B:11:0x002d  in method: kotlinx.coroutines.DelayKt.awaitCancellation(kotlin.coroutines.Continuation<?>):java.lang.Object, file: classes5.dex
WARN : Removed duplicated region for block: B:8:0x0025  in method: kotlinx.coroutines.DelayKt.awaitCancellation(kotlin.coroutines.Continuation<?>):java.lang.Object, file: classes5.dex
WARN : Code restructure failed: missing block: B:4:0x0023, code lost:

    if (r6 >= 0) goto L6;
 in method: kotlin.time.Duration.appendFractional-impl(long, java.lang.StringBuilder, int, int, int, java.lang.String, boolean):void, file: classes5.dex
WARN : Code restructure failed: missing block: B:5:0x0025, code lost:

    r10 = r6;
    r6 = r6 - 1;
    r11 = r4.charAt(r10);
 in method: kotlin.time.Duration.appendFractional-impl(long, java.lang.StringBuilder, int, int, int, java.lang.String, boolean):void, file: classes5.dex
WARN : Code restructure failed: missing block: B:6:0x002c, code lost:

    if (r11 == '0') goto L9;
 in method: kotlin.time.Duration.appendFractional-impl(long, java.lang.StringBuilder, int, int, int, java.lang.String, boolean):void, file: classes5.dex
WARN : Code restructure failed: missing block: B:7:0x002e, code lost:

    r11 = 1;
 in method: kotlin.time.Duration.appendFractional-impl(long, java.lang.StringBuilder, int, int, int, java.lang.String, boolean):void, file: classes5.dex
WARN : Code restructure failed: missing block: B:8:0x0031, code lost:

    if (r11 == 0) goto L12;
 in method: kotlin.time.Duration.appendFractional-impl(long, java.lang.StringBuilder, int, int, int, java.lang.String, boolean):void, file: classes5.dex
WARN : Code restructure failed: missing block: B:9:0x0035, code lost:

    if (r6 >= 0) goto L24;
 in method: kotlin.time.Duration.appendFractional-impl(long, java.lang.StringBuilder, int, int, int, java.lang.String, boolean):void, file: classes5.dex
WARN : Code restructure failed: missing block: B:13:0x0033, code lost:

    r7 = r10;
 in method: kotlin.time.Duration.appendFractional-impl(long, java.lang.StringBuilder, int, int, int, java.lang.String, boolean):void, file: classes5.dex
WARN : Code restructure failed: missing block: B:14:0x0030, code lost:

    r11 = 0;
 in method: kotlin.time.Duration.appendFractional-impl(long, java.lang.StringBuilder, int, int, int, java.lang.String, boolean):void, file: classes5.dex
WARN : Code restructure failed: missing block: B:15:0x0038, code lost:

    r7 = r7 + 1;
 in method: kotlin.time.Duration.appendFractional-impl(long, java.lang.StringBuilder, int, int, int, java.lang.String, boolean):void, file: classes5.dex
WARN : Code restructure failed: missing block: B:16:0x003d, code lost:

    if (r20 != false) goto L18;
 in method: kotlin.time.Duration.appendFractional-impl(long, java.lang.StringBuilder, int, int, int, java.lang.String, boolean):void, file: classes5.dex
WARN : Code restructure failed: missing block: B:17:0x003f, code lost:

    if (r7 >= 3) goto L18;
 in method: kotlin.time.Duration.appendFractional-impl(long, java.lang.StringBuilder, int, int, int, java.lang.String, boolean):void, file: classes5.dex
WARN : Code restructure failed: missing block: B:18:0x0041, code lost:

    kotlin.jvm.internal.Intrinsics.checkNotNullExpressionValue(r15.append(r1, 0, r7), "this.append(value, startIndex, endIndex)");
 in method: kotlin.time.Duration.appendFractional-impl(long, java.lang.StringBuilder, int, int, int, java.lang.String, boolean):void, file: classes5.dex
WARN : Code restructure failed: missing block: B:22:0x004c, code lost:

    kotlin.jvm.internal.Intrinsics.checkNotNullExpressionValue(r15.append(r1, 0, ((r7 + 2) / 3) * 3), "this.append(value, startIndex, endIndex)");
 in method: kotlin.time.Duration.appendFractional-impl(long, java.lang.StringBuilder, int, int, int, java.lang.String, boolean):void, file: classes5.dex

Provide sample and class/method full name

No response

Jadx version

1.5.0

wadechristal4 commented 1 month ago

+1 (i have same isssue here)

Dutaeko commented 1 month ago

+1 (i have same isssue here)

vynRoot commented 1 month ago

+1 I also have the same problem