Skip to content

Commit 0ca7837

Browse files
committed
Turn off all separation checking for shared capabilities
1 parent f54537a commit 0ca7837

File tree

3 files changed

+17
-3
lines changed

3 files changed

+17
-3
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ object SepCheck:
186186
if seen.contains(newElem) then
187187
recur(seen, acc, newElems1)
188188
else newElem.stripRestricted.stripReadOnly match
189-
case elem: FreshCap =>
189+
case elem: FreshCap if !elem.isKnownClassifiedAs(defn.Caps_SharedCapability) =>
190190
if elem.hiddenSet.deps.isEmpty then recur(seen + newElem, acc + newElem, newElems1)
191191
else
192192
val superCaps =
@@ -612,7 +612,7 @@ class SepCheck(checker: CheckCaptures.CheckerAPI) extends tpd.TreeTraverser:
612612
val badParams = mutable.ListBuffer[Symbol]()
613613
def currentOwner = role.dclSym.orElse(ctx.owner)
614614
for hiddenRef <- refsToCheck.deductSymRefs(role.dclSym).deduct(explicitRefs(tpe)) do
615-
if !hiddenRef.derivesFromShared then
615+
if !hiddenRef.isKnownClassifiedAs(defn.Caps_SharedCapability) then
616616
hiddenRef.pathRoot match
617617
case ref: TermRef =>
618618
val refSym = ref.symbol
@@ -649,7 +649,7 @@ class SepCheck(checker: CheckCaptures.CheckerAPI) extends tpd.TreeTraverser:
649649
role match
650650
case _: TypeRole.Argument | _: TypeRole.Qualifier =>
651651
for ref <- refsToCheck do
652-
if !ref.derivesFromShared then
652+
if !ref.isKnownClassifiedAs(defn.Caps_SharedCapability) then
653653
consumed.put(ref, pos)
654654
case _ =>
655655
end checkConsumedRefs
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
class E extends caps.ExclusiveCapability
2+
class S extends caps.SharedCapability
3+
4+
def par(x: E^, y: E^): E = ???
5+
6+
def test(x: E^) = par(x, x) // error
7+
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
class E extends caps.ExclusiveCapability
2+
class S extends caps.SharedCapability
3+
4+
def par(x: S^, y: S^): S = ???
5+
6+
def test(x: S^) = par(x, x)
7+

0 commit comments

Comments
 (0)