Skip to content

Commit 025728f

Browse files
committed
Adopt ValueDecl for invalid redeclaration errors
Causes slight changes to notes on certain `init`s.
1 parent 09e2077 commit 025728f

File tree

7 files changed

+25
-30
lines changed

7 files changed

+25
-30
lines changed

include/swift/AST/DiagnosticsSema.def

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -956,24 +956,26 @@ NOTE(invalid_redecl_by_optionality_note,none,
956956
"%select{implicitly unwrapped |}0optional parameter is of "
957957
"same type as %select{implicitly unwrapped |}1optional parameter",
958958
(bool, bool))
959-
ERROR(invalid_redecl,none,"invalid redeclaration of %0", (DeclName))
959+
ERROR(invalid_redecl,none,"invalid redeclaration of %0", (const ValueDecl *))
960960
ERROR(invalid_redecl_init,none,
961961
"invalid redeclaration of synthesized %select{|memberwise }1%0",
962-
(DeclName, bool))
962+
(const ValueDecl *, bool))
963963
ERROR(invalid_redecl_implicit,none,
964964
"invalid redeclaration of synthesized "
965965
"%select{%0|implementation for protocol requirement}1 %2",
966-
(DescriptiveDeclKind, bool, DeclName))
966+
(DescriptiveDeclKind, bool, const ValueDecl *))
967967
WARNING(invalid_redecl_swift5_warning,Deprecation,
968968
"redeclaration of %0 is deprecated and will be an error in Swift 5",
969-
(DeclName))
969+
(const ValueDecl *))
970970

971971
NOTE(invalid_redecl_prev,none,
972+
"%0 previously declared here", (const ValueDecl *))
973+
NOTE(invalid_redecl_prev_name,none,
972974
"%0 previously declared here", (DeclName))
973975
NOTE(invalid_redecl_implicit_wrapper,none,
974976
"%0 synthesized for property wrapper "
975977
"%select{projected value|backing storage}1",
976-
(DeclName, bool))
978+
(const ValueDecl *, bool))
977979

978980
ERROR(protocol_extension_in_where_clause,none,
979981
"%0 was defined in extension of protocol %1 and cannot be referenced "

lib/Sema/TypeCheckDeclObjC.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2642,7 +2642,7 @@ bool swift::diagnoseObjCMethodConflicts(SourceFile &sf) {
26422642

26432643
if (redeclSame)
26442644
Ctx.Diags.diagnose(originalDecl, diag::invalid_redecl_prev,
2645-
originalDecl->getBaseName());
2645+
originalDecl);
26462646
else
26472647
Ctx.Diags.diagnose(originalDecl, diag::objc_declared_here,
26482648
origDiagInfo.first, origDiagInfo.second);

lib/Sema/TypeCheckDeclPrimary.cpp

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -459,9 +459,8 @@ static void diagnoseDuplicateDecls(T &&decls) {
459459
auto *other = found.first->second;
460460

461461
current->getASTContext().Diags.diagnoseWithNotes(
462-
current->diagnose(diag::invalid_redecl,
463-
current->getName()), [&]() {
464-
other->diagnose(diag::invalid_redecl_prev, other->getName());
462+
current->diagnose(diag::invalid_redecl, current), [&]() {
463+
other->diagnose(diag::invalid_redecl_prev, other);
465464
});
466465

467466
// Mark the decl as invalid. This is needed to avoid emitting a
@@ -760,9 +759,8 @@ CheckRedeclarationRequest::evaluate(Evaluator &eval, ValueDecl *current,
760759

761760
if (optionalRedecl && currIsIUO != otherIsIUO) {
762761
ctx.Diags.diagnoseWithNotes(
763-
current->diagnose(diag::invalid_redecl,
764-
current->getName()), [&]() {
765-
other->diagnose(diag::invalid_redecl_prev, other->getName());
762+
current->diagnose(diag::invalid_redecl, current), [&]() {
763+
other->diagnose(diag::invalid_redecl_prev, other);
766764
});
767765
current->diagnose(diag::invalid_redecl_by_optionality_note,
768766
otherIsIUO, currIsIUO);
@@ -869,9 +867,8 @@ CheckRedeclarationRequest::evaluate(Evaluator &eval, ValueDecl *current,
869867
// If this isn't a redeclaration in the current version of Swift, but
870868
// would be in Swift 5 mode, emit a warning instead of an error.
871869
if (wouldBeSwift5Redeclaration) {
872-
current->diagnose(diag::invalid_redecl_swift5_warning,
873-
current->getName());
874-
other->diagnose(diag::invalid_redecl_prev, other->getName());
870+
current->diagnose(diag::invalid_redecl_swift5_warning, current);
871+
other->diagnose(diag::invalid_redecl_prev, other);
875872
} else {
876873
const auto *otherInit = dyn_cast<ConstructorDecl>(other);
877874
// Provide a better description for implicit initializers.
@@ -881,8 +878,7 @@ CheckRedeclarationRequest::evaluate(Evaluator &eval, ValueDecl *current,
881878
// checker should have already taken care of emitting a more
882879
// productive diagnostic.
883880
if (!other->getOverriddenDecl())
884-
current->diagnose(diag::invalid_redecl_init,
885-
current->getName(),
881+
current->diagnose(diag::invalid_redecl_init, current,
886882
otherInit->isMemberwiseInitializer());
887883
} else if (current->isImplicit() || other->isImplicit()) {
888884
// If both declarations are implicit, we do not diagnose anything
@@ -937,7 +933,7 @@ CheckRedeclarationRequest::evaluate(Evaluator &eval, ValueDecl *current,
937933
}
938934
declToDiagnose->diagnose(diag::invalid_redecl_implicit,
939935
current->getDescriptiveKind(),
940-
isProtocolRequirement, other->getName());
936+
isProtocolRequirement, other);
941937

942938
// Emit a specialized note if the one of the declarations is
943939
// the backing storage property ('_foo') or projected value
@@ -965,17 +961,16 @@ CheckRedeclarationRequest::evaluate(Evaluator &eval, ValueDecl *current,
965961
if (varToDiagnose) {
966962
assert(declToDiagnose);
967963
varToDiagnose->diagnose(
968-
diag::invalid_redecl_implicit_wrapper, varToDiagnose->getName(),
964+
diag::invalid_redecl_implicit_wrapper, varToDiagnose,
969965
kind == PropertyWrapperSynthesizedPropertyKind::Backing);
970966
}
971967

972968
current->setInvalid();
973969
}
974970
} else {
975971
ctx.Diags.diagnoseWithNotes(
976-
current->diagnose(diag::invalid_redecl,
977-
current->getName()), [&]() {
978-
other->diagnose(diag::invalid_redecl_prev, other->getName());
972+
current->diagnose(diag::invalid_redecl, current), [&]() {
973+
other->diagnose(diag::invalid_redecl_prev, other);
979974
});
980975

981976
current->setInvalid();

lib/Sema/TypeCheckGeneric.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -525,18 +525,16 @@ void TypeChecker::checkShadowedGenericParams(GenericContext *dc) {
525525
auto *existingParamDecl = found->second;
526526

527527
if (existingParamDecl->getDeclContext() == dc) {
528-
genericParamDecl->diagnose(
529-
diag::invalid_redecl,
530-
genericParamDecl->getName());
528+
genericParamDecl->diagnose(diag::invalid_redecl, genericParamDecl);
531529
} else {
532530
genericParamDecl->diagnose(
533531
diag::shadowed_generic_param,
534-
genericParamDecl->getName()).warnUntilSwiftVersion(6);
532+
genericParamDecl).warnUntilSwiftVersion(6);
535533
}
536534

537535
if (existingParamDecl->getLoc()) {
538536
existingParamDecl->diagnose(diag::invalid_redecl_prev,
539-
existingParamDecl->getName());
537+
existingParamDecl);
540538
}
541539

542540
continue;

lib/Sema/TypeCheckStmt.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -588,7 +588,7 @@ static void checkLabeledStmtShadowing(
588588
ctx.Diags.diagnose(
589589
ls->getLabelInfo().Loc, diag::label_shadowed, name);
590590
ctx.Diags.diagnose(
591-
prevLS->getLabelInfo().Loc, diag::invalid_redecl_prev, name);
591+
prevLS->getLabelInfo().Loc, diag::invalid_redecl_prev_name, name);
592592
}
593593
}
594594
}

test/ClangImporter/objc_init_redundant.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import Foundation
1111
extension NSObject {
1212
@objc convenience init() { self.init() } // expected-error{{initializer 'init()' with Objective-C selector 'init' conflicts with previous declaration with the same Objective-C selector}}
1313
// CHECK: objc_init_redundant.swift:[[@LINE-1]]:21: error: initializer 'init()' with Objective-C selector 'init' conflicts
14-
// CHECK: ObjectiveC.NSObject:{{.*}}note: 'init' previously declared here
14+
// CHECK: ObjectiveC.NSObject:{{.*}}note: 'init()' previously declared here
1515
}
1616

1717
extension NSObject {

test/attr/attr_objc.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ protocol subject_containerObjCProtocol1 {
364364
@objc // access-note-move{{subject_containerObjCProtocol2}}
365365
protocol subject_containerObjCProtocol2 {
366366
init(a: Int)
367-
// expected-note@-1 {{'init' previously declared here}}
367+
// expected-note@-1 {{'init(a:)' previously declared here}}
368368

369369
@objc // FIXME: Access notes can't distinguish between init(a:) overloads
370370
init(a: Double)

0 commit comments

Comments
 (0)