diff --git a/lib/Serialization/Deserialization.cpp b/lib/Serialization/Deserialization.cpp index 89cfcdc017d6e..9bdfbdf00d997 100644 --- a/lib/Serialization/Deserialization.cpp +++ b/lib/Serialization/Deserialization.cpp @@ -2163,6 +2163,21 @@ Decl *ModuleFile::getDecl(DeclID DID, Optional ForcedContext) { genericParams, DC); declOrOffset = alias; + if (genericParams) { + SmallVector paramTypes; + for (auto &genericParam : *genericParams) { + paramTypes.push_back(genericParam->getDeclaredType() + ->castTo()); + } + + // Read the generic requirements. + SmallVector requirements; + readGenericRequirements(requirements); + + auto sig = GenericSignature::get(paramTypes, requirements); + alias->setGenericSignature(sig); + } + alias->computeType(); if (auto accessLevel = getActualAccessibility(rawAccessLevel)) { diff --git a/lib/Serialization/Serialization.cpp b/lib/Serialization/Serialization.cpp index f55a4318b649c..9ca3b9e7f4486 100644 --- a/lib/Serialization/Serialization.cpp +++ b/lib/Serialization/Serialization.cpp @@ -2191,6 +2191,7 @@ void Serializer::writeDecl(const Decl *D) { typeAlias->isImplicit(), rawAccessLevel); writeGenericParams(typeAlias->getGenericParams(), DeclTypeAbbrCodes); + writeRequirements(typeAlias->getGenericRequirements()); break; } diff --git a/test/multifile/typealias/two-modules/library.swift b/test/multifile/typealias/two-modules/library.swift new file mode 100644 index 0000000000000..69d2c1e307064 --- /dev/null +++ b/test/multifile/typealias/two-modules/library.swift @@ -0,0 +1,9 @@ +// RUN: true + +public enum Result +{ + case success(T) + case failure(U) +} + +public typealias GenericResult = Result diff --git a/test/multifile/typealias/two-modules/main.swift b/test/multifile/typealias/two-modules/main.swift new file mode 100644 index 0000000000000..7368dddf53faf --- /dev/null +++ b/test/multifile/typealias/two-modules/main.swift @@ -0,0 +1,13 @@ +// RUN: rm -rf %t && mkdir %t + +// RUN: mkdir %t/linker +// RUN: %target-build-swift -emit-module -c %S/library.swift -o %t/linker/library.o +// RUN: %target-build-swift -emit-library -c %S/library.swift -o %t/linker/library.o +// RUN: %target-build-swift %S/main.swift %t/linker/library.o -I %t/linker/ -L %t/linker/ -o %t/linker/main + +// REQUIRES: executable_test + +import library + +func testFunction(withCompletion completion: (Result) -> Void) { } +testFunction { (result: GenericResult) in }