Skip to content

Commit 811e3a0

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 e177316 commit 811e3a0

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
@@ -157,23 +157,6 @@ static Expr *inferArgumentExprFromApplyExpr(ApplyExpr *sourceApply,
157157
// MARK: Diagnostics
158158
//===----------------------------------------------------------------------===//
159159

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

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

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

@@ -1231,7 +1226,14 @@ class TransferNonTransferrableDiagnosticEmitter {
12311226
}
12321227

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

12371239
void emitUnknownUse(SILLocation loc) {
@@ -1724,7 +1726,14 @@ class InOutSendingNotDisconnectedDiagnosticEmitter {
17241726
}
17251727

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

17301739
void emit();
@@ -1984,7 +1993,13 @@ struct DiagnosticEvaluator final
19841993
}
19851994

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

19902005
bool isActorDerived(Element element) const {

0 commit comments

Comments
 (0)