diff --git a/src/test/java/com/android/tools/r8/debuginfo/OverloadWithNoLineNumberTest.java b/src/test/java/com/android/tools/r8/debuginfo/OverloadWithNoLineNumberTest.java
new file mode 100644
index 0000000..47f6e4b
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/debuginfo/OverloadWithNoLineNumberTest.java
@@ -0,0 +1,102 @@
+// 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.
+
+package com.android.tools.r8.debuginfo;
+
+import static com.android.tools.r8.naming.retrace.StackTrace.isSame;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.ToolHelper.DexVm.Version;
+import com.android.tools.r8.debuginfo.testclasses.SimpleCallChainClassWithOverloads;
+import com.android.tools.r8.naming.retrace.StackTrace;
+import com.android.tools.r8.naming.retrace.StackTrace.StackTraceLine;
+import com.android.tools.r8.transformers.ClassFileTransformer.MethodPredicate;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public class OverloadWithNoLineNumberTest extends TestBase {
+
+  private final String SOURCE_FILE_NAME = "SimpleCallChainClassWithOverloads.java";
+
+  @Parameter() public TestParameters parameters;
+
+  @Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withAllRuntimesAndApiLevels().build();
+  }
+
+  @Test
+  public void testR8() throws Exception {
+    testForR8(parameters.getBackend())
+        .addProgramClassFileData(
+            transformer(SimpleCallChainClassWithOverloads.class)
+                .removeLineNumberTable(MethodPredicate.onName("test"))
+                .transform())
+        .setMinApi(parameters.getApiLevel())
+        .addKeepMainRule(SimpleCallChainClassWithOverloads.class)
+        .addKeepClassAndMembersRules(SimpleCallChainClassWithOverloads.class)
+        .addKeepAttributeLineNumberTable()
+        .run(parameters.getRuntime(), SimpleCallChainClassWithOverloads.class)
+        .assertFailureWithErrorThatThrows(RuntimeException.class)
+        .inspectStackTrace(
+            (stackTrace, inspector) -> {
+              StackTraceLine mainLine =
+                  StackTraceLine.builder()
+                      .setClassName(typeName(SimpleCallChainClassWithOverloads.class))
+                      .setMethodName("main")
+                      .setFileName(SOURCE_FILE_NAME)
+                      .setLineNumber(10)
+                      .build();
+              if (parameters.isCfRuntime()
+                  || parameters.getDexRuntimeVersion().isOlderThan(Version.V8_1_0)) {
+                StackTraceLine testStackTraceLine =
+                    StackTraceLine.builder()
+                        .setClassName(typeName(SimpleCallChainClassWithOverloads.class))
+                        .setMethodName("test")
+                        .setFileName(SOURCE_FILE_NAME)
+                        .build();
+                assertThat(
+                    stackTrace,
+                    isSame(
+                        StackTrace.builder()
+                            // TODO(b/251677184): Stack trace lines should still be distinguishable
+                            //  even if there are no original line numbers to map back two.
+                            .add(testStackTraceLine)
+                            .add(testStackTraceLine)
+                            .add(mainLine)
+                            .build()));
+              } else {
+                assertThat(
+                    stackTrace,
+                    isSame(
+                        StackTrace.builder()
+                            // TODO(b/251677184): Strange that we are able to distinguish when using
+                            //  pc mapping.
+                            .add(
+                                StackTraceLine.builder()
+                                    .setClassName(typeName(SimpleCallChainClassWithOverloads.class))
+                                    .setMethodName("test")
+                                    .setFileName(SOURCE_FILE_NAME)
+                                    .setLineNumber(11)
+                                    .build())
+                            .add(
+                                StackTraceLine.builder()
+                                    .setClassName(typeName(SimpleCallChainClassWithOverloads.class))
+                                    .setMethodName("test")
+                                    .setFileName(SOURCE_FILE_NAME)
+                                    .setLineNumber(4)
+                                    .build())
+                            .add(mainLine)
+                            .build()));
+              }
+            });
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/debuginfo/testclasses/SimpleCallChainClassWithOverloads.java b/src/test/java/com/android/tools/r8/debuginfo/testclasses/SimpleCallChainClassWithOverloads.java
new file mode 100644
index 0000000..e70ba73
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/debuginfo/testclasses/SimpleCallChainClassWithOverloads.java
@@ -0,0 +1,22 @@
+// 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.
+
+package com.android.tools.r8.debuginfo.testclasses;
+
+public class SimpleCallChainClassWithOverloads {
+
+  public static void main(String[] args) {
+    test();
+  }
+
+  public static void test() {
+    test(System.currentTimeMillis());
+  }
+
+  public static void test(long value) {
+    if (value > 0) {
+      throw new RuntimeException("Hello World!");
+    }
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDelegatedPropertyTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDelegatedPropertyTest.java
index d3e2677..9fd2a2e 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDelegatedPropertyTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDelegatedPropertyTest.java
@@ -5,6 +5,7 @@
 package com.android.tools.r8.kotlin.metadata;
 
 import static com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion.KOTLINC_1_4_20;
+import static com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion.KOTLINC_1_7_0;
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -129,11 +130,19 @@
             .setOutputPath(temp.newFolder().toPath())
             .compileRaw();
     Assert.assertEquals(1, compileResult.exitCode);
-    assertThat(
-        compileResult.stderr,
-        containsString(
-            "unsupported [reference to the synthetic extension property for a Java get/set"
-                + " method]"));
+    if (kotlinParameters.isNewerThan(KOTLINC_1_7_0)) {
+      assertThat(
+          compileResult.stderr,
+          containsString(
+              "the feature \"references to synthetic java properties\" is only available since"
+                  + " language version 1.9"));
+    } else {
+      assertThat(
+          compileResult.stderr,
+          containsString(
+              "unsupported [reference to the synthetic extension property for a Java get/set"
+                  + " method]"));
+    }
   }
 
   private void inspectMetadata(CodeInspector inspector) {
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceStackTraceFunctionalCompositionTest.java b/src/test/java/com/android/tools/r8/retrace/RetraceStackTraceFunctionalCompositionTest.java
index db76685..9d9d7a4 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceStackTraceFunctionalCompositionTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceStackTraceFunctionalCompositionTest.java
@@ -180,10 +180,9 @@
     comparePartitionedStackTraces(originalPartitions, firstRoundPartitions);
 
     Pair<Path, Path> d8OfR8ofR8 = compileWithD8(r8OfR8.getFirst(), r8OfR8.getSecond());
-    List<String> retracedSecondLevelStackTraces =
-        retrace(d8OfR8ofR8.getSecond(), generateStackTraces(d8OfR8ofR8.getFirst()));
-    Map<String, List<String>> secondRoundPartitions =
-        partitionStacktraces(retracedSecondLevelStackTraces);
+    List<String> d8StackTraces = generateStackTraces(d8OfR8ofR8.getFirst());
+    List<String> secondRoundStackTraces = retrace(d8OfR8ofR8.getSecond(), d8StackTraces);
+    Map<String, List<String>> secondRoundPartitions = partitionStacktraces(secondRoundStackTraces);
     comparePartitionedStackTraces(originalPartitions, secondRoundPartitions);
   }
 
diff --git a/tools/download_kotlin_dev.py b/tools/download_kotlin_dev.py
index 5d2696a..3bcf9b7 100755
--- a/tools/download_kotlin_dev.py
+++ b/tools/download_kotlin_dev.py
@@ -72,6 +72,9 @@
   download_and_save(
       JETBRAINS_KOTLIN_MAVEN_URL + "kotlin-reflect/{0}/kotlin-reflect-{0}.jar"
       .format(top_most_version_and_build), kotlinc_lib, "kotlin-reflect.jar")
+  download_and_save(
+    JETBRAINS_KOTLIN_MAVEN_URL + "kotlin-script-runtime/{0}/kotlin-script-runtime-{0}.jar"
+    .format(top_most_version_and_build), kotlinc_lib, "kotlin-script-runtime.jar")
 
 
 def download_and_save(url, path, name):
