@@ -6532,14 +6532,13 @@ bool Compiler<Emitter>::visitDeclRef(const ValueDecl *D, const Expr *E) {
65326532 if (DiscardResult)
65336533 return true ;
65346534
6535- if (const auto *ECD = dyn_cast<EnumConstantDecl>(D)) {
6535+ if (const auto *ECD = dyn_cast<EnumConstantDecl>(D))
65366536 return this ->emitConst (ECD->getInitVal (), E);
6537- } else if (const auto *BD = dyn_cast<BindingDecl>(D)) {
6538- return this ->visit (BD->getBinding ());
6539- } else if (const auto *FuncDecl = dyn_cast<FunctionDecl>(D)) {
6537+ if (const auto *FuncDecl = dyn_cast<FunctionDecl>(D)) {
65406538 const Function *F = getFunction (FuncDecl);
65416539 return F && this ->emitGetFnPtr (F, E);
6542- } else if (const auto *TPOD = dyn_cast<TemplateParamObjectDecl>(D)) {
6540+ }
6541+ if (const auto *TPOD = dyn_cast<TemplateParamObjectDecl>(D)) {
65436542 if (std::optional<unsigned > Index = P.getOrCreateGlobal (D)) {
65446543 if (!this ->emitGetPtrGlobal (*Index, E))
65456544 return false ;
@@ -6560,21 +6559,25 @@ bool Compiler<Emitter>::visitDeclRef(const ValueDecl *D, const Expr *E) {
65606559 // value.
65616560 bool IsReference = D->getType ()->isReferenceType ();
65626561
6563- // Check for local/global variables and parameters .
6562+ // Local variables.
65646563 if (auto It = Locals.find (D); It != Locals.end ()) {
65656564 const unsigned Offset = It->second .Offset ;
65666565 if (IsReference)
65676566 return this ->emitGetLocal (classifyPrim (E), Offset, E);
65686567 return this ->emitGetPtrLocal (Offset, E);
6569- } else if (auto GlobalIndex = P.getGlobal (D)) {
6568+ }
6569+ // Global variables.
6570+ if (auto GlobalIndex = P.getGlobal (D)) {
65706571 if (IsReference) {
65716572 if (!Ctx.getLangOpts ().CPlusPlus11 )
65726573 return this ->emitGetGlobal (classifyPrim (E), *GlobalIndex, E);
65736574 return this ->emitGetGlobalUnchecked (classifyPrim (E), *GlobalIndex, E);
65746575 }
65756576
65766577 return this ->emitGetPtrGlobal (*GlobalIndex, E);
6577- } else if (const auto *PVD = dyn_cast<ParmVarDecl>(D)) {
6578+ }
6579+ // Function parameters.
6580+ if (const auto *PVD = dyn_cast<ParmVarDecl>(D)) {
65786581 if (auto It = this ->Params .find (PVD); It != this ->Params .end ()) {
65796582 if (IsReference || !It->second .IsPtr )
65806583 return this ->emitGetParam (classifyPrim (E), It->second .Offset , E);
@@ -6600,20 +6603,25 @@ bool Compiler<Emitter>::visitDeclRef(const ValueDecl *D, const Expr *E) {
66006603 return this ->visitDeclRef (D, E);
66016604 };
66026605
6603- // Handle lambda captures.
6606+ // Lambda captures.
66046607 if (auto It = this ->LambdaCaptures .find (D);
66056608 It != this ->LambdaCaptures .end ()) {
66066609 auto [Offset, IsPtr] = It->second ;
66076610
66086611 if (IsPtr)
66096612 return this ->emitGetThisFieldPtr (Offset, E);
66106613 return this ->emitGetPtrThisField (Offset, E);
6611- } else if (const auto *DRE = dyn_cast<DeclRefExpr>(E);
6612- DRE && DRE->refersToEnclosingVariableOrCapture ()) {
6614+ }
6615+
6616+ if (const auto *DRE = dyn_cast<DeclRefExpr>(E);
6617+ DRE && DRE->refersToEnclosingVariableOrCapture ()) {
66136618 if (const auto *VD = dyn_cast<VarDecl>(D); VD && VD->isInitCapture ())
66146619 return revisit (VD);
66156620 }
66166621
6622+ if (const auto *BD = dyn_cast<BindingDecl>(D))
6623+ return this ->visit (BD->getBinding ());
6624+
66176625 // Avoid infinite recursion.
66186626 if (D == InitializingDecl)
66196627 return this ->emitDummyPtr (D, E);
@@ -6666,7 +6674,7 @@ bool Compiler<Emitter>::visitDeclRef(const ValueDecl *D, const Expr *E) {
66666674 if (VD->evaluateValue ())
66676675 return revisit (VD);
66686676
6669- if (!D-> getType ()-> isReferenceType () )
6677+ if (!IsReference )
66706678 return this ->emitDummyPtr (D, E);
66716679
66726680 return this ->emitInvalidDeclRef (cast<DeclRefExpr>(E),
0 commit comments