File tree Expand file tree Collapse file tree 2 files changed +32
-1
lines changed 
compiler/src/dotty/tools/dotc/core Expand file tree Collapse file tree 2 files changed +32
-1
lines changed Original file line number Diff line number Diff line change @@ -748,7 +748,22 @@ object TypeOps:
748748    // 
749749    if  (child.name ==  tpnme.LOCAL_CHILD ) return  child.typeRef
750750
751-     val  childTp  =  if  (child.isTerm) child.termRef else  child.typeRef
751+     val  childTp  =  {
752+       val  parentSym  =  parent.typeSymbol
753+       val  parentPre  =  parent.normalizedPrefix
754+       val  defaultRef  =  if  (child.isTerm) child.termRef else  child.typeRef
755+ 
756+       if  (parentSym.isClass &&  parentPre.isInstanceOf [TermRef ]) {
757+         val  newPrefix  =  childPrefix(parentPre, parentSym, child)
758+         if  (newPrefix.exists)
759+           if  (child.isTerm) TermRef (newPrefix, child.asTerm)
760+           else  TypeRef (newPrefix, child.asType)
761+         else 
762+           defaultRef
763+       }
764+       else 
765+         defaultRef
766+     }
752767
753768    inContext(ctx.fresh.setExploreTyperState().setFreshGADTBounds.addMode(Mode .GadtConstraintInference )) {
754769      instantiateToSubType(childTp, parent, mixins).dealias
Original file line number Diff line number Diff line change 1+ class  Module  {
2+   type  BarTy 
3+   sealed  trait  Adt [A ]
4+   case  class  Foo () extends  Adt [String ]
5+   case  class  Bar [A  <:  BarTy ](x : BarTy ) extends  Adt [A ]
6+ }
7+ 
8+ object  Basic  extends  Module  {
9+   type  BarTy  =  String 
10+ }
11+ 
12+ def  test (a : Basic .Adt [String ]) =  {
13+   a match  { //  warn: match may not be exhaustive
14+     case  Basic .Foo () => 
15+   }
16+ }
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments