Skip to content

Commit beb46a1

Browse files
oderskyHarrisL2
authored andcommitted
Don't automatically add the owner of a FreshCap to its hidden set
This can lead to unsoundness. For instance: class C extends SharedCapability val b: C => C Then `b` is the owner of the FreshCap implicitly added to the result C, yet it should not be added to the hidden set, since `b` itself is not a SharedCapability.
1 parent 39bae01 commit beb46a1

File tree

1 file changed

+1
-20
lines changed

1 file changed

+1
-20
lines changed

compiler/src/dotty/tools/dotc/cc/Setup.scala

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ class Setup extends PreRecheck, SymTransformer, SetupAPI:
459459
if sym.isType then stripImpliedCaptureSet(tp2)
460460
else tp2
461461
if freshen then
462-
capToFresh(tp3, Origin.InDecl(sym)).tap(addOwnerAsHidden(_, sym))
462+
capToFresh(tp3, Origin.InDecl(sym))
463463
else tp3
464464
end transformExplicitType
465465

@@ -473,25 +473,6 @@ class Setup extends PreRecheck, SymTransformer, SetupAPI:
473473
extension (sym: Symbol) def nextInfo(using Context): Type =
474474
atPhase(thisPhase.next)(sym.info)
475475

476-
private def addOwnerAsHidden(tp: Type, owner: Symbol)(using Context): Unit =
477-
val ref = owner.termRef
478-
def add = new TypeTraverser:
479-
var reach = false
480-
def traverse(t: Type): Unit = t match
481-
case t @ CapturingType(parent, refs) =>
482-
val saved = reach
483-
reach |= t.isBoxed
484-
try
485-
traverse(parent)
486-
for case fresh: FreshCap <- refs.elems.iterator do // TODO: what about fresh.rd elems?
487-
if reach then fresh.hiddenSet.elems += ref.reach
488-
else if ref.isTracked then fresh.hiddenSet.elems += ref
489-
finally reach = saved
490-
case _ =>
491-
traverseChildren(t)
492-
if ref.isTrackableRef then add.traverse(tp)
493-
end addOwnerAsHidden
494-
495476
/** A traverser that adds knownTypes and updates symbol infos */
496477
def setupTraverser(checker: CheckerAPI) = new TreeTraverserWithPreciseImportContexts:
497478
import checker.*

0 commit comments

Comments
 (0)