Skip to content

Commit 8dfd8e8

Browse files
authored
Merge pull request swiftlang#75165 from gottesmm/release/6.0-rdar131482934
[6.0][region-isolation] Make "unknown pattern error" always an error.
2 parents 9999d88 + d0a49ad commit 8dfd8e8

File tree

1 file changed

+22
-37
lines changed

1 file changed

+22
-37
lines changed

lib/SILOptimizer/Mandatory/TransferNonSendable.cpp

Lines changed: 22 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,23 @@ 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+
160177
template <typename... T, typename... U>
161178
static InFlightDiagnostic diagnoseError(ASTContext &context, SourceLoc loc,
162179
Diag<T...> diag, U &&...args) {
@@ -731,14 +748,7 @@ class UseAfterTransferDiagnosticEmitter {
731748
}
732749

733750
void emitUnknownPatternError() {
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());
751+
diagnoseUnknownPatternError(transferOp->getUser());
742752
}
743753

744754
private:
@@ -1159,12 +1169,7 @@ void TransferNonSendableImpl::emitUseAfterTransferDiagnostics() {
11591169
// tells the user to file a bug. This importantly ensures that we can
11601170
// guarantee that we always find the require if we successfully compile.
11611171
if (!didEmitRequireNote) {
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);
1172+
diagnoseUnknownPatternError(transferOp);
11681173
continue;
11691174
}
11701175

@@ -1226,14 +1231,7 @@ class TransferNonTransferrableDiagnosticEmitter {
12261231
}
12271232

12281233
void emitUnknownPatternError() {
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());
1234+
diagnoseUnknownPatternError(getOperand()->getUser());
12371235
}
12381236

12391237
void emitUnknownUse(SILLocation loc) {
@@ -1726,14 +1724,7 @@ class InOutSendingNotDisconnectedDiagnosticEmitter {
17261724
}
17271725

17281726
void emitUnknownPatternError() {
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());
1727+
diagnoseUnknownPatternError(info.functionExitingInst);
17371728
}
17381729

17391730
void emit();
@@ -1993,13 +1984,7 @@ struct DiagnosticEvaluator final
19931984
}
19941985

19951986
void handleUnknownCodePattern(const PartitionOp &op) const {
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);
1987+
diagnoseUnknownPatternError(op.getSourceInst());
20031988
}
20041989

20051990
bool isActorDerived(Element element) const {

0 commit comments

Comments
 (0)