@@ -1046,10 +1046,22 @@ LValue CIRGenFunction::emitCastLValue(const CastExpr *e) {
10461046 llvm_unreachable (" Invalid cast kind" );
10471047}
10481048
1049+ static DeclRefExpr *tryToConvertMemberExprToDeclRefExpr (CIRGenFunction &cgf,
1050+ const MemberExpr *me) {
1051+ if (auto *vd = dyn_cast<VarDecl>(me->getMemberDecl ())) {
1052+ // Try to emit static variable member expressions as DREs.
1053+ return DeclRefExpr::Create (
1054+ cgf.getContext (), NestedNameSpecifierLoc (), SourceLocation (), vd,
1055+ /* RefersToEnclosingVariableOrCapture=*/ false , me->getExprLoc (),
1056+ me->getType (), me->getValueKind (), nullptr , nullptr , me->isNonOdrUse ());
1057+ }
1058+ return nullptr ;
1059+ }
1060+
10491061LValue CIRGenFunction::emitMemberExpr (const MemberExpr *e) {
1050- if (isa<VarDecl>(e-> getMemberDecl () )) {
1051- cgm. errorNYI (e->getSourceRange (), " emitMemberExpr: VarDecl " );
1052- return LValue ( );
1062+ if (DeclRefExpr *dre = tryToConvertMemberExprToDeclRefExpr (* this , e )) {
1063+ emitIgnoredExpr (e->getBase () );
1064+ return emitDeclRefLValue (dre );
10531065 }
10541066
10551067 Expr *baseExpr = e->getBase ();
@@ -2102,18 +2114,6 @@ CIRGenFunction::tryEmitAsConstant(const DeclRefExpr *refExpr) {
21022114 return ConstantEmission::forValue (cstToEmit);
21032115}
21042116
2105- static DeclRefExpr *tryToConvertMemberExprToDeclRefExpr (CIRGenFunction &cgf,
2106- const MemberExpr *me) {
2107- if (auto *vd = dyn_cast<VarDecl>(me->getMemberDecl ())) {
2108- // Try to emit static variable member expressions as DREs.
2109- return DeclRefExpr::Create (
2110- cgf.getContext (), NestedNameSpecifierLoc (), SourceLocation (), vd,
2111- /* RefersToEnclosingVariableOrCapture=*/ false , me->getExprLoc (),
2112- me->getType (), me->getValueKind (), nullptr , nullptr , me->isNonOdrUse ());
2113- }
2114- return nullptr ;
2115- }
2116-
21172117CIRGenFunction::ConstantEmission
21182118CIRGenFunction::tryEmitAsConstant (const MemberExpr *me) {
21192119 if (DeclRefExpr *dre = tryToConvertMemberExprToDeclRefExpr (*this , me))
0 commit comments