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