@@ -158,6 +158,23 @@ static Expr *inferArgumentExprFromApplyExpr(ApplyExpr *sourceApply,
158
158
// MARK: Diagnostics
159
159
// ===----------------------------------------------------------------------===//
160
160
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
+
161
178
template <typename ... T, typename ... U>
162
179
static InFlightDiagnostic diagnoseError (ASTContext &context, SourceLoc loc,
163
180
Diag<T...> diag, U &&...args) {
@@ -732,14 +749,7 @@ class UseAfterTransferDiagnosticEmitter {
732
749
}
733
750
734
751
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 ());
743
753
}
744
754
745
755
private:
@@ -1160,12 +1170,7 @@ void TransferNonSendableImpl::emitUseAfterTransferDiagnostics() {
1160
1170
// tells the user to file a bug. This importantly ensures that we can
1161
1171
// guarantee that we always find the require if we successfully compile.
1162
1172
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);
1169
1174
continue ;
1170
1175
}
1171
1176
@@ -1227,14 +1232,7 @@ class TransferNonTransferrableDiagnosticEmitter {
1227
1232
}
1228
1233
1229
1234
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 ());
1238
1236
}
1239
1237
1240
1238
void emitUnknownUse (SILLocation loc) {
@@ -1727,14 +1725,7 @@ class InOutSendingNotDisconnectedDiagnosticEmitter {
1727
1725
}
1728
1726
1729
1727
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 );
1738
1729
}
1739
1730
1740
1731
void emit ();
@@ -1994,13 +1985,7 @@ struct DiagnosticEvaluator final
1994
1985
}
1995
1986
1996
1987
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 ());
2004
1989
}
2005
1990
2006
1991
bool isActorDerived (Element element) const {
0 commit comments