@@ -170,11 +170,13 @@ class TreeUnpickler(reader: TastyReader,
170170            case  ex : Exception  =>  fail(ex)
171171  }
172172
173-   class  TreeReader (val  reader :  TastyReader ) {
173+   class  TreeReader (val  reader :  TastyReader ,  inInlineBody :  Boolean   =   false ) {
174174    import  reader .* 
175175
176-     def  forkAt (start : Addr ):  TreeReader  =  new  TreeReader (subReader(start, endAddr))
177-     def  fork :  TreeReader  =  forkAt(currentAddr)
176+     def  forkAt (start : Addr , inInlineBody : Boolean  =  false ):  TreeReader  = 
177+       new  TreeReader (subReader(start, endAddr), inInlineBody)
178+ 
179+     def  fork :  TreeReader  =  forkAt(currentAddr, inInlineBody)
178180
179181    def  skipParentTree (tag : Int ):  Unit  =  {
180182      if  tag ==  SPLITCLAUSE  then  ()
@@ -694,7 +696,7 @@ class TreeUnpickler(reader: TastyReader,
694696          val  ctx1  =  localContext(sym)(using  ctx0).addMode(Mode .ReadPositions )
695697          inContext(sourceChangeContext(Addr (0 ))(using  ctx1)) {
696698            //  avoids space leaks by not capturing the current context
697-             forkAt(rhsStart).readTree()
699+             forkAt(rhsStart, inInlineBody  =   true ).readTree()
698700          }
699701        })
700702      goto(start)
@@ -1580,21 +1582,14 @@ class TreeUnpickler(reader: TastyReader,
15801582                  val  d  =  ownerTpe.decl(name).atSignature(sig, target)
15811583                  (if  ! d.exists then  lookupInSuper else  d).asSeenFrom(prefix)
15821584
1583-               val  denot0  =  inContext(ctx.addMode(Mode .ResolveFromTASTy )): 
1585+               val  denot  =  inContext(ctx.addMode(Mode .ResolveFromTASTy )): 
15841586                searchDenot //  able to resolve SourceInvisible members
15851587
1586-               val  denot  = 
1587-                 if 
1588-                   denot0.symbol.exists
1589-                   &&  denot0.symbol.is(SourceInvisible )
1590-                   &&  denot0.symbol.isDefinedInSource
1591-                 then 
1592-                   searchDenot //  fallback
1593-                 else 
1594-                   denot0
1595- 
15961588
1597-               makeSelect(qual, name, denot)
1589+               val  sel  =  makeSelect(qual, name, denot)
1590+               if  denot ==  NoDenotation  &&  inInlineBody &&  sel.denot.symbol.exists then 
1591+                 throw  new  ChangedMethodDenot (sel.denot.symbol)
1592+               sel
15981593            case  REPEATED  => 
15991594              val  elemtpt  =  readTpt()
16001595              SeqLiteral (until(end)(readTree()), elemtpt)
@@ -1901,6 +1896,9 @@ class TreeUnpickler(reader: TastyReader,
19011896
19021897object  TreeUnpickler  {
19031898
1899+   /**  Specifically thrown when a SELECTin was written to TASTy, i.e. is expected to resolve, and then doesn't. */  
1900+   private [dotc] final  class  ChangedMethodDenot (val  resolved :  Symbol ) extends  Exception 
1901+ 
19041902  /**  Define the expected format of the tasty bytes 
19051903   *   - TopLevel: Tasty that contains a full class nested in its package 
19061904   *   - Term: Tasty that contains only a term tree 
0 commit comments