Skip to content

Commit 26c2f86

Browse files
committed
[Parse] Diagnose default argument for subscript in protocols
Protocol requirements don't support default arguments. Although this is a "semantic" diagnostics, we currently do this for 'func' and 'init' in Parser. So for fixing a crash, let's to it for 'subscript' in Parser too. rdar://problem/73159041 (cherry picked from commit 8a58107)
1 parent 2b924c2 commit 26c2f86

File tree

3 files changed

+9
-0
lines changed

3 files changed

+9
-0
lines changed

include/swift/AST/DiagnosticsParse.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -790,6 +790,8 @@ ERROR(protocol_method_argument_init,none,
790790
"default argument not permitted in a protocol method", ())
791791
ERROR(protocol_init_argument_init,none,
792792
"default argument not permitted in a protocol initializer", ())
793+
ERROR(protocol_subscript_argument_init,none,
794+
"default argument not permitted in a protocol subscript", ())
793795
ERROR(tuple_type_multiple_labels,none,
794796
"tuple element cannot have two labels", ())
795797

lib/Parse/ParseDecl.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7366,6 +7366,12 @@ Parser::parseDeclSubscript(SourceLoc StaticLoc,
73667366

73677367
diagnoseWhereClauseInGenericParamList(GenericParams);
73687368

7369+
// Protocol requirement arguments may not have default values.
7370+
if (Flags.contains(PD_InProtocol) && DefaultArgs.HasDefaultArgument) {
7371+
diagnose(SubscriptLoc, diag::protocol_subscript_argument_init);
7372+
return nullptr;
7373+
}
7374+
73697375
// Build an AST for the subscript declaration.
73707376
DeclName name = DeclName(Context, DeclBaseName::createSubscript(),
73717377
argumentNames);

test/decl/protocol/protocol_with_default_args.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ struct X : P {
1111

1212
protocol Q {
1313
init(truth: Bool = false) // expected-error{{default argument not permitted in a protocol initializer}}
14+
subscript(x: Int, default: Int = 0) -> Self { get } // expected-error {{default argument not permitted in a protocol subscript}}
1415
}

0 commit comments

Comments
 (0)