// RUN: rm -rf %t
// RUN: mkdir -p %t
// RUN: %target-swift-frontend -emit-module -sil-serialize-all -o %t %S/Inputs/def_generic_marker.swift
// RUN: %target-sil-opt -assume-parsing-unqualified-ownership-sil -linker -I %t %s | %FileCheck %s

// Make sure that SILFunctionType with GenericSignature can match up with
// SILFunctionType deserialized from module.

import def_generic_marker
import Builtin
import Swift

// CHECK-LABEL: sil @top_level_code
// CHECK: function_ref @_TF18def_generic_marker4testu0_RxS_16mmCollectionType_S0_W_9Generator7Element_zWxS1_S2__rFTxq__x : $@convention(thin) <τ_0_0, τ_0_1 where τ_0_0 : mmCollectionType, τ_0_1 : mmCollectionType, τ_0_1.Generator.Element == τ_0_0.Generator.Element> (@in τ_0_0, @in τ_0_1) -> @out τ_0_0
sil @top_level_code : $@convention(thin) () -> () {
bb0:
  %43 = function_ref @_TF18def_generic_marker4testu0_RxS_16mmCollectionType_S0_W_9Generator7Element_zWxS1_S2__rFTxq__x : $@convention(thin) <EC1, EC2 where EC1 : mmCollectionType, EC2 : mmCollectionType, EC2.Generator.Element == EC1.Generator.Element> (@in EC1, @in EC2) -> @out EC1
  %0 = tuple ()
  return %0 : $()
}

// Make sure the function body is deserialized.
// CHECK-LABEL: @_TF18def_generic_marker4testu0_RxS_16mmCollectionType_S0_W_9Generator7Element_zWxS1_S2__rFTxq__x : $@convention(thin) <EC1, EC2 where EC1 : mmCollectionType, EC2 : mmCollectionType, EC2.Generator.Element == EC1.Generator.Element> (@in EC1, @in EC2) -> @out EC1 {
sil @_TF18def_generic_marker4testu0_RxS_16mmCollectionType_S0_W_9Generator7Element_zWxS1_S2__rFTxq__x : $@convention(thin) <EC1, EC2 where EC1 : mmCollectionType, EC2 : mmCollectionType, EC2.Generator.Element == EC1.Generator.Element> (@in EC1, @in EC2) -> @out EC1
