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