[Sema] Don't warn about omitting unavailable enum constants in a switch
rdar://42717026
Differential revision: https://reviews.llvm.org/D51649
llvm-svn: 341490
diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp
index 8d620a7..61c6b37 100644
--- a/clang/lib/Sema/SemaStmt.cpp
+++ b/clang/lib/Sema/SemaStmt.cpp
@@ -1164,7 +1164,21 @@
SmallVector<DeclarationName,8> UnhandledNames;
- for (EI = EnumVals.begin(); EI != EIEnd; EI++){
+ for (EI = EnumVals.begin(); EI != EIEnd; EI++) {
+ // Don't warn about omitted unavailable EnumConstantDecls.
+ switch (EI->second->getAvailability()) {
+ case AR_Deprecated:
+ // Omitting a deprecated constant is ok; it should never materialize.
+ case AR_Unavailable:
+ continue;
+
+ case AR_NotYetIntroduced:
+ // Partially available enum constants should be present. Note that we
+ // suppress -Wunguarded-availability diagnostics for such uses.
+ case AR_Available:
+ break;
+ }
+
// Drop unneeded case values
while (CI != CaseVals.end() && CI->first < EI->first)
CI++;