@@ -157,6 +157,23 @@ static Expr *inferArgumentExprFromApplyExpr(ApplyExpr *sourceApply,
157
157
// MARK: Diagnostics
158
158
// ===----------------------------------------------------------------------===//
159
159
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
+
160
177
template <typename ... T, typename ... U>
161
178
static InFlightDiagnostic diagnoseError (ASTContext &context, SourceLoc loc,
162
179
Diag<T...> diag, U &&...args) {
@@ -731,14 +748,7 @@ class UseAfterTransferDiagnosticEmitter {
731
748
}
732
749
733
750
void emitUnknownPatternError () {
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 ());
751
+ diagnoseUnknownPatternError (transferOp->getUser ());
742
752
}
743
753
744
754
private:
@@ -1159,12 +1169,7 @@ void TransferNonSendableImpl::emitUseAfterTransferDiagnostics() {
1159
1169
// tells the user to file a bug. This importantly ensures that we can
1160
1170
// guarantee that we always find the require if we successfully compile.
1161
1171
if (!didEmitRequireNote) {
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);
1172
+ diagnoseUnknownPatternError (transferOp);
1168
1173
continue ;
1169
1174
}
1170
1175
@@ -1226,14 +1231,7 @@ class TransferNonTransferrableDiagnosticEmitter {
1226
1231
}
1227
1232
1228
1233
void emitUnknownPatternError () {
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 ());
1234
+ diagnoseUnknownPatternError (getOperand ()->getUser ());
1237
1235
}
1238
1236
1239
1237
void emitUnknownUse (SILLocation loc) {
@@ -1726,14 +1724,7 @@ class InOutSendingNotDisconnectedDiagnosticEmitter {
1726
1724
}
1727
1725
1728
1726
void emitUnknownPatternError () {
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 ());
1727
+ diagnoseUnknownPatternError (info.functionExitingInst );
1737
1728
}
1738
1729
1739
1730
void emit ();
@@ -1993,13 +1984,7 @@ struct DiagnosticEvaluator final
1993
1984
}
1994
1985
1995
1986
void handleUnknownCodePattern (const PartitionOp &op) const {
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);
1987
+ diagnoseUnknownPatternError (op.getSourceInst ());
2003
1988
}
2004
1989
2005
1990
bool isActorDerived (Element element) const {
0 commit comments