// RUN: %clang_cc1 -verify -Wswitch -Wreturn-type -triple x86_64-apple-macosx10.12 %s // RUN: %clang_cc1 -verify -Wswitch -Wreturn-type -Wno-deprecated-declarations-switch-case -DNO_DEPRECATED_CASE -triple x86_64-apple-macosx10.12 %s enum SwitchOne { Unavail __attribute__((availability(macos, unavailable))), }; void testSwitchOne(enum SwitchOne so) { switch (so) {} // no warning } enum SwitchTwo { Ed __attribute__((availability(macos, deprecated=10.12))), Vim __attribute__((availability(macos, deprecated=10.13))), Emacs, }; void testSwitchTwo(enum SwitchTwo st) { switch (st) {} // expected-warning{{enumeration values 'Ed', 'Vim', and 'Emacs' not handled in switch}} } enum SwitchThree { New __attribute__((availability(macos, introduced=1000))), }; void testSwitchThree(enum SwitchThree st) { switch (st) {} // expected-warning{{enumeration value 'New' not handled in switch}} } enum SwitchFour { Red, Green, #ifndef NO_DEPRECATED_CASE // expected-note@+2{{'Blue' has been explicitly marked deprecated here}} #endif Blue [[deprecated]] }; int testSwitchFour(enum SwitchFour e) { switch (e) { // expected-warning{{enumeration value 'Blue' not handled in switch}} case Red: return 1; case Green: return 2; } } // expected-warning{{non-void function does not return a value in all control paths}} int testSwitchFourCovered(enum SwitchFour e) { switch (e) { case Red: return 1; case Green: return 2; #ifndef NO_DEPRECATED_CASE // expected-warning@+2{{'Blue' is deprecated}} #endif case Blue: return 3; } // no warning }