Skip to content

Commit 219073b

Browse files
committed
Revert "[region-isolation] Make "unknown pattern error" always an error."
This reverts commit b63781f. We found some cases where due to malformed IR that we allow through due to either us compiling for strict-concurrency=complete+swift-5 or swift-6 + preconcurrency, that we can actually have actor isolation mismatch. I am going to in a subsequent commit add a better phrasing here. But for now, just undo the conversion from error -> warning. rdar://131757602
1 parent 346bd23 commit 219073b

File tree

1 file changed

+37
-22
lines changed

1 file changed

+37
-22
lines changed

lib/SILOptimizer/Mandatory/TransferNonSendable.cpp

Lines changed: 37 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -158,23 +158,6 @@ static Expr *inferArgumentExprFromApplyExpr(ApplyExpr *sourceApply,
158158
// MARK: Diagnostics
159159
//===----------------------------------------------------------------------===//
160160

161-
/// Emit the "unknown pattern error" at the SILLocation of \p inst.
162-
static void diagnoseUnknownPatternError(SILInstruction *inst) {
163-
if (shouldAbortOnUnknownPatternMatchError()) {
164-
llvm::report_fatal_error(
165-
"RegionIsolation: Aborting on unknown pattern match error");
166-
}
167-
168-
auto &ctx = inst->getFunction()->getASTContext();
169-
auto loc = inst->getLoc().getSourceLoc();
170-
171-
ctx.Diags.diagnose(loc, diag::regionbasedisolation_unknown_pattern);
172-
}
173-
174-
static void diagnoseUnknownPatternError(Operand *op) {
175-
diagnoseUnknownPatternError(op->getUser());
176-
}
177-
178161
template <typename... T, typename... U>
179162
static InFlightDiagnostic diagnoseError(ASTContext &context, SourceLoc loc,
180163
Diag<T...> diag, U &&...args) {
@@ -749,7 +732,14 @@ class UseAfterTransferDiagnosticEmitter {
749732
}
750733

751734
void emitUnknownPatternError() {
752-
diagnoseUnknownPatternError(transferOp->getUser());
735+
if (shouldAbortOnUnknownPatternMatchError()) {
736+
llvm::report_fatal_error(
737+
"RegionIsolation: Aborting on unknown pattern match error");
738+
}
739+
740+
diagnoseError(transferOp->getUser(),
741+
diag::regionbasedisolation_unknown_pattern)
742+
.limitBehaviorIf(getBehaviorLimit());
753743
}
754744

755745
private:
@@ -1170,7 +1160,12 @@ void TransferNonSendableImpl::emitUseAfterTransferDiagnostics() {
11701160
// tells the user to file a bug. This importantly ensures that we can
11711161
// guarantee that we always find the require if we successfully compile.
11721162
if (!didEmitRequireNote) {
1173-
diagnoseUnknownPatternError(transferOp);
1163+
if (shouldAbortOnUnknownPatternMatchError()) {
1164+
llvm::report_fatal_error(
1165+
"RegionIsolation: Aborting on unknown pattern match error");
1166+
}
1167+
1168+
diagnoseError(transferOp, diag::regionbasedisolation_unknown_pattern);
11741169
continue;
11751170
}
11761171

@@ -1232,7 +1227,14 @@ class TransferNonTransferrableDiagnosticEmitter {
12321227
}
12331228

12341229
void emitUnknownPatternError() {
1235-
diagnoseUnknownPatternError(getOperand()->getUser());
1230+
if (shouldAbortOnUnknownPatternMatchError()) {
1231+
llvm::report_fatal_error(
1232+
"RegionIsolation: Aborting on unknown pattern match error");
1233+
}
1234+
1235+
diagnoseError(getOperand()->getUser(),
1236+
diag::regionbasedisolation_unknown_pattern)
1237+
.limitBehaviorIf(getBehaviorLimit());
12361238
}
12371239

12381240
void emitUnknownUse(SILLocation loc) {
@@ -1725,7 +1727,14 @@ class InOutSendingNotDisconnectedDiagnosticEmitter {
17251727
}
17261728

17271729
void emitUnknownPatternError() {
1728-
diagnoseUnknownPatternError(info.functionExitingInst);
1730+
if (shouldAbortOnUnknownPatternMatchError()) {
1731+
llvm::report_fatal_error(
1732+
"RegionIsolation: Aborting on unknown pattern match error");
1733+
}
1734+
1735+
diagnoseError(info.functionExitingInst,
1736+
diag::regionbasedisolation_unknown_pattern)
1737+
.limitBehaviorIf(getBehaviorLimit());
17291738
}
17301739

17311740
void emit();
@@ -1985,7 +1994,13 @@ struct DiagnosticEvaluator final
19851994
}
19861995

19871996
void handleUnknownCodePattern(const PartitionOp &op) const {
1988-
diagnoseUnknownPatternError(op.getSourceInst());
1997+
if (shouldAbortOnUnknownPatternMatchError()) {
1998+
llvm::report_fatal_error(
1999+
"RegionIsolation: Aborting on unknown pattern match error");
2000+
}
2001+
2002+
diagnoseError(op.getSourceInst(),
2003+
diag::regionbasedisolation_unknown_pattern);
19892004
}
19902005

19912006
bool isActorDerived(Element element) const {

0 commit comments

Comments
 (0)