Merge pull request #23360 from akyrtzi/fix-syntax-parser-assertion

[syntax parser] Fix assertion hit with invalid type parsing
diff --git a/lib/Parse/ParseType.cpp b/lib/Parse/ParseType.cpp
index daf6780..b062506 100644
--- a/lib/Parse/ParseType.cpp
+++ b/lib/Parse/ParseType.cpp
@@ -705,16 +705,19 @@
   SyntaxContext->setCreateSyntax(SyntaxKind::CompositionType);
   assert(Tok.isContextualPunctuator("&"));
   do {
-    consumeToken(); // consume '&'
-
-    if (SyntaxContext->isEnabled() && Status.isSuccess()) {
-      ParsedCompositionTypeElementSyntaxBuilder Builder(*SyntaxContext);
-      auto Ampersand = SyntaxContext->popToken();
-      auto Type = SyntaxContext->popIf<ParsedTypeSyntax>().getValue();
-      Builder
-        .useAmpersand(Ampersand)
-        .useType(Type);
-      SyntaxContext->addSyntax(Builder.build());
+    if (SyntaxContext->isEnabled()) {
+      auto Type = SyntaxContext->popIf<ParsedTypeSyntax>();
+      consumeToken(); // consume '&'
+      if (Type) {
+        ParsedCompositionTypeElementSyntaxBuilder Builder(*SyntaxContext);
+        auto Ampersand = SyntaxContext->popToken();
+        Builder
+          .useAmpersand(Ampersand)
+          .useType(Type.getValue());
+        SyntaxContext->addSyntax(Builder.build());
+      }
+    } else {
+      consumeToken(); // consume '&'
     }
 
     // Parse next type.
diff --git a/test/Syntax/Parser/fixed_crashers.swift b/test/Syntax/Parser/fixed_crashers.swift
new file mode 100644
index 0000000..bc9bb7c
--- /dev/null
+++ b/test/Syntax/Parser/fixed_crashers.swift
@@ -0,0 +1,5 @@
+// REQUIRES: syntax_parser_lib
+// RUN: %swift-syntax-parser-test %s -dump-tree | %FileCheck %s
+
+let x: a[i] & b
+// CHECK: |let|