Skip to content

Fix Type inference error: updates count limit reached#2629

Merged
skylot merged 2 commits intoskylot:masterfrom
Away-pp:master
Sep 9, 2025
Merged

Fix Type inference error: updates count limit reached#2629
skylot merged 2 commits intoskylot:masterfrom
Away-pp:master

Conversation

@Away-pp
Copy link
Copy Markdown
Contributor

@Away-pp Away-pp commented Sep 8, 2025

  • Fix for the "Type inference error: updates count limit reached"
  • Users will be able to choose the limit and possibly avoid this error
  • Adding options on decompilation settings

Description

This is a fix for the '"Type inference error: updates count limit reached" found on #2585
I did not test with the method passed because only the failed method was provided (not sure how to test in this case).
However, I have tested with the following code https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/content/pm/PackageParser.java#4028

Without modifying type update limit parameter
/*  JADX ERROR: Type inference failed
        jadx.core.utils.exceptions.JadxOverflowException: Type inference error: updates count limit reachedwith updateSeq = 6761. Try increasing the type limit count on preferences.
        	at jadx.core.utils.ErrorsCounter.addError(ErrorsCounter.java:59)
        	at jadx.core.utils.ErrorsCounter.error(ErrorsCounter.java:31)
        	at jadx.core.dex.attributes.nodes.NotificationAttrNode.addError(NotificationAttrNode.java:19)
        	at jadx.core.dex.visitors.typeinference.TypeInferenceVisitor.visit(TypeInferenceVisitor.java:77)
        */
    private boolean parseSplitApplication(android.p035content.p038pm.PackageParser.C1185Package r24, android.p035content.p047res.C1259Resources r25, android.p035content.p047res.XmlResourceParser r26, int r27, int r28, java.lang.String[] r29) throws org.xmlpull.v1.XmlPullParserException, java.io.IOException {
        /*
            r23 = this;
            r15 = r23
            r14 = r24
            r13 = r25
            r12 = r26
            r11 = r29
            int[] r0 = com.p336android.p349internal.C7194R.styleable.AndroidManifestApplication
            android.content.res.TypedArray r0 = r13.obtainAttributes(r12, r0)
            r1 = 7
            r10 = 1
            boolean r1 = r0.getBoolean(r1, r10)
            r9 = 4
            if (r1 == 0) goto L20
            int[] r1 = r14.splitFlags
            r2 = r1[r28]
            r2 = r2 | r9
            r1[r28] = r2
        L20:
            r1 = 46
            java.lang.String r8 = r0.m3471getString(r1)
            r7 = -108(0xffffffffffffff94, float:NaN)
            r5 = 0
            if (r8 == 0) goto L4a
            boolean r1 = com.p336android.p349internal.p464os.ClassLoaderFactory.isValidClassLoaderName(r8)
            if (r1 == 0) goto L32
            goto L4a
        L32:
            java.lang.StringBuilder r1 = new java.lang.StringBuilder
            r1.<init>()
            java.lang.String r2 = "Invalid class loader name: "
            java.lang.StringBuilder r1 = r1.append(r2)
            java.lang.StringBuilder r1 = r1.append(r8)
            java.lang.String r1 = r1.toString()
            r11[r5] = r1
            r15.mParseError = r7
            return r5
        L4a:
            android.content.pm.ApplicationInfo r1 = r14.applicationInfo
            java.lang.String[] r1 = r1.splitClassLoaderNames
            r1[r28] = r8
            int r4 = r26.getDepth()
            r16 = r0
        L56:
            int r0 = r26.next()
            r3 = r0
            if (r0 == r10) goto L297
            r0 = 3
            if (r3 != r0) goto L74
            int r1 = r26.getDepth()
            if (r1 <= r4) goto L67
            goto L74
        L67:
            r21 = r3
            r22 = r4
            r18 = r8
            r7 = r11
            r4 = r12
            r5 = r13
            r1 = r14
            r0 = r15
            goto L2a2
        L74:
            if (r3 == r0) goto L27b
            if (r3 != r9) goto L85
            r22 = r4
            r18 = r8
            r4 = r12
            r1 = r14
            r0 = r15
            r15 = r5
            r14 = r7
            r7 = r11
            r5 = r13
            goto L288
        L85:
            r17 = 0
            android.content.pm.PackageParser$CachedComponentArgs r6 = new android.content.pm.PackageParser$CachedComponentArgs
            r0 = 0
            r6.<init>()
            java.lang.String r2 = r26.getName()
            java.lang.String r0 = "activity"
            boolean r0 = r2.equals(r0)
            if (r0 == 0) goto Ld8
            r18 = 0
            boolean r1 = r14.baseHardwareAccelerated
            r0 = r23
            r19 = r1
            r1 = r24
            r20 = r2
            r2 = r25
            r21 = r3
            r3 = r26
            r22 = r4
            r4 = r27
            r13 = r5
            r5 = r29
            r13 = r7
            r7 = r18
            r18 = r8
            r8 = r19
            android.content.pm.PackageParser$Activity r0 = r0.parseActivity(r1, r2, r3, r4, r5, r6, r7, r8)
            if (r0 != 0) goto Lc3
            r15.mParseError = r13
            r1 = 0
            return r1
        Lc3:
            r1 = 0
            java.util.ArrayList<android.content.pm.PackageParser$Activity> r2 = r14.activities
            r2.add(r0)
            android.content.pm.ActivityInfo r0 = r0.f3843info
            r5 = r25
            r3 = r0
            r7 = r11
            r4 = r12
            r0 = r15
            r2 = r20
            r15 = r1
            r1 = r14
            r14 = r13
            goto L22a
        Ld8:
            r20 = r2
            r21 = r3
            r22 = r4
            r1 = r5
            r13 = r7
            r18 = r8
            java.lang.String r0 = "receiver"
            boolean r0 = r2.equals(r0)
            if (r0 == 0) goto L11e
            r0 = 1
            r3 = 0
            r7 = r23
            r8 = r24
            r4 = r9
            r9 = r25
            r5 = r10
            r10 = r26
            r1 = r11
            r11 = r27
            r4 = r12
            r12 = r29
            r5 = r25
            r13 = r6
            r1 = r14
            r14 = r0
            r0 = r15
            r15 = r3
            android.content.pm.PackageParser$Activity r3 = r7.parseActivity(r8, r9, r10, r11, r12, r13, r14, r15)
            if (r3 != 0) goto L110
            r14 = -108(0xffffffffffffff94, float:NaN)
            r0.mParseError = r14
            r15 = 0
            return r15
        L110:
            r14 = -108(0xffffffffffffff94, float:NaN)
            r15 = 0
            java.util.ArrayList<android.content.pm.PackageParser$Activity> r7 = r1.f3871receivers
            r7.add(r3)
            android.content.pm.ActivityInfo r3 = r3.f3843info
            r7 = r29
            goto L22a
        L11e:
            r5 = r25
            r4 = r12
            r0 = r15
            r15 = r1
            r1 = r14
            r14 = r13
            java.lang.String r3 = "service"
            boolean r3 = r2.equals(r3)
            if (r3 == 0) goto L14f
            r7 = r23
            r8 = r24
            r9 = r25
            r10 = r26
            r11 = r27
            r12 = r29
            r13 = r6
            android.content.pm.PackageParser$Service r3 = r7.parseService(r8, r9, r10, r11, r12, r13)
            if (r3 != 0) goto L144
            r0.mParseError = r14
            return r15
        L144:
            java.util.ArrayList<android.content.pm.PackageParser$Service> r7 = r1.f3872services
            r7.add(r3)
            android.content.pm.ServiceInfo r3 = r3.f3899info
            r7 = r29
            goto L22a
        L14f:
            java.lang.String r3 = "provider"
            boolean r3 = r2.equals(r3)
            if (r3 == 0) goto L179
            r7 = r23
            r8 = r24
            r9 = r25
            r10 = r26
            r11 = r27
            r12 = r29
            r13 = r6
            android.content.pm.PackageParser$Provider r3 = r7.parseProvider(r8, r9, r10, r11, r12, r13)
            if (r3 != 0) goto L16e
            r0.mParseError = r14
            return r15
        L16e:
            java.util.ArrayList<android.content.pm.PackageParser$Provider> r7 = r1.f3870providers
            r7.add(r3)
            android.content.pm.ProviderInfo r3 = r3.f3895info
            r7 = r29
            goto L22a
        L179:
            java.lang.String r3 = "activity-alias"
            boolean r3 = r2.equals(r3)
            if (r3 == 0) goto L1a2
            r7 = r23
            r8 = r24
            r9 = r25
            r10 = r26
            r11 = r27
            r12 = r29
            r13 = r6
            android.content.pm.PackageParser$Activity r3 = r7.parseActivityAlias(r8, r9, r10, r11, r12, r13)
            if (r3 != 0) goto L197
            r0.mParseError = r14
            return r15
        L197:
            java.util.ArrayList<android.content.pm.PackageParser$Activity> r7 = r1.activities
            r7.add(r3)
            android.content.pm.ActivityInfo r3 = r3.f3843info
            r7 = r29
            goto L22a
        L1a2:
            java.lang.String r3 = r26.getName()
            java.lang.String r7 = "meta-data"
            boolean r3 = r3.equals(r7)
            if (r3 == 0) goto L1be
            android.os.Bundle r3 = r1.mAppMetaData
            r7 = r29
            android.os.Bundle r3 = r0.parseMetaData(r5, r4, r3, r7)
            r1.mAppMetaData = r3
            if (r3 != 0) goto L228
            r0.mParseError = r14
            return r15
        L1be:
            r7 = r29
            java.lang.String r3 = "uses-static-library"
            boolean r3 = r2.equals(r3)
            if (r3 == 0) goto L1d0
            boolean r3 = r0.parseUsesStaticLibrary(r1, r5, r4, r7)
            if (r3 != 0) goto L228
            return r15
        L1d0:
            java.lang.String r3 = "uses-library"
            boolean r3 = r2.equals(r3)
            if (r3 == 0) goto L21c
            int[] r3 = com.p336android.p349internal.C7194R.styleable.AndroidManifestUsesLibrary
            android.content.res.TypedArray r3 = r5.obtainAttributes(r4, r3)
            java.lang.String r8 = r3.getNonResourceString(r15)
            r9 = 1
            boolean r10 = r3.getBoolean(r9, r9)
            r3.m3478recycle()
            if (r8 == 0) goto L214
            java.lang.String r8 = r8.intern()
            if (r10 == 0) goto L204
            java.util.ArrayList<java.lang.String> r9 = r1.usesLibraries
            java.util.ArrayList r9 = com.p336android.p349internal.p483util.ArrayUtils.m25843add(r9, r8)
            r1.usesLibraries = r9
            java.util.ArrayList<java.lang.String> r9 = r1.usesOptionalLibraries
            java.util.ArrayList r9 = com.p336android.p349internal.p483util.ArrayUtils.m25865remove(r9, r8)
            r1.usesOptionalLibraries = r9
            goto L214
        L204:
            java.util.ArrayList<java.lang.String> r9 = r1.usesLibraries
            boolean r9 = com.p336android.p349internal.p483util.ArrayUtils.m25847contains(r9, r8)
            if (r9 != 0) goto L214
            java.util.ArrayList<java.lang.String> r9 = r1.usesOptionalLibraries
            java.util.ArrayList r9 = com.p336android.p349internal.p483util.ArrayUtils.m25843add(r9, r8)
            r1.usesOptionalLibraries = r9
        L214:
            com.p336android.p349internal.p483util.C8037XmlUtils.skipCurrentTag(r26)
            r16 = r3
            r3 = r17
            goto L22a
        L21c:
            java.lang.String r3 = "uses-package"
            boolean r3 = r2.equals(r3)
            if (r3 == 0) goto L245
            com.p336android.p349internal.p483util.C8037XmlUtils.skipCurrentTag(r26)
        L228:
            r3 = r17
        L22a:
            if (r3 == 0) goto L236
            java.lang.String r8 = r3.f3643splitName
            if (r8 != 0) goto L236
            java.lang.String[] r8 = r1.splitNames
            r8 = r8[r28]
            r3.f3643splitName = r8
        L236:
            r12 = r4
            r13 = r5
            r11 = r7
            r7 = r14
            r5 = r15
            r8 = r18
            r4 = r22
            r9 = 4
            r10 = 1
            r15 = r0
            r14 = r1
            goto L56
        L245:
            java.lang.StringBuilder r3 = new java.lang.StringBuilder
            r3.<init>()
            java.lang.String r8 = "Unknown element under <application>: "
            java.lang.StringBuilder r3 = r3.append(r8)
            java.lang.StringBuilder r3 = r3.append(r2)
            java.lang.String r8 = " at "
            java.lang.StringBuilder r3 = r3.append(r8)
            java.lang.String r8 = r0.mArchiveSourcePath
            java.lang.StringBuilder r3 = r3.append(r8)
            java.lang.String r8 = " "
            java.lang.StringBuilder r3 = r3.append(r8)
            java.lang.String r8 = r26.getPositionDescription()
            java.lang.StringBuilder r3 = r3.append(r8)
            java.lang.String r3 = r3.toString()
            java.lang.String r8 = "PackageParser"
            android.p322util.C6292Slog.m18976w(r8, r3)
            com.p336android.p349internal.p483util.C8037XmlUtils.skipCurrentTag(r26)
            goto L288
        L27b:
            r21 = r3
            r22 = r4
            r18 = r8
            r4 = r12
            r1 = r14
            r0 = r15
            r15 = r5
            r14 = r7
            r7 = r11
            r5 = r13
        L288:
            r12 = r4
            r13 = r5
            r11 = r7
            r7 = r14
            r5 = r15
            r8 = r18
            r4 = r22
            r9 = 4
            r10 = 1
            r15 = r0
            r14 = r1
            goto L56
        L297:
            r21 = r3
            r22 = r4
            r18 = r8
            r7 = r11
            r4 = r12
            r5 = r13
            r1 = r14
            r0 = r15
        L2a2:
            r2 = 1
            return r2
        */
        throw new UnsupportedOperationException("Method not decompiled: android.p035content.p038pm.PackageParser.parseSplitApplication(android.content.pm.PackageParser$Package, android.content.res.Resources, android.content.res.XmlResourceParser, int, int, java.lang.String[]):boolean");
    }
With modifying
private boolean parseSplitApplication(C1185Package c1185Package, C1259Resources c1259Resources, XmlResourceParser xmlResourceParser, int i, int i2, String[] strArr) throws XmlPullParserException, IOException {
        int i3;
        String str;
        XmlResourceParser xmlResourceParser2;
        C1185Package c1185Package2;
        PackageParser packageParser;
        boolean z;
        int i4;
        String[] strArr2;
        C1259Resources c1259Resources2;
        ComponentInfo componentInfo;
        PackageParser packageParser2 = this;
        C1185Package c1185Package3 = c1185Package;
        C1259Resources c1259Resources3 = c1259Resources;
        XmlResourceParser xmlResourceParser3 = xmlResourceParser;
        String[] strArr3 = strArr;
        TypedArray typedArrayObtainAttributes = c1259Resources3.obtainAttributes(xmlResourceParser3, C7194R.styleable.AndroidManifestApplication);
        int i5 = 1;
        int i6 = 4;
        if (typedArrayObtainAttributes.getBoolean(7, true)) {
            int[] iArr = c1185Package3.splitFlags;
            iArr[i2] = iArr[i2] | 4;
        }
        String strM3471getString = typedArrayObtainAttributes.m3471getString(46);
        int i7 = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        boolean z2 = false;
        if (strM3471getString == null || ClassLoaderFactory.isValidClassLoaderName(strM3471getString)) {
            c1185Package3.applicationInfo.splitClassLoaderNames[i2] = strM3471getString;
            int depth = xmlResourceParser.getDepth();
            while (true) {
                int next = xmlResourceParser.next();
                if (next != i5) {
                    if (next != 3 || xmlResourceParser.getDepth() > depth) {
                        if (next == 3) {
                            i3 = depth;
                            str = strM3471getString;
                            xmlResourceParser2 = xmlResourceParser3;
                            c1185Package2 = c1185Package3;
                            packageParser = packageParser2;
                            z = z2;
                            i4 = i7;
                            strArr2 = strArr3;
                            c1259Resources2 = c1259Resources3;
                        } else if (next == i6) {
                            i3 = depth;
                            str = strM3471getString;
                            xmlResourceParser2 = xmlResourceParser3;
                            c1185Package2 = c1185Package3;
                            packageParser = packageParser2;
                            z = z2;
                            i4 = i7;
                            strArr2 = strArr3;
                            c1259Resources2 = c1259Resources3;
                        } else {
                            CachedComponentArgs cachedComponentArgs = new CachedComponentArgs();
                            String name = xmlResourceParser.getName();
                            if (name.equals("activity")) {
                                i3 = depth;
                                int i8 = i7;
                                str = strM3471getString;
                                C1180Activity activity = parseActivity(c1185Package, c1259Resources, xmlResourceParser, i, strArr, cachedComponentArgs, false, c1185Package3.baseHardwareAccelerated);
                                if (activity == null) {
                                    packageParser2.mParseError = i8;
                                    return false;
                                }
                                c1185Package3.activities.add(activity);
                                c1259Resources2 = c1259Resources;
                                componentInfo = activity.f3843info;
                                strArr2 = strArr3;
                                xmlResourceParser2 = xmlResourceParser3;
                                packageParser = packageParser2;
                                z = false;
                                c1185Package2 = c1185Package3;
                                i4 = i8;
                            } else {
                                i3 = depth;
                                boolean z3 = z2;
                                int i9 = i7;
                                str = strM3471getString;
                                if (name.equals(IncidentManager.URI_PARAM_RECEIVER_CLASS)) {
                                    xmlResourceParser2 = xmlResourceParser3;
                                    c1259Resources2 = c1259Resources;
                                    c1185Package2 = c1185Package3;
                                    packageParser = packageParser2;
                                    C1180Activity activity2 = parseActivity(c1185Package, c1259Resources, xmlResourceParser, i, strArr, cachedComponentArgs, true, false);
                                    if (activity2 == null) {
                                        packageParser.mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
                                        return false;
                                    }
                                    i4 = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
                                    z = false;
                                    c1185Package2.f3871receivers.add(activity2);
                                    componentInfo = activity2.f3843info;
                                    strArr2 = strArr;
                                } else {
                                    c1259Resources2 = c1259Resources;
                                    xmlResourceParser2 = xmlResourceParser3;
                                    packageParser = packageParser2;
                                    z = z3;
                                    c1185Package2 = c1185Package3;
                                    i4 = i9;
                                    if (name.equals("service")) {
                                        C1189Service service = parseService(c1185Package, c1259Resources, xmlResourceParser, i, strArr, cachedComponentArgs);
                                        if (service == null) {
                                            packageParser.mParseError = i4;
                                            return z;
                                        }
                                        c1185Package2.f3872services.add(service);
                                        componentInfo = service.f3899info;
                                        strArr2 = strArr;
                                    } else if (name.equals("provider")) {
                                        C1188Provider provider = parseProvider(c1185Package, c1259Resources, xmlResourceParser, i, strArr, cachedComponentArgs);
                                        if (provider == null) {
                                            packageParser.mParseError = i4;
                                            return z;
                                        }
                                        c1185Package2.f3870providers.add(provider);
                                        componentInfo = provider.f3895info;
                                        strArr2 = strArr;
                                    } else if (name.equals("activity-alias")) {
                                        C1180Activity activityAlias = parseActivityAlias(c1185Package, c1259Resources, xmlResourceParser, i, strArr, cachedComponentArgs);
                                        if (activityAlias == null) {
                                            packageParser.mParseError = i4;
                                            return z;
                                        }
                                        c1185Package2.activities.add(activityAlias);
                                        componentInfo = activityAlias.f3843info;
                                        strArr2 = strArr;
                                    } else {
                                        if (xmlResourceParser.getName().equals("meta-data")) {
                                            strArr2 = strArr;
                                            BaseBundleC3984Bundle metaData = packageParser.parseMetaData(c1259Resources2, xmlResourceParser2, c1185Package2.mAppMetaData, strArr2);
                                            c1185Package2.mAppMetaData = metaData;
                                            if (metaData == null) {
                                                packageParser.mParseError = i4;
                                                return z;
                                            }
                                        } else {
                                            strArr2 = strArr;
                                            if (name.equals("uses-static-library")) {
                                                if (!packageParser.parseUsesStaticLibrary(c1185Package2, c1259Resources2, xmlResourceParser2, strArr2)) {
                                                    return z;
                                                }
                                            } else if (name.equals("uses-library")) {
                                                TypedArray typedArrayObtainAttributes2 = c1259Resources2.obtainAttributes(xmlResourceParser2, C7194R.styleable.AndroidManifestUsesLibrary);
                                                String nonResourceString = typedArrayObtainAttributes2.getNonResourceString(z ? 1 : 0);
                                                boolean z4 = typedArrayObtainAttributes2.getBoolean(1, true);
                                                typedArrayObtainAttributes2.m3478recycle();
                                                if (nonResourceString != null) {
                                                    String strIntern = nonResourceString.intern();
                                                    if (z4) {
                                                        c1185Package2.usesLibraries = ArrayUtils.m25843add(c1185Package2.usesLibraries, strIntern);
                                                        c1185Package2.usesOptionalLibraries = ArrayUtils.m25865remove(c1185Package2.usesOptionalLibraries, strIntern);
                                                    } else if (!ArrayUtils.m25847contains(c1185Package2.usesLibraries, strIntern)) {
                                                        c1185Package2.usesOptionalLibraries = ArrayUtils.m25843add(c1185Package2.usesOptionalLibraries, strIntern);
                                                    }
                                                }
                                                C8037XmlUtils.skipCurrentTag(xmlResourceParser);
                                                componentInfo = null;
                                            } else if (name.equals("uses-package")) {
                                                C8037XmlUtils.skipCurrentTag(xmlResourceParser);
                                            } else {
                                                C6292Slog.m18976w(f3838TAG, "Unknown element under <application>: " + name + " at " + packageParser.mArchiveSourcePath + " " + xmlResourceParser.getPositionDescription());
                                                C8037XmlUtils.skipCurrentTag(xmlResourceParser);
                                            }
                                        }
                                        componentInfo = null;
                                    }
                                }
                            }
                            if (componentInfo != null && componentInfo.f3643splitName == null) {
                                componentInfo.f3643splitName = c1185Package2.splitNames[i2];
                            }
                            xmlResourceParser3 = xmlResourceParser2;
                            c1259Resources3 = c1259Resources2;
                            strArr3 = strArr2;
                            i7 = i4;
                            z2 = z;
                            strM3471getString = str;
                            depth = i3;
                            i6 = 4;
                            i5 = 1;
                            packageParser2 = packageParser;
                            c1185Package3 = c1185Package2;
                        }
                        xmlResourceParser3 = xmlResourceParser2;
                        c1259Resources3 = c1259Resources2;
                        strArr3 = strArr2;
                        i7 = i4;
                        z2 = z;
                        strM3471getString = str;
                        depth = i3;
                        i6 = 4;
                        i5 = 1;
                        packageParser2 = packageParser;
                        c1185Package3 = c1185Package2;
                    } else {
                        return true;
                    }
                } else {
                    return true;
                }
            }
        } else {
            strArr3[0] = "Invalid class loader name: " + strM3471getString;
            packageParser2.mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
            return false;
        }
    }

Anyway, I believe the issue presented on #2585 was that there was no proper way of setting the type update limit variable, so I am putting as fixed.

Fixes #2585

* Fix for the "Type inference error: updates count limit reached"
* Users will be able to choose the limit and possibly avoid this error
* Adding options on decompilation settings
Updating README.md with new type update limit parameter
@skylot
Copy link
Copy Markdown
Owner

skylot commented Sep 9, 2025

@Away-pp thanks, but this PR looks like not a fix but a workaround.
For a proper fix, a root cause of abnormal amount of updates should be investigated.
Also, instead an exception a warning with a correct type inference stop should be implemented.
I will open a new issue with detail description and hope I will implement these some day 🙂

Anyway, your PR is good. But next time, please use a different branch (not master) as your PR source, this allows me to apply small fixes directly in PR.

@skylot skylot merged commit f61d90e into skylot:master Sep 9, 2025
4 checks passed
@Away-pp
Copy link
Copy Markdown
Contributor Author

Away-pp commented Sep 10, 2025

Hi @skylot . I agree with you, this is indeed a workaround and not a proper fix.
Sorry for putting on master, I will be careful next time.
Thank you for the quick review.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[core] Type inference error: updates count limit reached

2 participants