Assert that D8 never inserts zero-line numbers in CF output.
Bug: b/260389461
Change-Id: I43cc564afb87f3151c5a6319b2f414fa6e3f0ccc
diff --git a/src/main/java/com/android/tools/r8/graph/CfCode.java b/src/main/java/com/android/tools/r8/graph/CfCode.java
index cb150e6..5b71a42 100644
--- a/src/main/java/com/android/tools/r8/graph/CfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/CfCode.java
@@ -400,18 +400,25 @@
private static class PrunePreambleMethodVisitor extends MethodVisitor {
+ private final AppView<?> appView;
private boolean inPreamble = true;
- public PrunePreambleMethodVisitor(MethodVisitor methodVisitor) {
+ public PrunePreambleMethodVisitor(MethodVisitor methodVisitor, AppView<?> appView) {
super(InternalOptions.ASM_VERSION, methodVisitor);
+ this.appView = appView;
}
@Override
public void visitLineNumber(int line, Label start) {
- if (!inPreamble || line != 0) {
- inPreamble = false;
- super.visitLineNumber(line, start);
+ if (line == 0) {
+ if (inPreamble) {
+ inPreamble = false;
+ return;
+ }
+ // We must be in R8 if inserting a zero-line entry outside the method preamble.
+ assert appView.enableWholeProgramOptimizations();
}
+ super.visitLineNumber(line, start);
}
}
@@ -440,7 +447,8 @@
|| (appView.enableWholeProgramOptimizations()
&& classFileVersion.isEqualTo(CfVersion.V1_6)
&& !options.shouldKeepStackMapTable());
- PrunePreambleMethodVisitor prunePreambleVisitor = new PrunePreambleMethodVisitor(visitor);
+ PrunePreambleMethodVisitor prunePreambleVisitor =
+ new PrunePreambleMethodVisitor(visitor, appView);
for (CfInstruction instruction : instructions) {
if (discardFrames && instruction instanceof CfFrame) {
continue;