Merge pull request #17062 from slavapestov/fix-type-alias-validation-forum-bug-4.2

Sema: Fix validateDeclForNameLookup() to use the right flags when resolving type alias underlying type [4.2]
diff --git a/lib/Sema/TypeCheckDecl.cpp b/lib/Sema/TypeCheckDecl.cpp
index e5327b2..949d0ac 100644
--- a/lib/Sema/TypeCheckDecl.cpp
+++ b/lib/Sema/TypeCheckDecl.cpp
@@ -7924,8 +7924,10 @@
         validateAccessControl(typealias);
 
         ProtocolRequirementTypeResolver resolver;
+        TypeResolutionOptions options =
+          TypeResolutionFlags::TypeAliasUnderlyingType;
         if (validateType(typealias->getUnderlyingTypeLoc(),
-                         typealias, TypeResolutionOptions(), &resolver)) {
+                         typealias, options, &resolver)) {
           typealias->setInvalid();
           typealias->getUnderlyingTypeLoc().setInvalidType(Context);
         }
diff --git a/test/decl/typealias/protocol.swift b/test/decl/typealias/protocol.swift
index 4d577fc..b38215d 100644
--- a/test/decl/typealias/protocol.swift
+++ b/test/decl/typealias/protocol.swift
@@ -290,3 +290,12 @@
 extension P11 {
   func foo(_: X11<Self.A>) { }
 }
+
+// Ordering issue
+struct SomeConformingType : UnboundGenericAliasProto {
+  func f(_: G<Int>) {}
+}
+
+protocol UnboundGenericAliasProto {
+  typealias G = X
+}