Author: epilk Date: Fri Aug 18 13:20:56 2017 New Revision: 311191 URL: http://llvm.org/viewvc/llvm-project?rev=311191&view=rev Log: [Sema] Don't emit -Wunguarded-availability for switch cases
This made it awkward to switch over an enum where some entries are partial and is unlikley to catch any bugs. Differential revision: https://reviews.llvm.org/D36777 Modified: cfe/trunk/lib/Sema/SemaDeclAttr.cpp cfe/trunk/test/SemaObjC/unguarded-availability.m Modified: cfe/trunk/lib/Sema/SemaDeclAttr.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclAttr.cpp?rev=311191&r1=311190&r2=311191&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaDeclAttr.cpp (original) +++ cfe/trunk/lib/Sema/SemaDeclAttr.cpp Fri Aug 18 13:20:56 2017 @@ -7513,6 +7513,10 @@ public: bool TraverseLambdaExpr(LambdaExpr *E) { return true; } + // for 'case X:' statements, don't bother looking at the 'X'; it can't lead + // to any useful diagnostics. + bool TraverseCaseStmt(CaseStmt *CS) { return TraverseStmt(CS->getSubStmt()); } + bool VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *PRE) { if (PRE->isClassReceiver()) DiagnoseDeclAvailability(PRE->getClassReceiver(), PRE->getReceiverLocation()); Modified: cfe/trunk/test/SemaObjC/unguarded-availability.m URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/unguarded-availability.m?rev=311191&r1=311190&r2=311191&view=diff ============================================================================== --- cfe/trunk/test/SemaObjC/unguarded-availability.m (original) +++ cfe/trunk/test/SemaObjC/unguarded-availability.m Fri Aug 18 13:20:56 2017 @@ -287,3 +287,27 @@ AVAILABLE_10_12 @interface BaseClass (CategoryWithNewProtocolRequirement) <NewProtocol> @end + +typedef enum { + AK_Dodo __attribute__((availability(macos, deprecated=10.3))), // expected-note 3 {{marked deprecated here}} + AK_Cat __attribute__((availability(macos, introduced=10.4))), + AK_CyborgCat __attribute__((availability(macos, introduced=10.12))), // expected-note {{marked partial here}} +} Animals; + +void switchAnimals(Animals a) { + switch (a) { + case AK_Dodo: break; // expected-warning{{'AK_Dodo' is deprecated}} + case AK_Cat: break; + case AK_Cat|AK_CyborgCat: break; // expected-warning{{case value not in enum}} + case AK_CyborgCat: break; // no warn + } + + switch (a) { + case AK_Dodo...AK_CyborgCat: // expected-warning {{'AK_Dodo' is depr}} + break; + } + + (void)AK_Dodo; // expected-warning{{'AK_Dodo' is deprecated}} + (void)AK_Cat; // no warning + (void)AK_CyborgCat; // expected-warning{{'AK_CyborgCat' is only available on macOS 10.12 or newer}} expected-note {{@available}} +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits