Assert that we do not process IR code twice in debug mode
Bug: 158728582
Bug: 158818229
Change-Id: I7c9e6f4a12b0e724b95f9ec8e2a2537b56147a36
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 35760b4..c53b686 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -741,14 +741,17 @@
enumUnboxer.finishAnalysis();
enumUnboxer.unboxEnums(postMethodProcessorBuilder, executorService, feedback);
}
- new TrivialFieldAccessReprocessor(appView.withLiveness(), postMethodProcessorBuilder)
- .run(executorService, feedback, timing);
+ if (!options.debug) {
+ new TrivialFieldAccessReprocessor(appView.withLiveness(), postMethodProcessorBuilder)
+ .run(executorService, feedback, timing);
+ }
timing.begin("IR conversion phase 2");
graphLenseForIR = appView.graphLense();
PostMethodProcessor postMethodProcessor =
postMethodProcessorBuilder.build(appView.withLiveness(), executorService, timing);
if (postMethodProcessor != null) {
+ assert !options.debug;
postMethodProcessor.forEachWave(feedback, executorService);
feedback.updateVisibleOptimizationInfo();
assert graphLenseForIR == appView.graphLense();
@@ -1193,6 +1196,10 @@
}
if (method.isProcessed()) {
+ // We loose locals information when processing dex code, so if in debug mode only process
+ // synthesized methods.
+ // TODO(b/158818229): Check if the synthesized check is needed.
+ assert !isDebugMode || method.isD8R8Synthesized();
assert !appView.enableWholeProgramOptimizations()
|| !appView.appInfo().withLiveness().neverReprocess.contains(method.method);
} else {