@@ -670,6 +670,8 @@ class EffectsHandlingWalker : public ASTWalker {
670670 recurse = asImpl ().checkForEach (forEach);
671671 } else if (auto labeled = dyn_cast<LabeledConditionalStmt>(S)) {
672672 asImpl ().noteLabeledConditionalStmt (labeled);
673+ } else if (auto defer = dyn_cast<DeferStmt>(S)) {
674+ recurse = asImpl ().checkDefer (defer);
673675 }
674676
675677 if (!recurse)
@@ -2106,6 +2108,10 @@ class ApplyClassifier {
21062108 return ShouldRecurse;
21072109 }
21082110
2111+ ShouldRecurse_t checkDefer (DeferStmt *S) {
2112+ return ShouldNotRecurse;
2113+ }
2114+
21092115 ShouldRecurse_t checkSingleValueStmtExpr (SingleValueStmtExpr *SVE) {
21102116 return ShouldRecurse;
21112117 }
@@ -2251,6 +2257,10 @@ class ApplyClassifier {
22512257 return ShouldRecurse;
22522258 }
22532259
2260+ ShouldRecurse_t checkDefer (DeferStmt *S) {
2261+ return ShouldNotRecurse;
2262+ }
2263+
22542264 ShouldRecurse_t checkSingleValueStmtExpr (SingleValueStmtExpr *SVE) {
22552265 return ShouldRecurse;
22562266 }
@@ -2350,6 +2360,10 @@ class ApplyClassifier {
23502360 return ShouldNotRecurse;
23512361 }
23522362
2363+ ShouldRecurse_t checkDefer (DeferStmt *S) {
2364+ return ShouldNotRecurse;
2365+ }
2366+
23532367 ShouldRecurse_t checkSingleValueStmtExpr (SingleValueStmtExpr *SVE) {
23542368 return ShouldRecurse;
23552369 }
@@ -4394,6 +4408,17 @@ class CheckEffectsCoverage : public EffectsHandlingWalker<CheckEffectsCoverage>
43944408 return ShouldRecurse;
43954409 }
43964410
4411+ ShouldRecurse_t checkDefer (DeferStmt *S) {
4412+ // Pretend we're in an 'unsafe'.
4413+ ContextScope scope (*this , std::nullopt );
4414+ scope.enterUnsafe (S->getDeferLoc ());
4415+
4416+ // Walk the call expression. We don't care about the rest.
4417+ S->getCallExpr ()->walk (*this );
4418+
4419+ return ShouldNotRecurse;
4420+ }
4421+
43974422 void diagnoseRedundantTry (AnyTryExpr *E) const {
43984423 if (auto *SVE = SingleValueStmtExpr::tryDigOutSingleValueStmtExpr (E)) {
43994424 // For an if/switch expression, produce a tailored warning.
0 commit comments