Skip to content

Commit 8e5222e

Browse files
authored
Merge pull request swiftlang#75137 from gottesmm/pr-cd357557374bb800097ac08777ae16e5e8082abb
[region-isolation] Make "unknown pattern error" always an error.
2 parents d443fdd + b63781f commit 8e5222e

File tree

1 file changed

+22
-37
lines changed

1 file changed

+22
-37
lines changed

lib/SILOptimizer/Mandatory/TransferNonSendable.cpp

Lines changed: 22 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,23 @@ 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+
161178
template <typename... T, typename... U>
162179
static InFlightDiagnostic diagnoseError(ASTContext &context, SourceLoc loc,
163180
Diag<T...> diag, U &&...args) {
@@ -732,14 +749,7 @@ class UseAfterTransferDiagnosticEmitter {
732749
}
733750

734751
void emitUnknownPatternError() {
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());
752+
diagnoseUnknownPatternError(transferOp->getUser());
743753
}
744754

745755
private:
@@ -1160,12 +1170,7 @@ void TransferNonSendableImpl::emitUseAfterTransferDiagnostics() {
11601170
// tells the user to file a bug. This importantly ensures that we can
11611171
// guarantee that we always find the require if we successfully compile.
11621172
if (!didEmitRequireNote) {
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);
1173+
diagnoseUnknownPatternError(transferOp);
11691174
continue;
11701175
}
11711176

@@ -1227,14 +1232,7 @@ class TransferNonTransferrableDiagnosticEmitter {
12271232
}
12281233

12291234
void emitUnknownPatternError() {
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());
1235+
diagnoseUnknownPatternError(getOperand()->getUser());
12381236
}
12391237

12401238
void emitUnknownUse(SILLocation loc) {
@@ -1727,14 +1725,7 @@ class InOutSendingNotDisconnectedDiagnosticEmitter {
17271725
}
17281726

17291727
void emitUnknownPatternError() {
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());
1728+
diagnoseUnknownPatternError(info.functionExitingInst);
17381729
}
17391730

17401731
void emit();
@@ -1994,13 +1985,7 @@ struct DiagnosticEvaluator final
19941985
}
19951986

19961987
void handleUnknownCodePattern(const PartitionOp &op) const {
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);
1988+
diagnoseUnknownPatternError(op.getSourceInst());
20041989
}
20051990

20061991
bool isActorDerived(Element element) const {

0 commit comments

Comments
 (0)