@@ -158,23 +158,6 @@ static Expr *inferArgumentExprFromApplyExpr(ApplyExpr *sourceApply,
158158// MARK: Diagnostics
159159// ===----------------------------------------------------------------------===//
160160
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-
178161template <typename ... T, typename ... U>
179162static InFlightDiagnostic diagnoseError (ASTContext &context, SourceLoc loc,
180163 Diag<T...> diag, U &&...args) {
@@ -749,7 +732,14 @@ class UseAfterTransferDiagnosticEmitter {
749732 }
750733
751734 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 ());
753743 }
754744
755745private:
@@ -1170,7 +1160,12 @@ void TransferNonSendableImpl::emitUseAfterTransferDiagnostics() {
11701160 // tells the user to file a bug. This importantly ensures that we can
11711161 // guarantee that we always find the require if we successfully compile.
11721162 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);
11741169 continue ;
11751170 }
11761171
@@ -1232,7 +1227,14 @@ class TransferNonTransferrableDiagnosticEmitter {
12321227 }
12331228
12341229 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 ());
12361238 }
12371239
12381240 void emitUnknownUse (SILLocation loc) {
@@ -1725,7 +1727,14 @@ class InOutSendingNotDisconnectedDiagnosticEmitter {
17251727 }
17261728
17271729 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 ());
17291738 }
17301739
17311740 void emit ();
@@ -1985,7 +1994,13 @@ struct DiagnosticEvaluator final
19851994 }
19861995
19871996 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);
19892004 }
19902005
19912006 bool isActorDerived (Element element) const {
0 commit comments