@@ -157,23 +157,6 @@ static Expr *inferArgumentExprFromApplyExpr(ApplyExpr *sourceApply,
157157// MARK: Diagnostics
158158// ===----------------------------------------------------------------------===//
159159
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-
177160template <typename ... T, typename ... U>
178161static InFlightDiagnostic diagnoseError (ASTContext &context, SourceLoc loc,
179162 Diag<T...> diag, U &&...args) {
@@ -748,7 +731,14 @@ class UseAfterTransferDiagnosticEmitter {
748731 }
749732
750733 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 ());
752742 }
753743
754744private:
@@ -1169,7 +1159,12 @@ void TransferNonSendableImpl::emitUseAfterTransferDiagnostics() {
11691159 // tells the user to file a bug. This importantly ensures that we can
11701160 // guarantee that we always find the require if we successfully compile.
11711161 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);
11731168 continue ;
11741169 }
11751170
@@ -1231,7 +1226,14 @@ class TransferNonTransferrableDiagnosticEmitter {
12311226 }
12321227
12331228 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 ());
12351237 }
12361238
12371239 void emitUnknownUse (SILLocation loc) {
@@ -1724,7 +1726,14 @@ class InOutSendingNotDisconnectedDiagnosticEmitter {
17241726 }
17251727
17261728 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 ());
17281737 }
17291738
17301739 void emit ();
@@ -1984,7 +1993,13 @@ struct DiagnosticEvaluator final
19841993 }
19851994
19861995 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);
19882003 }
19892004
19902005 bool isActorDerived (Element element) const {
0 commit comments