@@ -652,15 +652,37 @@ func rdar36054961() {
652652  } ] ) 
653653} 
654654
655+ protocol  P_37790062  { 
656+   associatedtype  T 
657+   var  elt :  T  {  get  } 
658+ } 
659+ 
655660func  rdar37790062( )  { 
656661  struct  S < T>  { 
657662    init ( _ a:  ( )  ->  T ,  _ b:  ( )  ->  T )  { } 
658663  } 
659664
665+   class  C1  :  P_37790062  { 
666+     typealias  T  =  Int 
667+     var  elt :  T  {  return  42  } 
668+   } 
669+ 
670+   class  C2  :  P_37790062  { 
671+     typealias  T  =  ( String ,  Int ,  Void ) 
672+     var  elt :  T  {  return  ( " question " ,  42 ,  ( ) )  } 
673+   } 
674+ 
660675  func  foo( )  ->  Int  {  return  42  } 
661676  func  bar( )  ->  Void  { } 
662677  func  baz( )  ->  ( String ,  Int )  {  return  ( " question " ,  42 )  } 
678+   func  bzz< T> ( _ a:  T )  ->  T  {  return  a } 
679+   func  faz< T:  P_37790062 > ( _ a:  T )  ->  T . T  {  return  a. elt } 
663680
664681  _ =  S ( {  foo ( )  } ,  {  bar ( )  } )  // Ok, should infer T to be 'Void'
665682  _ =  S ( {  baz ( )  } ,  {  bar ( )  } )  // Ok, should infer T to be 'Void'
683+   _ =  S ( {  bzz ( ( " question " ,  42 ) )  } ,  {  bar ( )  } )  // Ok
684+   _ =  S ( {  bzz ( String . self)  } ,  {  bar ( )  } )  // Ok
685+   _ =  S ( {  bzz ( ( ( ) ,  ( ( ) ) ) )  } ,  {  bar ( )  } )  // Ok
686+   _ =  S ( {  bzz ( C1 ( ) )  } ,  {  bar ( )  } )  // Ok
687+   _ =  S ( {  faz ( C2 ( ) )  } ,  {  bar ( )  } )  // Ok
666688} 
0 commit comments