Skip to content

Commit d06e6a3

Browse files
committed
[Sema] Improved dynamic replacement diagnostic.
Make use of swift::getAccessorNameForDiagnostic instead of having a parallel list of accessor names in DiagnosticsSema.def.
1 parent 6805266 commit d06e6a3

File tree

3 files changed

+24
-3
lines changed

3 files changed

+24
-3
lines changed

include/swift/AST/DiagnosticsSema.def

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6584,8 +6584,8 @@ ERROR(dynamic_with_transparent,none,
65846584
ERROR(dynamic_replacement_accessor_not_dynamic, none,
65856585
"replaced accessor for %0 is not marked dynamic", (DeclName))
65866586
ERROR(dynamic_replacement_accessor_not_explicit, none,
6587-
"replaced accessor %select{get|set|_read|_modify|willSet|didSet|unsafeAddress|addressWithOwner|addressWithNativeOwner|unsafeMutableAddress|mutableAddressWithOwner|}0 for %1 is not explicitly defined",
6588-
(unsigned, DeclName))
6587+
"replaced %0 for %1 is not explicitly defined",
6588+
(StringRef, DeclName))
65896589
ERROR(dynamic_replacement_function_not_dynamic, none,
65906590
"replaced function %0 is not marked dynamic", (DeclName))
65916591
ERROR(dynamic_replacement_function_not_found, none,

lib/Sema/TypeCheckAttr.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3623,7 +3623,8 @@ static FuncDecl *findSimilarAccessor(DeclNameRef replacedVarName,
36233623
origStorage->getWriteImpl() == WriteImplKind::Stored)) {
36243624
Diags.diagnose(attr->getLocation(),
36253625
diag::dynamic_replacement_accessor_not_explicit,
3626-
(unsigned)origAccessor->getAccessorKind(),
3626+
getAccessorNameForDiagnostic(origAccessor->getAccessorKind(),
3627+
/*article=*/false),
36273628
origStorage->getName());
36283629
attr->setInvalid();
36293630
return nullptr;

test/attr/dynamicReplacement.swift

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,3 +75,23 @@ extension P {
7575
func replacement_f() {
7676
}
7777
}
78+
79+
struct ImplicitModifier {
80+
var i: Int {
81+
get { 1 }
82+
set {}
83+
}
84+
}
85+
86+
extension ImplicitModifier {
87+
@_dynamicReplacement(for: i) // expected-error{{replaced 'modify' accessor for 'i' is not explicitly defined}}
88+
var _i: Int {
89+
get {
90+
0
91+
}
92+
_modify {
93+
var i: Int = 0
94+
yield &i
95+
}
96+
}
97+
}

0 commit comments

Comments
 (0)