@@ -508,6 +508,10 @@ template <class Impl>
508508class EffectsHandlingWalker : public ASTWalker {
509509 Impl &asImpl () { return *static_cast <Impl*>(this ); }
510510public:
511+ LazyInitializerWalking getLazyInitializerWalkingBehavior () override {
512+ return LazyInitializerWalking::InAccessor;
513+ }
514+
511515 // / Only look at the expansions for effects checking.
512516 MacroWalking getMacroWalkingBehavior () const override {
513517 return MacroWalking::Expansion;
@@ -939,7 +943,7 @@ class Classification {
939943 ConditionalEffectKind conditionalKind,
940944 PotentialEffectReason reason) {
941945 Classification result;
942- if (!thrownError || isNeverThrownError (thrownError))
946+ if (isNeverThrownError (thrownError))
943947 return result;
944948
945949 assert (!thrownError->hasError ());
@@ -2085,6 +2089,9 @@ class Context {
20852089 // / The initializer for a global variable.
20862090 GlobalVarInitializer,
20872091
2092+ // / The initializer for a `lazy` variable.
2093+ LazyVarInitializer,
2094+
20882095 // / The initializer for an enum element.
20892096 EnumElementInitializer,
20902097
@@ -2100,8 +2107,12 @@ class Context {
21002107
21012108private:
21022109 static Context getContextForPatternBinding (PatternBindingDecl *pbd) {
2110+ auto *var = pbd->getSingleVar ();
2111+
21032112 if (!pbd->isStatic () && pbd->getDeclContext ()->isTypeContext ()) {
21042113 return Context (Kind::IVarInitializer, pbd->getDeclContext ());
2114+ } else if (var && var->getAttrs ().hasAttribute <LazyAttr>()) {
2115+ return Context (Kind::LazyVarInitializer, pbd->getDeclContext ());
21052116 } else {
21062117 return Context (Kind::GlobalVarInitializer, pbd->getDeclContext ());
21072118 }
@@ -2519,6 +2530,7 @@ class Context {
25192530
25202531 case Kind::EnumElementInitializer:
25212532 case Kind::GlobalVarInitializer:
2533+ case Kind::LazyVarInitializer:
25222534 case Kind::IVarInitializer:
25232535 case Kind::DefaultArgument:
25242536 case Kind::PropertyWrapper:
@@ -2555,6 +2567,7 @@ class Context {
25552567
25562568 case Kind::EnumElementInitializer:
25572569 case Kind::GlobalVarInitializer:
2570+ case Kind::LazyVarInitializer:
25582571 case Kind::IVarInitializer:
25592572 case Kind::DefaultArgument:
25602573 case Kind::PropertyWrapper:
@@ -2581,6 +2594,7 @@ class Context {
25812594
25822595 case Kind::EnumElementInitializer:
25832596 case Kind::GlobalVarInitializer:
2597+ case Kind::LazyVarInitializer:
25842598 case Kind::IVarInitializer:
25852599 case Kind::DefaultArgument:
25862600 case Kind::PropertyWrapper:
@@ -2690,6 +2704,7 @@ class Context {
26902704
26912705 case Kind::EnumElementInitializer:
26922706 case Kind::GlobalVarInitializer:
2707+ case Kind::LazyVarInitializer:
26932708 case Kind::IVarInitializer:
26942709 case Kind::DefaultArgument:
26952710 case Kind::PropertyWrapper:
0 commit comments