@@ -950,31 +950,30 @@ class TransferNonTransferrableDiagnosticInferrer {
950
950
951
951
struct UseDiagnosticInfo {
952
952
UseDiagnosticInfoKind kind;
953
- std::optional<ActorIsolation> transferredIsolation ;
953
+ std::optional<ApplyIsolationCrossing> transferredIsolationCrossing = {} ;
954
954
955
955
static UseDiagnosticInfo forMiscUse () {
956
- return {UseDiagnosticInfoKind::MiscUse, {} };
956
+ return {UseDiagnosticInfoKind::MiscUse};
957
957
}
958
958
959
959
static UseDiagnosticInfo
960
- forFunctionArgumentApply (ActorIsolation isolation) {
960
+ forFunctionArgumentApply (ApplyIsolationCrossing isolation) {
961
961
return {UseDiagnosticInfoKind::FunctionArgumentApply, isolation};
962
962
}
963
963
964
964
static UseDiagnosticInfo
965
- forFunctionArgumentClosure (ActorIsolation isolation) {
965
+ forFunctionArgumentClosure (ApplyIsolationCrossing isolation) {
966
966
return {UseDiagnosticInfoKind::FunctionArgumentClosure, isolation};
967
967
}
968
968
969
969
static UseDiagnosticInfo forFunctionArgumentApplyStronglyTransferred () {
970
- return {UseDiagnosticInfoKind::FunctionArgumentApplyStronglyTransferred,
971
- {}};
970
+ return {UseDiagnosticInfoKind::FunctionArgumentApplyStronglyTransferred};
972
971
}
973
972
974
973
private:
975
974
UseDiagnosticInfo (UseDiagnosticInfoKind kind,
976
- std::optional<ActorIsolation > isolation)
977
- : kind(kind), transferredIsolation (isolation) {}
975
+ std::optional<ApplyIsolationCrossing > isolation = {} )
976
+ : kind(kind), transferredIsolationCrossing (isolation) {}
978
977
};
979
978
980
979
private:
@@ -1015,8 +1014,8 @@ bool TransferNonTransferrableDiagnosticInferrer::initForIsolatedPartialApply(
1015
1014
for (auto &p : foundCapturedIsolationCrossing) {
1016
1015
if (std::get<1 >(p) == opIndex) {
1017
1016
loc = std::get<0 >(p).getLoc ();
1018
- diagnosticInfo = UseDiagnosticInfo::forFunctionArgumentClosure (
1019
- std::get<2 >(p). getCalleeIsolation ( ));
1017
+ diagnosticInfo =
1018
+ UseDiagnosticInfo::forFunctionArgumentClosure ( std::get<2 >(p));
1020
1019
return true ;
1021
1020
}
1022
1021
}
@@ -1034,11 +1033,11 @@ bool TransferNonTransferrableDiagnosticInferrer::run() {
1034
1033
auto loc = info.transferredOperand ->getUser ()->getLoc ();
1035
1034
1036
1035
if (auto *sourceApply = loc.getAsASTNode <ApplyExpr>()) {
1037
- std::optional<ActorIsolation > isolation = {};
1036
+ std::optional<ApplyIsolationCrossing > isolation = {};
1038
1037
1039
1038
// First try to get the apply from the isolation crossing.
1040
1039
if (auto value = sourceApply->getIsolationCrossing ())
1041
- isolation = value-> getCalleeIsolation () ;
1040
+ isolation = value;
1042
1041
1043
1042
// If we could not infer an isolation...
1044
1043
if (!isolation) {
@@ -1105,7 +1104,8 @@ void TransferNonSendableImpl::emitTransferredNonTransferrableDiagnostics() {
1105
1104
case UseDiagnosticInfoKind::FunctionArgumentApply: {
1106
1105
diagnoseError (astContext, loc, diag::regionbasedisolation_arg_transferred,
1107
1106
op->get ()->getType ().getASTType (),
1108
- diagnosticInfo.transferredIsolation .value ())
1107
+ diagnosticInfo.transferredIsolationCrossing .value ()
1108
+ .getCalleeIsolation ())
1109
1109
.highlight (op->getUser ()->getLoc ().getSourceRange ());
1110
1110
// Only emit the note if our value is different from the function
1111
1111
// argument.
@@ -1124,7 +1124,8 @@ void TransferNonSendableImpl::emitTransferredNonTransferrableDiagnostics() {
1124
1124
case UseDiagnosticInfoKind::FunctionArgumentClosure: {
1125
1125
diagnoseError (astContext, loc, diag::regionbasedisolation_arg_transferred,
1126
1126
op->get ()->getType ().getASTType (),
1127
- diagnosticInfo.transferredIsolation .value ())
1127
+ diagnosticInfo.transferredIsolationCrossing .value ()
1128
+ .getCalleeIsolation ())
1128
1129
.highlight (op->getUser ()->getLoc ().getSourceRange ());
1129
1130
// Only emit the note if our value is different from the function
1130
1131
// argument.
0 commit comments