mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
swift-module-digester: diagnose adding variables with fixed binary order.
Removing these variables should be detected as API breakages already.
This commit is contained in:
@@ -54,6 +54,8 @@ ERROR(decl_new_attr,none,"%0 is now %1", (StringRef, StringRef))
|
|||||||
|
|
||||||
ERROR(decl_reorder,none,"%0 in a fixed layout type changes position from %1 to %2", (StringRef, unsigned, unsigned))
|
ERROR(decl_reorder,none,"%0 in a fixed layout type changes position from %1 to %2", (StringRef, unsigned, unsigned))
|
||||||
|
|
||||||
|
ERROR(decl_added,none,"%0 is added to a non-resilient type", (StringRef))
|
||||||
|
|
||||||
#ifndef DIAG_NO_UNDEF
|
#ifndef DIAG_NO_UNDEF
|
||||||
# if defined(DIAG)
|
# if defined(DIAG)
|
||||||
# undef DIAG
|
# undef DIAG
|
||||||
|
|||||||
@@ -51,8 +51,12 @@ public extension P1 {
|
|||||||
@_fixed_layout
|
@_fixed_layout
|
||||||
public struct fixedLayoutStruct {
|
public struct fixedLayoutStruct {
|
||||||
public var a = 1
|
public var a = 1
|
||||||
|
public func OKChange() {}
|
||||||
|
private static let constant = 0
|
||||||
public var b = 2
|
public var b = 2
|
||||||
public func foo() {}
|
public func foo() {}
|
||||||
|
private var c = 3
|
||||||
|
private lazy var lazy_d = 4
|
||||||
}
|
}
|
||||||
|
|
||||||
@_frozen
|
@_frozen
|
||||||
@@ -60,4 +64,5 @@ public enum FrozenKind {
|
|||||||
case Unchanged
|
case Unchanged
|
||||||
case Rigid
|
case Rigid
|
||||||
case Fixed
|
case Fixed
|
||||||
|
case AddedCase
|
||||||
}
|
}
|
||||||
@@ -36,3 +36,6 @@ cake1: EnumElement FrozenKind.Fixed in a fixed layout type changes position from
|
|||||||
cake1: EnumElement FrozenKind.Rigid in a fixed layout type changes position from 2 to 1
|
cake1: EnumElement FrozenKind.Rigid in a fixed layout type changes position from 2 to 1
|
||||||
cake1: Var fixedLayoutStruct.a in a fixed layout type changes position from 1 to 0
|
cake1: Var fixedLayoutStruct.a in a fixed layout type changes position from 1 to 0
|
||||||
cake1: Var fixedLayoutStruct.b in a fixed layout type changes position from 0 to 1
|
cake1: Var fixedLayoutStruct.b in a fixed layout type changes position from 0 to 1
|
||||||
|
cake2: EnumElement FrozenKind.AddedCase is added to a non-resilient type
|
||||||
|
cake2: Var fixedLayoutStruct.c is added to a non-resilient type
|
||||||
|
cake2: Var fixedLayoutStruct.lazy_d.storage is added to a non-resilient type
|
||||||
@@ -47,6 +47,7 @@ static StringRef getCategoryName(uint32_t ID) {
|
|||||||
return "/* RawRepresentable Changes */";
|
return "/* RawRepresentable Changes */";
|
||||||
case LocalDiagID::generic_sig_change:
|
case LocalDiagID::generic_sig_change:
|
||||||
return "/* Generic Signature Changes */";
|
return "/* Generic Signature Changes */";
|
||||||
|
case LocalDiagID::decl_added:
|
||||||
case LocalDiagID::decl_reorder:
|
case LocalDiagID::decl_reorder:
|
||||||
return "/* Fixed-layout Type Changes */";
|
return "/* Fixed-layout Type Changes */";
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -762,6 +762,14 @@ public:
|
|||||||
case NodeMatchReason::Added:
|
case NodeMatchReason::Added:
|
||||||
assert(!Left);
|
assert(!Left);
|
||||||
Right->annotate(NodeAnnotation::Added);
|
Right->annotate(NodeAnnotation::Added);
|
||||||
|
if (Ctx.checkingABI()) {
|
||||||
|
if (auto *VAD = dyn_cast<SDKNodeDeclVar>(Right)) {
|
||||||
|
if (VAD->hasFixedBinaryOrder()) {
|
||||||
|
Ctx.getDiags().diagnose(SourceLoc(), diag::decl_added,
|
||||||
|
VAD->getScreenInfo());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
case NodeMatchReason::Removed:
|
case NodeMatchReason::Removed:
|
||||||
assert(!Right);
|
assert(!Right);
|
||||||
|
|||||||
Reference in New Issue
Block a user