Skip to content

Commit 93db161

Browse files
authored
Merge pull request swiftlang#30252 from nkcsgexi/add-enum-case-break
APIChecker: adding enum cases are source breaking changes
2 parents f8de43b + cec4519 commit 93db161

File tree

4 files changed

+12
-1
lines changed

4 files changed

+12
-1
lines changed

include/swift/AST/DiagnosticsModuleDiffer.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,8 @@ ERROR(added_invisible_designated_init,none,"%0 has new designated initializers t
102102

103103
ERROR(not_inheriting_convenience_inits,none,"%0 no longer inherits convenience inits from its superclass", (StringRef))
104104

105+
ERROR(enum_case_added,none,"%0 has been added as a new enum case", (StringRef))
106+
105107
#ifndef DIAG_NO_UNDEF
106108
# if defined(DIAG)
107109
# undef DIAG

test/api-digester/Outputs/Cake.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ cake: Func S1.foo1() has self access kind changing from NonMutating to Mutating
4646
cake: Func S1.foo3() is now static
4747
cake: Var C1.CIIns1 changes from weak to strong
4848
cake: Var C1.CIIns2 changes from strong to weak
49+
cake: EnumElement FrozenKind.AddedCase has been added as a new enum case
4950

5051
/* Conformance changes */
5152
cake: Func ObjCProtocol.removeOptional() is no longer an optional requirement

tools/swift-api-digester/ModuleDiagsConsumer.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ static StringRef getCategoryName(uint32_t ID) {
5555
return "/* RawRepresentable Changes */";
5656
case LocalDiagID::generic_sig_change:
5757
return "/* Generic Signature Changes */";
58+
case LocalDiagID::enum_case_added:
5859
case LocalDiagID::decl_added:
5960
case LocalDiagID::decl_reorder:
6061
case LocalDiagID::var_has_fixed_order_change:

tools/swift-api-digester/swift-api-digester.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1179,7 +1179,14 @@ class PrunePass : public MatchedNodeListener, public SDKTreeDiffPass {
11791179
}
11801180
}
11811181
}
1182-
1182+
// Adding an enum case is source-breaking.
1183+
if (!Ctx.checkingABI()) {
1184+
if (auto *Var = dyn_cast<SDKNodeDeclVar>(Right)) {
1185+
if (Var->getDeclKind() == DeclKind::EnumElement) {
1186+
Var->emitDiag(Var->getLoc(), diag::enum_case_added);
1187+
}
1188+
}
1189+
}
11831190
return;
11841191
case NodeMatchReason::Removed:
11851192
assert(!Right);

0 commit comments

Comments
 (0)