diff --git a/lib/Sema/TypeCheckNameLookup.cpp b/lib/Sema/TypeCheckNameLookup.cpp index a5b1bd0bc9b3e..6068b1a2c527f 100644 --- a/lib/Sema/TypeCheckNameLookup.cpp +++ b/lib/Sema/TypeCheckNameLookup.cpp @@ -353,8 +353,7 @@ bool TypeChecker::isUnsupportedMemberTypeAccess(Type type, TypeDecl *typeDecl) { // underlying type is not dependent. if (auto *aliasDecl = dyn_cast(typeDecl)) { if (!aliasDecl->isGeneric() && - aliasDecl->getUnderlyingType()->getCanonicalType() - ->hasTypeParameter()) { + aliasDecl->getUnderlyingType()->hasTypeParameter()) { return true; } } diff --git a/test/decl/typealias/dependent_types.swift b/test/decl/typealias/dependent_types.swift index c854388e0f669..4334f3d71734e 100644 --- a/test/decl/typealias/dependent_types.swift +++ b/test/decl/typealias/dependent_types.swift @@ -23,11 +23,12 @@ struct X1 : P1 { } } -struct GenericStruct { // expected-note 2{{generic type 'GenericStruct' declared here}} +struct GenericStruct { // expected-note 3{{generic type 'GenericStruct' declared here}} typealias Alias = T typealias MetaAlias = T.Type typealias Concrete = Int + typealias ReferencesConcrete = Concrete func methodOne() -> Alias.Type {} func methodTwo() -> MetaAlias {} @@ -59,6 +60,9 @@ let _: GenericStruct.MetaAlias = metaFoo() // we are OK. let _: GenericStruct.Concrete = foo() +let _: GenericStruct.ReferencesConcrete = foo() +// expected-error@-1 {{reference to generic type 'GenericStruct' requires arguments in <...>}} + class SuperG { typealias Composed = (T, U) }