[Retrace] Add test for missing sourcefile regexp and ambiguous map

Bug: 216359244
Change-Id: I00b48139f099bb058a2eccf33d43b210360fdaf5
diff --git a/src/test/java/com/android/tools/r8/retrace/StackTraceRegularExpressionParserTests.java b/src/test/java/com/android/tools/r8/retrace/StackTraceRegularExpressionParserTests.java
index b769752..fe8cd5b 100644
--- a/src/test/java/com/android/tools/r8/retrace/StackTraceRegularExpressionParserTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/StackTraceRegularExpressionParserTests.java
@@ -944,6 +944,48 @@
         });
   }
 
+  /* This is a regression test for b/216359244 */
+  // TODO(b/216359244): Should not fail with an NPE.
+  @Test(expected = NullPointerException.class)
+  public void testMissingSourceFile() {
+    runRetraceTest(
+        ".*FOO\\s+:\\s+\\[\\d+\\]\\s+%c\\.%m\\(%l\\):.*",
+        new StackTraceForTest() {
+          @Override
+          public List<String> obfuscatedStackTrace() {
+            return ImmutableList.of(
+                "12-24 19:53:19.052 10197 30302 30302 I FOO : [2] huk.g(1): getDownloads()");
+          }
+
+          @Override
+          public String mapping() {
+            return "foo.Bar -> huk:\n" + "  void baz():13:13 -> g\n" + "  void qux():12:12 -> g\n";
+          }
+
+          @Override
+          public List<String> retracedStackTrace() {
+            return ImmutableList.of(
+                "12-24 19:53:19.052 10197 30302 30302 I FOO : [2] foo.Bar.baz(13): getDownloads()",
+                "<OR> 12-24 19:53:19.052 10197 30302 30302 I FOO : [2] foo.Bar.qux(12):"
+                    + " getDownloads()");
+          }
+
+          @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of(
+                "12-24 19:53:19.052 10197 30302 30302 I FOO : [2] foo.Bar.void baz()(13):"
+                    + " getDownloads()",
+                "<OR> 12-24 19:53:19.052 10197 30302 30302 I FOO : [2] foo.Bar.void qux()(12):"
+                    + " getDownloads()");
+          }
+
+          @Override
+          public int expectedWarnings() {
+            return 0;
+          }
+        });
+  }
+
   private TestDiagnosticMessagesImpl runRetraceTest(
       String regularExpression, StackTraceForTest stackTraceForTest) {
     TestDiagnosticMessagesImpl diagnosticsHandler = new TestDiagnosticMessagesImpl();
diff --git a/tools/retrace.py b/tools/retrace.py
index 14593ab..22753fb 100755
--- a/tools/retrace.py
+++ b/tools/retrace.py
@@ -61,6 +61,11 @@
       default=None,
       action='store_true',
       help='Enables verbose retracing.')
+  parser.add_argument(
+      '--disable-map-validation',
+      default=None,
+      action='store_true',
+      help='Disable validation of map hash.')
   return parser.parse_args()
 
 
@@ -108,7 +113,7 @@
       print(e)
       print('WARNING: Falling back to using local mapping file.')
 
-    if map_path:
+    if map_path and not args.disable_map_validation:
       check_maphash(map_path, maphash)
       return map_path