Use original method signatures in getOutermostCaller() checks
Change-Id: Id6d026c1bf160ef05a0c87546bc9dd6ba7b9effb
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 ed002ea..e41120d 100644
--- a/src/main/java/com/android/tools/r8/graph/CfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/CfCode.java
@@ -241,14 +241,11 @@
new CfSourceCode(
this,
encodedMethod,
+ graphLense.getOriginalMethodSignature(encodedMethod.method),
callerPosition,
origin,
options.lineNumberOptimization == LineNumberOptimization.ON);
- IRBuilder builder =
- (generator == null)
- ? new IRBuilder(encodedMethod, appInfo, source, options)
- : new IRBuilder(encodedMethod, appInfo, source, options, generator);
- return builder.build();
+ return new IRBuilder(encodedMethod, appInfo, source, options, generator).build();
}
@Override
diff --git a/src/main/java/com/android/tools/r8/graph/DexCode.java b/src/main/java/com/android/tools/r8/graph/DexCode.java
index 7c6e01e..4a0a483 100644
--- a/src/main/java/com/android/tools/r8/graph/DexCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DexCode.java
@@ -171,7 +171,11 @@
Origin origin) {
DexSourceCode source =
new DexSourceCode(
- this, encodedMethod, null, options.lineNumberOptimization == LineNumberOptimization.ON);
+ this,
+ encodedMethod,
+ graphLense.getOriginalMethodSignature(encodedMethod.method),
+ null,
+ options.lineNumberOptimization == LineNumberOptimization.ON);
IRBuilder builder = new IRBuilder(encodedMethod, appInfo, source, options);
return builder.build();
}
@@ -189,6 +193,7 @@
new DexSourceCode(
this,
encodedMethod,
+ graphLense.getOriginalMethodSignature(encodedMethod.method),
callerPosition,
options.lineNumberOptimization == LineNumberOptimization.ON);
IRBuilder builder =
diff --git a/src/main/java/com/android/tools/r8/graph/JarCode.java b/src/main/java/com/android/tools/r8/graph/JarCode.java
index ef0dbf7..28143ad 100644
--- a/src/main/java/com/android/tools/r8/graph/JarCode.java
+++ b/src/main/java/com/android/tools/r8/graph/JarCode.java
@@ -162,13 +162,14 @@
if (!options.debug) {
node.localVariables.clear();
}
- JarSourceCode source = new JarSourceCode(
- method.getHolder(), node, application, encodedMethod.method, callerPosition);
- IRBuilder builder =
- (generator == null)
- ? new IRBuilder(encodedMethod, appInfo, source, options)
- : new IRBuilder(encodedMethod, appInfo, source, options, generator);
- return builder.build();
+ JarSourceCode source =
+ new JarSourceCode(
+ method.getHolder(),
+ node,
+ application,
+ graphLense.getOriginalMethodSignature(encodedMethod.method),
+ callerPosition);
+ return new IRBuilder(encodedMethod, appInfo, source, options, generator).build();
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java
index bc2222f..7892afb 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java
@@ -20,6 +20,7 @@
import com.android.tools.r8.graph.DebugLocalInfo;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.graph.DexItemFactory;
+import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.ir.code.CanonicalPositions;
import com.android.tools.r8.ir.code.CatchHandlers;
@@ -199,6 +200,7 @@
public CfSourceCode(
CfCode code,
DexEncodedMethod method,
+ DexMethod originalMethod,
Position callerPosition,
Origin origin,
boolean preserveCaller) {
@@ -217,7 +219,7 @@
}
this.state = new CfState(origin);
canonicalPositions =
- new CanonicalPositions(callerPosition, preserveCaller, cfPositionCount, this.method.method);
+ new CanonicalPositions(callerPosition, preserveCaller, cfPositionCount, originalMethod);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java
index 10bf6a5..94516a2 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java
@@ -75,26 +75,30 @@
private List<DexDebugEntry> debugEntries = null;
// In case of inlining the position of the invoke in the caller.
- private final DexMethod method;
+ private final DexMethod originalMethod;
public DexSourceCode(
- DexCode code, DexEncodedMethod method, Position callerPosition, boolean preserveCaller) {
+ DexCode code,
+ DexEncodedMethod method,
+ DexMethod originalMethod,
+ Position callerPosition,
+ boolean preserveCaller) {
this.code = code;
this.proto = method.method.proto;
this.accessFlags = method.accessFlags;
- this.method = method.method;
+ this.originalMethod = originalMethod;
argumentTypes = computeArgumentTypes();
DexDebugInfo info = code.getDebugInfo();
if (info != null) {
- debugEntries = info.computeEntries(method.method);
+ debugEntries = info.computeEntries(originalMethod);
}
canonicalPositions =
new CanonicalPositions(
callerPosition,
preserveCaller,
debugEntries == null ? 0 : debugEntries.size(),
- this.method);
+ originalMethod);
}
@Override
@@ -253,7 +257,7 @@
private Position getCanonicalPositionAppendCaller(DexDebugEntry entry) {
// If this instruction has already been inlined then this.method must be the outermost caller.
assert entry.callerPosition == null
- || entry.callerPosition.getOutermostCaller().method == method;
+ || entry.callerPosition.getOutermostCaller().method == originalMethod;
return canonicalPositions.getCanonical(
new Position(
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
index f2875d5..98b4502 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
@@ -344,7 +344,8 @@
this.method = method;
this.appInfo = appInfo;
this.source = source;
- this.valueNumberGenerator = valueNumberGenerator;
+ this.valueNumberGenerator =
+ valueNumberGenerator != null ? valueNumberGenerator : new ValueNumberGenerator();
this.options = options;
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java
index 1170dab..85a0f99 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java
@@ -187,20 +187,20 @@
// Cooked position to indicate positions in synthesized code (ie, for synchronization).
private Position syntheticPosition = null;
- private final DexMethod method;
+ private final DexMethod originalMethod;
private final Position callerPosition;
public JarSourceCode(
DexType clazz,
MethodNode node,
JarApplicationReader application,
- DexMethod method,
+ DexMethod originalMethod,
Position callerPosition) {
assert node != null;
assert node.desc != null;
this.node = node;
this.application = application;
- this.method = method;
+ this.originalMethod = originalMethod;
this.clazz = clazz;
this.callerPosition = callerPosition;
parameterTypes = Arrays.asList(application.getArgumentTypes(node.desc));
@@ -2862,12 +2862,12 @@
private Position getCanonicalPosition(int line) {
return canonicalPositions.computeIfAbsent(
- line, l -> new Position(l, null, method, callerPosition));
+ line, l -> new Position(l, null, originalMethod, callerPosition));
}
private Position getPreamblePosition() {
if (preamblePosition == null) {
- preamblePosition = Position.synthetic(0, method, null);
+ preamblePosition = Position.synthetic(0, originalMethod, null);
}
return preamblePosition;
}
@@ -2891,8 +2891,8 @@
}
syntheticPosition =
(min == Integer.MAX_VALUE)
- ? Position.noneWithMethod(method, callerPosition)
- : Position.synthetic(min < max ? min - 1 : min, method, callerPosition);
+ ? Position.noneWithMethod(originalMethod, callerPosition)
+ : Position.synthetic(min < max ? min - 1 : min, originalMethod, callerPosition);
}
return syntheticPosition;
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
index ee8e38d..12baa2c 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
@@ -587,7 +587,8 @@
invokePosition = Position.noneWithMethod(method.method, null);
}
assert invokePosition.callerPosition == null
- || invokePosition.getOutermostCaller().method == method.method;
+ || invokePosition.getOutermostCaller().method
+ == graphLense.getOriginalMethodSignature(method.method);
IRCode inlinee =
result.buildInliningIR(
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
index 45b7903..5f8fd6b 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
@@ -1171,8 +1171,7 @@
InternalOptions options,
Origin origin) {
OutlineSourceCode source = new OutlineSourceCode(outline);
- IRBuilder builder = new IRBuilder(encodedMethod, appInfo, source, options);
- return builder.build();
+ return new IRBuilder(encodedMethod, appInfo, source, options).build();
}
@Override