@@ -509,6 +509,10 @@ template <class Impl>
509509class EffectsHandlingWalker : public ASTWalker {
510510 Impl &asImpl () { return *static_cast <Impl*>(this ); }
511511public:
512+ LazyInitializerWalking getLazyInitializerWalkingBehavior () override {
513+ return LazyInitializerWalking::InAccessor;
514+ }
515+
512516 // / Only look at the expansions for effects checking.
513517 MacroWalking getMacroWalkingBehavior () const override {
514518 return MacroWalking::Expansion;
@@ -940,7 +944,7 @@ class Classification {
940944 ConditionalEffectKind conditionalKind,
941945 PotentialEffectReason reason) {
942946 Classification result;
943- if (!thrownError || isNeverThrownError (thrownError))
947+ if (isNeverThrownError (thrownError))
944948 return result;
945949
946950 assert (!thrownError->hasError ());
@@ -2086,6 +2090,9 @@ class Context {
20862090 // / The initializer for a global variable.
20872091 GlobalVarInitializer,
20882092
2093+ // / The initializer for a `lazy` variable.
2094+ LazyVarInitializer,
2095+
20892096 // / The initializer for an enum element.
20902097 EnumElementInitializer,
20912098
@@ -2101,8 +2108,12 @@ class Context {
21012108
21022109private:
21032110 static Context getContextForPatternBinding (PatternBindingDecl *pbd) {
2111+ auto *var = pbd->getSingleVar ();
2112+
21042113 if (!pbd->isStatic () && pbd->getDeclContext ()->isTypeContext ()) {
21052114 return Context (Kind::IVarInitializer, pbd->getDeclContext ());
2115+ } else if (var && var->getAttrs ().hasAttribute <LazyAttr>()) {
2116+ return Context (Kind::LazyVarInitializer, pbd->getDeclContext ());
21062117 } else {
21072118 return Context (Kind::GlobalVarInitializer, pbd->getDeclContext ());
21082119 }
@@ -2520,6 +2531,7 @@ class Context {
25202531
25212532 case Kind::EnumElementInitializer:
25222533 case Kind::GlobalVarInitializer:
2534+ case Kind::LazyVarInitializer:
25232535 case Kind::IVarInitializer:
25242536 case Kind::DefaultArgument:
25252537 case Kind::PropertyWrapper:
@@ -2556,6 +2568,7 @@ class Context {
25562568
25572569 case Kind::EnumElementInitializer:
25582570 case Kind::GlobalVarInitializer:
2571+ case Kind::LazyVarInitializer:
25592572 case Kind::IVarInitializer:
25602573 case Kind::DefaultArgument:
25612574 case Kind::PropertyWrapper:
@@ -2582,6 +2595,7 @@ class Context {
25822595
25832596 case Kind::EnumElementInitializer:
25842597 case Kind::GlobalVarInitializer:
2598+ case Kind::LazyVarInitializer:
25852599 case Kind::IVarInitializer:
25862600 case Kind::DefaultArgument:
25872601 case Kind::PropertyWrapper:
@@ -2691,6 +2705,7 @@ class Context {
26912705
26922706 case Kind::EnumElementInitializer:
26932707 case Kind::GlobalVarInitializer:
2708+ case Kind::LazyVarInitializer:
26942709 case Kind::IVarInitializer:
26952710 case Kind::DefaultArgument:
26962711 case Kind::PropertyWrapper:
0 commit comments