File tree Expand file tree Collapse file tree 2 files changed +42
-1
lines changed
Filter options
Expand file tree Collapse file tree 2 files changed +42
-1
lines changed
Original file line number Diff line number Diff line change @@ -1164,7 +1164,21 @@ Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch,
1164
1164
1165
1165
SmallVector<DeclarationName,8 > UnhandledNames;
1166
1166
1167
- for (EI = EnumVals.begin (); EI != EIEnd; EI++){
1167
+ for (EI = EnumVals.begin (); EI != EIEnd; EI++) {
1168
+ // Don't warn about omitted unavailable EnumConstantDecls.
1169
+ switch (EI->second ->getAvailability ()) {
1170
+ case AR_Deprecated:
1171
+ // Omitting a deprecated constant is ok; it should never materialize.
1172
+ case AR_Unavailable:
1173
+ continue ;
1174
+
1175
+ case AR_NotYetIntroduced:
1176
+ // Partially available enum constants should be present. Note that we
1177
+ // suppress -Wunguarded-availability diagnostics for such uses.
1178
+ case AR_Available:
1179
+ break ;
1180
+ }
1181
+
1168
1182
// Drop unneeded case values
1169
1183
while (CI != CaseVals.end () && CI->first < EI->first )
1170
1184
CI++;
Original file line number Diff line number Diff line change
1
+ // RUN: %clang_cc1 -verify -Wswitch -triple x86_64-apple-macosx10.12 %s
2
+
3
+ enum SwitchOne {
4
+ Unavail __attribute__ ((availability (macos , unavailable ))),
5
+ };
6
+
7
+ void testSwitchOne (enum SwitchOne so ) {
8
+ switch (so ) {} // no warning
9
+ }
10
+
11
+ enum SwitchTwo {
12
+ Ed __attribute__ ((availability (macos , deprecated = 10.12 ))),
13
+ Vim __attribute__ ((availability (macos , deprecated = 10.13 ))),
14
+ Emacs ,
15
+ };
16
+
17
+ void testSwitchTwo (enum SwitchTwo st ) {
18
+ switch (st ) {} // expected-warning{{enumeration values 'Vim' and 'Emacs' not handled in switch}}
19
+ }
20
+
21
+ enum SwitchThree {
22
+ New __attribute__ ((availability (macos , introduced = 1000 ))),
23
+ };
24
+
25
+ void testSwitchThree (enum SwitchThree st ) {
26
+ switch (st ) {} // expected-warning{{enumeration value 'New' not handled in switch}}
27
+ }
You can’t perform that action at this time.
0 commit comments