Skip to content

Commit ed060de

Browse files
authored
Merge pull request #4909 from jrose-apple/swift-3-fix-private-access-checking
Remove incorrect early exit from type access checking.
2 parents fe1fd2e + c9b960f commit ed060de

File tree

3 files changed

+248
-33
lines changed

3 files changed

+248
-33
lines changed

include/swift/AST/DiagnosticsSema.def

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1108,13 +1108,27 @@ ERROR(pattern_type_access,none,
11081108
"because its type uses "
11091109
"%select{a private|a fileprivate|an internal|PUBLIC}4 type",
11101110
(bool, bool, bool, Accessibility, Accessibility))
1111+
WARNING(pattern_type_access_warn,none,
1112+
"%select{%select{variable|constant}0|property}1 "
1113+
"%select{should be declared %select{private|fileprivate|internal|PUBLIC}4"
1114+
"|should not be declared %select{in this context|fileprivate|internal|public}3}2 "
1115+
"because its type uses "
1116+
"%select{a private|a fileprivate|an internal|PUBLIC}4 type",
1117+
(bool, bool, bool, Accessibility, Accessibility))
11111118
ERROR(pattern_type_access_inferred,none,
11121119
"%select{%select{variable|constant}0|property}1 "
11131120
"%select{must be declared %select{private|fileprivate|internal|PUBLIC}4"
11141121
"|cannot be declared %select{PRIVATE|fileprivate|internal|public}3}2 "
11151122
"because its type %5 uses "
11161123
"%select{a private|a fileprivate|an internal|PUBLIC}4 type",
11171124
(bool, bool, bool, Accessibility, Accessibility, Type))
1125+
WARNING(pattern_type_access_inferred_warn,none,
1126+
"%select{%select{variable|constant}0|property}1 "
1127+
"%select{should be declared %select{private|fileprivate|internal|PUBLIC}4"
1128+
"|should not be declared %select{in this context|fileprivate|internal|public}3}2 "
1129+
"because its type %5 uses "
1130+
"%select{a private|a fileprivate|an internal|PUBLIC}4 type",
1131+
(bool, bool, bool, Accessibility, Accessibility, Type))
11181132
ERROR(pattern_binds_no_variables,none,
11191133
"%select{property|global variable}0 declaration does not bind any "
11201134
"variables",
@@ -1154,6 +1168,13 @@ ERROR(type_alias_underlying_type_access,none,
11541168
"because its underlying type uses "
11551169
"%select{a private|a fileprivate|an internal|PUBLIC}2 type",
11561170
(bool, Accessibility, Accessibility))
1171+
WARNING(type_alias_underlying_type_access_warn,none,
1172+
"type alias %select{should be declared "
1173+
"%select{private|fileprivate|internal|PUBLIC}2"
1174+
"|should not be declared %select{PRIVATE|fileprivate|internal|public}1}0 "
1175+
"because its underlying type uses "
1176+
"%select{a private|a fileprivate|an internal|PUBLIC}2 type",
1177+
(bool, Accessibility, Accessibility))
11571178

11581179
// Subscripts
11591180
ERROR(subscript_type_access,none,
@@ -1163,6 +1184,13 @@ ERROR(subscript_type_access,none,
11631184
"because its %select{index|element type}3 uses "
11641185
"%select{a private|a fileprivate|an internal|PUBLIC}2 type",
11651186
(bool, Accessibility, Accessibility, bool))
1187+
WARNING(subscript_type_access_warn,none,
1188+
"subscript %select{should be declared "
1189+
"%select{private|fileprivate|internal|PUBLIC}2"
1190+
"|should not be declared %select{in this context|fileprivate|internal|public}1}0 "
1191+
"because its %select{index|element type}3 uses "
1192+
"%select{a private|a fileprivate|an internal|PUBLIC}2 type",
1193+
(bool, Accessibility, Accessibility, bool))
11661194

11671195
// Functions
11681196
ERROR(function_type_access,none,
@@ -1172,6 +1200,13 @@ ERROR(function_type_access,none,
11721200
"because its %select{parameter|result}4 uses "
11731201
"%select{a private|a fileprivate|an internal|PUBLIC}2 type",
11741202
(bool, Accessibility, Accessibility, unsigned, bool))
1203+
WARNING(function_type_access_warn,none,
1204+
"%select{function|method|initializer}3 "
1205+
"%select{should be declared %select{private|fileprivate|internal|PUBLIC}2"
1206+
"|should not be declared %select{in this context|fileprivate|internal|public}1}0 "
1207+
"because its %select{parameter|result}4 uses "
1208+
"%select{a private|a fileprivate|an internal|PUBLIC}2 type",
1209+
(bool, Accessibility, Accessibility, unsigned, bool))
11751210
WARNING(non_trailing_closure_before_default_args,none,
11761211
"closure parameter prior to parameters with default arguments will "
11771212
"not be treated as a trailing closure", ())
@@ -1302,6 +1337,12 @@ ERROR(protocol_refine_access,none,
13021337
"|%select{PRIVATE|fileprivate|internal|public}1 protocol cannot "
13031338
"refine}0 %select{a private|a fileprivate|an internal|PUBLIC}2 protocol",
13041339
(bool, Accessibility, Accessibility))
1340+
WARNING(protocol_refine_access_warn,none,
1341+
"%select{protocol should be declared "
1342+
"%select{private|fileprivate|internal|PUBLIC}2 because it refines"
1343+
"|%select{in this context|fileprivate|internal|public}1 protocol should not "
1344+
"refine}0 %select{a private|a fileprivate|an internal|PUBLIC}2 protocol",
1345+
(bool, Accessibility, Accessibility))
13051346
ERROR(protocol_property_must_be_computed_var,none,
13061347
"immutable property requirement must be declared as 'var' with a "
13071348
"'{ get }' specifier", ())
@@ -1334,6 +1375,12 @@ ERROR(associated_type_access,none,
13341375
"%select{a private|a fileprivate|an internal|PUBLIC}1 type in its "
13351376
"%select{default definition|requirement}2 ",
13361377
(Accessibility, Accessibility, unsigned))
1378+
WARNING(associated_type_access_warn,none,
1379+
"associated type in "
1380+
"%select{a private|a fileprivate|an internal|a public}0 protocol uses "
1381+
"%select{a private|a fileprivate|an internal|PUBLIC}1 type in its "
1382+
"%select{default definition|requirement}2 ",
1383+
(Accessibility, Accessibility, unsigned))
13371384

13381385
NOTE(bad_associated_type_deduction,none,
13391386
"unable to infer associated type %0 for protocol %1",
@@ -1491,6 +1538,13 @@ ERROR(generic_param_access,none,
14911538
"because its generic %select{parameter|requirement}4 uses "
14921539
"%select{a private|a fileprivate|an internal|PUBLIC}3 type",
14931540
(DescriptiveDeclKind, bool, Accessibility, Accessibility, bool))
1541+
WARNING(generic_param_access_warn,none,
1542+
"%0 %select{should be declared "
1543+
"%select{private|fileprivate|internal|PUBLIC}3"
1544+
"|should not be declared %select{in this context|fileprivate|internal|public}2}1 "
1545+
"because its generic %select{parameter|requirement}4 uses "
1546+
"%select{a private|a fileprivate|an internal|PUBLIC}3 type",
1547+
(DescriptiveDeclKind, bool, Accessibility, Accessibility, bool))
14941548

14951549
ERROR(override_multiple_decls_base,none,
14961550
"declaration %0 cannot override more than one superclass declaration",
@@ -1683,6 +1737,10 @@ ERROR(enum_case_access,none,
16831737
"enum case in %select{PRIVATE|a fileprivate|an internal|a public}0 enum "
16841738
"uses %select{a private|a fileprivate|an internal|PUBLIC}1 type",
16851739
(Accessibility, Accessibility))
1740+
WARNING(enum_case_access_warn,none,
1741+
"enum case in %select{a private|a fileprivate|an internal|a public}0 enum "
1742+
"uses %select{a private|a fileprivate|an internal|PUBLIC}1 type",
1743+
(Accessibility, Accessibility))
16861744
ERROR(enum_stored_property,none,
16871745
"enums may not contain stored properties", ())
16881746

@@ -1706,6 +1764,13 @@ ERROR(enum_raw_type_access,none,
17061764
"because its raw type uses "
17071765
"%select{a private|a fileprivate|an internal|PUBLIC}2 type",
17081766
(bool, Accessibility, Accessibility))
1767+
WARNING(enum_raw_type_access_warn,none,
1768+
"enum %select{should be declared "
1769+
"%select{private|fileprivate|internal|PUBLIC}2"
1770+
"|should not be declared %select{in this context|fileprivate|internal|public}1}0 "
1771+
"because its raw type uses "
1772+
"%select{a private|a fileprivate|an internal|PUBLIC}2 type",
1773+
(bool, Accessibility, Accessibility))
17091774

17101775
NOTE(enum_here,none,
17111776
"enum %0 declared here", (Identifier))
@@ -2639,6 +2704,13 @@ ERROR(class_super_access,none,
26392704
"because its superclass is "
26402705
"%select{private|fileprivate|internal|PUBLIC}2",
26412706
(bool, Accessibility, Accessibility))
2707+
WARNING(class_super_access_warn,none,
2708+
"class %select{should be declared "
2709+
"%select{private|fileprivate|internal|PUBLIC}2"
2710+
"|should not be declared %select{in this context|fileprivate|internal|public}1}0 "
2711+
"because its superclass is "
2712+
"%select{private|fileprivate|internal|PUBLIC}2",
2713+
(bool, Accessibility, Accessibility))
26422714
ERROR(dot_protocol_on_non_existential,none,
26432715
"cannot use 'Protocol' with non-protocol type %0", (Type))
26442716
ERROR(tuple_single_element,none,

0 commit comments

Comments
 (0)