Merge "Wildcard after back-reference is not referable."
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
index a410a65..7a50c5e 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
@@ -647,8 +647,10 @@
 
     void verifyAndLinkBackReferences(Iterable<ProguardWildcard> wildcards) {
       List<Pattern> patterns = new ArrayList<>();
+      boolean backReferenceStarted = false;
       for (ProguardWildcard wildcard : wildcards) {
         if (wildcard.isBackReference()) {
+          backReferenceStarted = true;
           BackReference backReference = wildcard.asBackReference();
           if (patterns.size() < backReference.referenceIndex) {
             throw reporter.fatalError(new StringDiagnostic(
@@ -659,7 +661,9 @@
           backReference.setReference(patterns.get(backReference.referenceIndex - 1));
         } else {
           assert wildcard.isPattern();
-          patterns.add(wildcard.asPattern());
+          if (!backReferenceStarted) {
+            patterns.add(wildcard.asPattern());
+          }
         }
       }
     }
diff --git a/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java b/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
index 46311bc..ed439c0 100644
--- a/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
@@ -1701,6 +1701,26 @@
   }
 
   @Test
+  public void parse_if_nthWildcard_not_referable_after_backreference() throws Exception {
+    Path proguardConfig = writeTextToTempFile(
+        "-if class **.*User {",
+        "  @<1>.*<2> <methods>;", // As back reference starts, * in the middle is not referable.
+        "}",
+        "-keep @interface <1>.<3><2>"
+    );
+    try {
+      ProguardConfigurationParser parser =
+          new ProguardConfigurationParser(new DexItemFactory(), reporter);
+      parser.parse(proguardConfig);
+      fail();
+    } catch (AbortException e) {
+      checkDiagnostics(handler.errors, proguardConfig, 5, 1,
+          "Wildcard", "<3>", "invalid");
+    }
+    verifyFailWithProguard6(proguardConfig, "Invalid reference to wildcard (3,");
+  }
+
+  @Test
   public void parse_if_if() throws Exception {
     Path proguardConfig = writeTextToTempFile(
         "-if   class **$$ModuleAdapter",