Revert "Only allow ranges over holes when line number optimization is on"
This reverts commit 79a9c49f7a12bc5ea293cc09334159b69804e2b3.
Reason for revert: b/288405478
Change-Id: I345dc5ed313d0c9cea800dcd55afd0fc6bd68255
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 0fdb108..c6f018a 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -141,15 +141,7 @@
public enum LineNumberOptimization {
OFF,
- ON;
-
- public boolean isOff() {
- return this == OFF;
- }
-
- public boolean isOn() {
- return this == ON;
- }
+ ON
}
public enum DesugarState {
@@ -2585,7 +2577,7 @@
}
public boolean canUseDexPc2PcAsDebugInformation() {
- return isGeneratingDex() && lineNumberOptimization.isOn();
+ return isGeneratingDex() && lineNumberOptimization == LineNumberOptimization.ON;
}
// Debug entries may be dropped only if the source file content allows being omitted from
diff --git a/src/main/java/com/android/tools/r8/utils/positions/DexPositionToNoPcMappedRangeMapper.java b/src/main/java/com/android/tools/r8/utils/positions/DexPositionToNoPcMappedRangeMapper.java
index e80a0a7..a6a2a06 100644
--- a/src/main/java/com/android/tools/r8/utils/positions/DexPositionToNoPcMappedRangeMapper.java
+++ b/src/main/java/com/android/tools/r8/utils/positions/DexPositionToNoPcMappedRangeMapper.java
@@ -26,6 +26,7 @@
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.code.Position;
import com.android.tools.r8.ir.code.Position.SourcePosition;
+import com.android.tools.r8.utils.InternalOptions.LineNumberOptimization;
import java.util.ArrayList;
import java.util.List;
@@ -175,7 +176,7 @@
public DexPositionToNoPcMappedRangeMapper(AppView<?> appView) {
this.appView = appView;
- isIdentityMapping = appView.options().lineNumberOptimization.isOff();
+ isIdentityMapping = appView.options().lineNumberOptimization == LineNumberOptimization.OFF;
}
public List<MappedPosition> optimizeDexCodePositions(
diff --git a/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java b/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java
index 0ab3695..7fe3d32 100644
--- a/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java
+++ b/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java
@@ -1,3 +1,4 @@
+// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
@@ -44,6 +45,7 @@
import com.android.tools.r8.synthesis.SyntheticItems;
import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.IntBox;
+import com.android.tools.r8.utils.InternalOptions.LineNumberOptimization;
import com.android.tools.r8.utils.ListUtils;
import com.android.tools.r8.utils.OneShotCollectionConsumer;
import com.android.tools.r8.utils.OriginalSourceFiles;
@@ -54,7 +56,6 @@
import it.unimi.dsi.fastutil.ints.Int2IntSortedMap;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Comparator;
import java.util.IdentityHashMap;
import java.util.List;
import java.util.Map;
@@ -78,7 +79,7 @@
PositionRangeAllocator.createCardinalPositionRangeAllocator();
private final NonCardinalPositionRangeAllocator nonCardinalRangeCache =
PositionRangeAllocator.createNonCardinalPositionRangeAllocator();
- private final int maxGap;
+ private final int maxGap = 1000;
private MappedPositionToClassNameMapperBuilder(
AppView<?> appView, OriginalSourceFiles originalSourceFiles) {
@@ -87,7 +88,6 @@
classNameMapperBuilder = ClassNameMapper.builder();
classNameMapperBuilder.setCurrentMapVersion(
appView.options().getMapFileVersion().toMapVersionMappingInformation());
- maxGap = appView.options().lineNumberOptimization.isOn() ? 1000 : 1;
}
public static String getPrunedInlinedClassObfuscatedPrefix() {
@@ -246,7 +246,7 @@
residualMethod,
originalMethod,
originalType)) {
- assert appView.options().lineNumberOptimization.isOff()
+ assert appView.options().lineNumberOptimization == LineNumberOptimization.OFF
|| hasAtMostOnePosition(appView, definition)
|| appView.isCfByteCodePassThrough(definition);
return this;
@@ -290,8 +290,6 @@
methodSpecificMappingInformation.add(OutlineMappingInformation.builder().build());
}
- mappedPositions.sort(Comparator.comparing(MappedPosition::getObfuscatedLine));
-
// Update memberNaming with the collected positions, merging multiple positions into a
// single region whenever possible.
for (int i = 0; i < mappedPositions.size(); /* updated in body */ ) {
@@ -319,7 +317,14 @@
|| firstMappedPosition.getPosition().getOutlineCallee() != null) {
break;
}
- lastMappedPosition = currentMappedPosition;
+ // The mapped positions are not guaranteed to be in order, so maintain first and last
+ // position.
+ if (firstMappedPosition.getObfuscatedLine() > currentMappedPosition.getObfuscatedLine()) {
+ firstMappedPosition = currentMappedPosition;
+ }
+ if (lastMappedPosition.getObfuscatedLine() < currentMappedPosition.getObfuscatedLine()) {
+ lastMappedPosition = currentMappedPosition;
+ }
}
Range obfuscatedRange =
nonCardinalRangeCache.get(
@@ -380,7 +385,9 @@
}
i = j;
}
- assert mappedPositions.size() <= 1
+ // TODO(b/287210793): Enable assertion again.
+ assert true
+ || mappedPositions.size() <= 1
|| getBuilder().hasNoOverlappingRangesForSignature(residualSignature);
return this;
}
diff --git a/src/main/java/com/android/tools/r8/utils/positions/PositionRemapper.java b/src/main/java/com/android/tools/r8/utils/positions/PositionRemapper.java
index 861c9dc..3f0288f 100644
--- a/src/main/java/com/android/tools/r8/utils/positions/PositionRemapper.java
+++ b/src/main/java/com/android/tools/r8/utils/positions/PositionRemapper.java
@@ -20,6 +20,7 @@
import com.android.tools.r8.utils.CfLineToMethodMapper;
import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.InternalOptions;
+import com.android.tools.r8.utils.InternalOptions.LineNumberOptimization;
import com.android.tools.r8.utils.Pair;
import java.util.IdentityHashMap;
import java.util.Map;
@@ -33,7 +34,8 @@
static PositionRemapper getPositionRemapper(
AppView<?> appView, CfLineToMethodMapper cfLineToMethodMapper) {
- boolean identityMapping = appView.options().lineNumberOptimization.isOff();
+ boolean identityMapping =
+ appView.options().lineNumberOptimization == LineNumberOptimization.OFF;
PositionRemapper positionRemapper =
identityMapping
? new IdentityPositionRemapper()