Disregard debug set-file events.

Fixes: 202254240
Change-Id: Ia0f11917fb8bfbccbc87018f006bf63aa143faa6
diff --git a/src/main/java/com/android/tools/r8/Disassemble.java b/src/main/java/com/android/tools/r8/Disassemble.java
index 7c4ac49..c36a796 100644
--- a/src/main/java/com/android/tools/r8/Disassemble.java
+++ b/src/main/java/com/android/tools/r8/Disassemble.java
@@ -213,6 +213,7 @@
     InternalOptions getInternalOptions() {
       InternalOptions internal = new InternalOptions();
       internal.useSmaliSyntax = useSmali;
+      internal.readDebugSetFileEvent = true;
       return internal;
     }
   }
diff --git a/src/main/java/com/android/tools/r8/dex/DexParser.java b/src/main/java/com/android/tools/r8/dex/DexParser.java
index 03e0e31..0601b5c 100644
--- a/src/main/java/com/android/tools/r8/dex/DexParser.java
+++ b/src/main/java/com/android/tools/r8/dex/DexParser.java
@@ -581,7 +581,9 @@
         case Constants.DBG_SET_FILE: {
           int nameIdx = dexReader.getUleb128p1();
           DexString sourceFile = nameIdx == NO_INDEX ? null : indexedItems.getString(nameIdx);
-          events.add(dexItemFactory.createSetFile(sourceFile));
+          if (options.readDebugSetFileEvent) {
+            events.add(dexItemFactory.createSetFile(sourceFile));
+          }
           break;
         }
         default: {
diff --git a/src/main/java/com/android/tools/r8/graph/DexDebugEvent.java b/src/main/java/com/android/tools/r8/graph/DexDebugEvent.java
index 1bbd88a..dfd4f1c 100644
--- a/src/main/java/com/android/tools/r8/graph/DexDebugEvent.java
+++ b/src/main/java/com/android/tools/r8/graph/DexDebugEvent.java
@@ -7,6 +7,7 @@
 import com.android.tools.r8.dex.DebugBytecodeWriter;
 import com.android.tools.r8.dex.IndexedItemCollection;
 import com.android.tools.r8.dex.MixedSectionCollection;
+import com.android.tools.r8.errors.InternalCompilerError;
 import com.android.tools.r8.errors.Unreachable;
 import com.android.tools.r8.ir.code.Position;
 import com.android.tools.r8.utils.structural.CompareToVisitor;
@@ -457,6 +458,13 @@
     }
   }
 
+  /**
+   * Unused/unsupported set-file event.
+   *
+   * <p>The set-file event is unused by all DEX VMs and incorrect on some older VMs. It is
+   * represented in the type of events for completeness, but should never be emitted as part of
+   * writing DEX code.
+   */
   public static class SetFile extends DexDebugEvent {
 
     DexString fileName;
@@ -468,8 +476,7 @@
     @Override
     public void writeOn(
         DebugBytecodeWriter writer, ObjectToOffsetMapping mapping, GraphLens graphLens) {
-      writer.putByte(Constants.DBG_SET_FILE);
-      writer.putString(fileName);
+      throw new InternalCompilerError("Unused/unsupported SetFile event should never be written");
     }
 
     @Override
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 747a052..9d2657a 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -281,6 +281,7 @@
   public BiPredicate<String, Long> dexClassChecksumFilter = (name, checksum) -> true;
   public boolean cfToCfDesugar = false;
   public boolean forceAnnotateSynthetics = false;
+  public boolean readDebugSetFileEvent = false;
 
   public int callGraphLikelySpuriousCallEdgeThreshold = 50;
 
diff --git a/src/test/java/com/android/tools/r8/debuginfo/DebugSetFileSmaliTest.java b/src/test/java/com/android/tools/r8/debuginfo/DebugSetFileSmaliTest.java
index e6c9b84..e64b7d7 100644
--- a/src/test/java/com/android/tools/r8/debuginfo/DebugSetFileSmaliTest.java
+++ b/src/test/java/com/android/tools/r8/debuginfo/DebugSetFileSmaliTest.java
@@ -4,7 +4,7 @@
 package com.android.tools.r8.debuginfo;
 
 import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
 
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -62,7 +62,7 @@
         .compile()
         .inspect(
             inspector -> {
-              assertTrue(
+              assertFalse(
                   Arrays.stream(
                           inspector
                               .clazz(CLASS_NAME)
diff --git a/src/test/java/com/android/tools/r8/naming/RenameSourceFileSmaliTest.java b/src/test/java/com/android/tools/r8/naming/RenameSourceFileSmaliTest.java
deleted file mode 100644
index de654b8..0000000
--- a/src/test/java/com/android/tools/r8/naming/RenameSourceFileSmaliTest.java
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright (c) 2017, 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.naming;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import com.android.tools.r8.code.ConstString;
-import com.android.tools.r8.code.InvokeVirtual;
-import com.android.tools.r8.code.ReturnVoid;
-import com.android.tools.r8.code.SgetObject;
-import com.android.tools.r8.graph.DexClass;
-import com.android.tools.r8.graph.DexCode;
-import com.android.tools.r8.graph.DexDebugEvent.SetFile;
-import com.android.tools.r8.graph.DexEncodedMethod;
-import com.android.tools.r8.shaking.ProguardConfiguration;
-import com.android.tools.r8.smali.SmaliBuilder;
-import com.android.tools.r8.smali.SmaliBuilder.MethodSignature;
-import com.android.tools.r8.smali.SmaliTestBase;
-import com.android.tools.r8.utils.FileUtils;
-import com.android.tools.r8.utils.StringUtils;
-import com.google.common.collect.ImmutableList;
-import java.nio.file.Path;
-import java.util.Arrays;
-import java.util.List;
-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;
-
-/**
- * Tests -renamesourcefileattribute.
- */
-@RunWith(Parameterized.class)
-public class RenameSourceFileSmaliTest extends SmaliTestBase {
-
-  private static final String TEST_FILE = "TestFile.java";
-
-  private static final List<String> DEFAULT_PG_CONFIGS =
-      ImmutableList.of(
-          "-keep class *** { *; }",
-          "-dontoptimize",
-          "-keepattributes SourceFile,LineNumberTable");
-
-  private void configure(ProguardConfiguration.Builder pg) {
-    if (renaming) {
-      pg.setRenameSourceFileAttribute(TEST_FILE);
-    }
-  }
-
-  @Parameter
-  public boolean renaming;
-
-  @Parameters(name="renaming:{0}")
-  public static Object[] parameters() {
-    return new Object[] {true, false};
-  }
-
-  /**
-   * replica of {@link RunArtSmokeTest#test}
-   */
-  @Test
-  public void artSmokeTest() throws Exception {
-    // Build simple "Hello, world!" application.
-    SmaliBuilder builder = new SmaliBuilder(DEFAULT_CLASS_NAME);
-    String originalSourceFile = DEFAULT_CLASS_NAME + FileUtils.JAVA_EXTENSION;
-    builder.setSourceFile(originalSourceFile);
-    MethodSignature mainSignature = builder.addMainMethod(
-        2,
-        ".line 1",
-        "    sget-object         v0, Ljava/lang/System;->out:Ljava/io/PrintStream;",
-        "    const-string        v1, \"Hello, world!\"",
-        ".source \"PrintStream.java\"",
-        ".line 337",
-        "    invoke-virtual      { v0, v1 }, Ljava/io/PrintStream;->println(Ljava/lang/String;)V",
-        ".source \"" + originalSourceFile + "\"",
-        ".line 2",
-        "    return-void"
-    );
-    Path processedApp = runR8(builder, DEFAULT_PG_CONFIGS, this::configure, null);
-
-    DexClass mainClass = getClass(processedApp, DEFAULT_CLASS_NAME);
-    verifySourceFileInCodeItem(mainClass, originalSourceFile, TEST_FILE);
-
-    DexEncodedMethod mainMethod = getMethod(processedApp, mainSignature);
-    assertNotNull(mainMethod);
-
-    DexCode code = mainMethod.getCode().asDexCode();
-    assertTrue(code.instructions[0] instanceof SgetObject);
-    assertTrue(code.instructions[1] instanceof ConstString);
-    assertTrue(code.instructions[2] instanceof InvokeVirtual);
-    assertTrue(code.instructions[3] instanceof ReturnVoid);
-
-    // Run the generated code in Art.
-    String result = runArt(processedApp, DEFAULT_MAIN_CLASS_NAME);
-    assertEquals(StringUtils.lines("Hello, world!"), result);
-
-    verifySourceFileInDebugInfo(code);
-  }
-
-  private void verifySourceFileInCodeItem(DexClass clazz, String original, String rename) {
-    String processedSourceFile = clazz.sourceFile.toString();
-    if (renaming) {
-      assertEquals(rename, processedSourceFile);
-    } else {
-      assertEquals(original, processedSourceFile);
-    }
-  }
-
-  private void verifySourceFileInDebugInfo(DexCode code) {
-    assertNotNull(code.getDebugInfo());
-    assertNotEquals(0, code.getDebugInfo().events.length);
-    long setFileCount =
-        Arrays.stream(code.getDebugInfo().events)
-            .filter(dexDebugEvent -> dexDebugEvent instanceof SetFile)
-            .count();
-    if (renaming) {
-      assertEquals(0, setFileCount);
-    } else {
-      assertNotEquals(0, setFileCount);
-    }
-  }
-
-}