Status Update
Comments
ja...@google.com <ja...@google.com>
cl...@google.com <cl...@google.com> #2
Something is off with the method leading to this situation.
Can you provide us with a dump of the compilation so we can debug? Here is the documentation on how to make a dump
Alternatively we would need a simple project to reproduce the issue.
It's a bit unclear to me what's going on. The SimpleInliningConstraintAnalysis is recursive but that should fine since all seen blacks are remembered and not reprocessed. It could be that the code you have just have a lot of branches leading to something which looks like infinite recursion?
se...@team.bumble.com <se...@team.bumble.com> #3
I captured a dump and tried to reproduce the original error, but now I'm getting a different stack trace:
Error: java.lang.AssertionError: During NARROWING, @NotNull java.lang.Object {com.google.android.gms.internal.ads.zzmb} < @NotNull java.lang.Object {} at Assume v1206 <- v51; not null (context: void com.google.android.gms.internal.ads.zzkb.<init>(com.google.android.gms.internal.ads.zziv, com.google.android.gms.internal.ads.zzco))
Exception in thread "main" com.android.tools.r8.CompilationFailedException: Compilation failed to complete
at Version.fakeStackEntry(Version_8.5.33.java:0)
at com.android.tools.r8.T.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:5)
at com.android.tools.r8.internal.to.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:82)
at com.android.tools.r8.internal.to.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:32)
at com.android.tools.r8.internal.to.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:31)
at com.android.tools.r8.R8.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:79)
at com.android.tools.r8.R8.run(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:3)
at com.android.tools.r8.utils.CompileDumpCompatR8.main(CompileDumpCompatR8.java:266)
Caused by: java.lang.AssertionError: During NARROWING, @NotNull java.lang.Object {com.google.android.gms.internal.ads.zzmb} < @NotNull java.lang.Object {} at Assume v1206 <- v51; not null (context: void com.google.android.gms.internal.ads.zzkb.<init>(com.google.android.gms.internal.ads.zziv, com.google.android.gms.internal.ads.zzco))
at com.android.tools.r8.internal.ul0.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:291)
at com.android.tools.r8.internal.rj0.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:134)
at com.android.tools.r8.internal.rj0.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:11)
at com.android.tools.r8.internal.rj0.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:78)
at com.android.tools.r8.internal.rj0.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:12)
at com.android.tools.r8.ir.optimize.a.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:12)
at com.android.tools.r8.ir.optimize.a.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:1)
at com.android.tools.r8.ir.optimize.p0.c(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:410)
at com.android.tools.r8.ir.optimize.q0.b(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:3)
at com.android.tools.r8.internal.Gd.b(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:2)
at com.android.tools.r8.internal.Gd.c(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:5)
at com.android.tools.r8.internal.Gd.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:2)
at com.android.tools.r8.internal.Fh0.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:63)
at com.android.tools.r8.internal.Gd.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:3)
at com.android.tools.r8.internal.Hd.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:3)
at com.android.tools.r8.internal.Tt.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:611)
at com.android.tools.r8.internal.Tt.d(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:29)
at com.android.tools.r8.internal.Tt.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:401)
at com.android.tools.r8.internal.to.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:135)
at com.android.tools.r8.internal.Tt.c(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:5)
at com.android.tools.r8.internal.Tt.b(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:16)
at com.android.tools.r8.internal.kY.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:217)
at com.android.tools.r8.internal.jY.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:48)
at com.android.tools.r8.internal.dh0.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:2)
at com.android.tools.r8.internal.dh0.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:17)
at java.base/java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1448)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
Suppressed: java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.AssertionError
at com.android.tools.r8.internal.to.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:132)
at com.android.tools.r8.R8.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:1313)
at com.android.tools.r8.R8.b(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:1)
at com.android.tools.r8.internal.to.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:28)
at com.android.tools.r8.R8.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:79)
at com.android.tools.r8.R8.run(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:3)
at com.android.tools.r8.utils.CompileDumpCompatR8.main(CompileDumpCompatR8.java:266)
Caused by: java.util.concurrent.ExecutionException: java.lang.AssertionError
at java.base/java.util.concurrent.ForkJoinTask.get(ForkJoinTask.java:1006)
at com.android.tools.r8.internal.eh0.awaitFutures(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:4)
at com.android.tools.r8.internal.Qg0.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:2)
at com.android.tools.r8.internal.Qg0.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:13)
at com.android.tools.r8.internal.Qg0.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:14)
at com.android.tools.r8.internal.dh0.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:15)
at com.android.tools.r8.internal.dh0.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:5)
at com.android.tools.r8.internal.dh0.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:1)
at com.android.tools.r8.internal.jY.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:27)
at com.android.tools.r8.internal.kY.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:50)
at com.android.tools.r8.internal.kY.b(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:4)
at com.android.tools.r8.R8.a(R8_8.5.33_ad460409bfce2fe329c672ceed1e015e505f16037727fb982221121c7cd2a1ee:380)
... 5 more
Caused by: java.lang.AssertionError
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at java.base/java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:603)
... 17 more
[CIRCULAR REFERENCE:java.lang.AssertionError: During NARROWING, @NotNull java.lang.Object {com.google.android.gms.internal.ads.zzmb} < @NotNull java.lang.Object {} at Assume v1206 <- v51; not null (context: void com.google.android.gms.internal.ads.zzkb.<init>(com.google.android.gms.internal.ads.zziv, com.google.android.gms.internal.ads.zzco))]
com.google.android.gms.internal.ads.zzmb
is from
ch...@google.com <ch...@google.com> #4
Would it be possible for you to share the dump you captured privately with
How did you get the error in ./tools/compiledump.py -d mydump.zip
as mentioned in StackOverflowError
from the dump file using ./tools/compiledump.py -d mydump.zip --disable-assertions
.
se...@team.bumble.com <se...@team.bumble.com> #5
Re #4, would it be possible to get an NDA signed so I could share a compiler dump? Alternatively, I could help to find the culprit using some extra logging.
I added logging before the call to analyzeInstructionsInBlock
on line 185. I can see that the following block gets processed more than 3.4k times until R8 crashes with StackOverflowError
:
analyzeInstructionsInBlock currentDepth: 0, block: block 2, pred-counts: 1, succ-count: 1, filled: true, sealed: false
predecessors: 0
successors: 3 (no try/catch successors)
no phis
#0:hashCode;0:m: -1: ConstNumber v9(1237) <- 1237 (INT)
: -1: Goto block 3
Does this give any clues?
ch...@google.com <ch...@google.com> #6
Since you've already cloned the repo and modified the source, it should be rather straight-forward to diagnose the issue. Did you checkout main or the 8.5 branch?
Does the method contain any sensitive code, or would it be possible for you to share the full IR of the method that is causing the issue (by calling code.toString()
)?
If you can't share the code in full, could you elide the instructions you can't share, but leave the block structure? Having the complete block structure might be enough to get an idea of what is happening.
One odd thing from looking at the stack trace in analyzeInstructionsInBlock
is that this method has the following prelude, where there is logic in place to backtrack if the block has already been seen.
private SimpleInliningConstraintWithDepth analyzeInstructionsInBlock(
BasicBlock block, int instructionDepth, InstructionIterator instructionIterator) {
// If we reach a block that has already been seen, or one that has catch handlers, then give up.
if (!seen.add(block) || block.hasCatchHandlers()) {
return SimpleInliningConstraintWithDepth.getNever();
}
...
Can you confirm whether, after hitting analyzeInstructionsInBlock
with the block above in return SimpleInliningConstraintWithDepth.getNever()
?
se...@team.bumble.com <se...@team.bumble.com> #7
I'm on the main branch of R8. Looks like R8 is running out of stack when analysing a long method which looks as follows:
fun mapDrawableId(id: Int): Int? =
when (id) {
R.drawable.my_drawable_1 -> R.drawable.my_new_drawable_1
R.drawable.my_drawable_2 -> R.drawable.my_new_drawable_2
R.drawable.my_drawable_3 -> R.drawable.my_new_drawable_3
R.drawable.my_drawable_4 -> R.drawable.my_new_drawable_4
R.drawable.my_drawable_5 -> R.drawable.my_new_drawable_5
// 400+ branches
else -> null
}
The default stack size is 1MB on Linux. I doubled it to 2MB, and StackOverflowError
no longer occurs.
I wasn't able to reproduce the issue on a trivial program with a long when expression, it seems that the program has to be more complex.
se...@team.bumble.com <se...@team.bumble.com> #8
Here's the code I tried to reproduce the issue with.
R8 rules:
-keep,allowobfuscation,allowoptimization class com.example.MainKt {
*** main();
}
ap...@google.com <ap...@google.com> #9
Branch: main
commit 734c154615c1e98faf34f8d2a098ae869fd3d7fa
Author: Christoffer Adamsen <christofferqa@google.com>
Date: Mon Aug 19 09:27:41 2024
Limit simple inlining constraint analysis
Bug:
Change-Id: Ifd9460d53542d64cf87272ac1d5c61b0ee608e24
M src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraint.java
M src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraintAnalysis.java
M src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraintConjunction.java
M src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraintDisjunction.java
ch...@google.com <ch...@google.com>
ap...@google.com <ap...@google.com> #10
Branch: 8.5
commit ae30be8ef8b190b0790bb5c2481d82830d925d2d
Author: Christoffer Adamsen <christofferqa@google.com>
Date: Mon Aug 19 13:22:57 2024
Limit simple inlining constraint analysis
Bug:
Change-Id: Ifd9460d53542d64cf87272ac1d5c61b0ee608e24
M src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraint.java
M src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraintAnalysis.java
M src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraintConjunction.java
M src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraintDisjunction.java
ap...@google.com <ap...@google.com> #11
Branch: 8.5
commit 645e4350c821f1de69440b9ddbdfc97e8e7398bd
Author: Christoffer Adamsen <christofferqa@google.com>
Date: Mon Aug 19 13:23:06 2024
Version 8.5.42
Bug:
Change-Id: Iad7e853d0a7c4f6d7ac23072069c5feee64aa382
M src/main/java/com/android/tools/r8/Version.java
ap...@google.com <ap...@google.com> #12
Branch: 8.6
commit 1d4983e3a532ae3a8feba11afc12dec8f56c4f78
Author: Christoffer Adamsen <christofferqa@google.com>
Date: Mon Aug 19 13:23:18 2024
Version 8.6.25
Bug:
Change-Id: I65d5a009075669d68eff3080a39611ff792374ac
M src/main/java/com/android/tools/r8/Version.java
ap...@google.com <ap...@google.com> #13
Branch: 8.6
commit 184f437879db34a69d098aa071560d9df2092344
Author: Christoffer Adamsen <christofferqa@google.com>
Date: Mon Aug 19 13:23:10 2024
Limit simple inlining constraint analysis
Bug:
Change-Id: Ifd9460d53542d64cf87272ac1d5c61b0ee608e24
M src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraint.java
M src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraintAnalysis.java
M src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraintConjunction.java
M src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraintDisjunction.java
ap...@google.com <ap...@google.com> #14
Branch: 8.5
commit ae30be8ef8b190b0790bb5c2481d82830d925d2d
Author: Christoffer Adamsen <christofferqa@google.com>
Date: Mon Aug 19 13:22:57 2024
Limit simple inlining constraint analysis
Bug:
Change-Id: Ifd9460d53542d64cf87272ac1d5c61b0ee608e24
M src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraint.java
M src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraintAnalysis.java
M src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraintConjunction.java
M src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraintDisjunction.java
an...@google.com <an...@google.com> #15
Thank you for your patience while our engineering team worked to resolve this issue. A fix for this issue is now available in:
- Android Studio Koala Feature Drop | 2024.1.2 Patch 1
- Android Gradle Plugin 8.6.1
We encourage you to try the latest update.
If you notice further issues or have questions, please file a new bug report.
Thank you for taking the time to submit feedback — we really appreciate it!
Description
AGP: 8.5.1
R8 versions tested: 8.5.27 and 8.5.33
AGP 8.4.2/R8 8.4.26 worked fine.
The failure happens in about 20% of release builds minified by R8, not every time.
Stacktrace: