@@ -1494,6 +1494,9 @@ bool ByteCodeExprGen<Emitter>::VisitMemberExpr(const MemberExpr *E) {
1494
1494
return false ;
1495
1495
}
1496
1496
1497
+ if (!isa<FieldDecl>(Member))
1498
+ return this ->discard (Base) && this ->visitDeclRef (Member, E);
1499
+
1497
1500
if (Initializing) {
1498
1501
if (!this ->delegate (Base))
1499
1502
return false ;
@@ -1503,19 +1506,16 @@ bool ByteCodeExprGen<Emitter>::VisitMemberExpr(const MemberExpr *E) {
1503
1506
}
1504
1507
1505
1508
// Base above gives us a pointer on the stack.
1506
- if (const auto *FD = dyn_cast<FieldDecl>(Member)) {
1507
- const RecordDecl *RD = FD->getParent ();
1508
- const Record *R = getRecord (RD);
1509
- if (!R)
1510
- return false ;
1511
- const Record::Field *F = R->getField (FD);
1512
- // Leave a pointer to the field on the stack.
1513
- if (F->Decl ->getType ()->isReferenceType ())
1514
- return this ->emitGetFieldPop (PT_Ptr, F->Offset , E) && maybeLoadValue ();
1515
- return this ->emitGetPtrFieldPop (F->Offset , E) && maybeLoadValue ();
1516
- }
1517
-
1518
- return false ;
1509
+ const auto *FD = cast<FieldDecl>(Member);
1510
+ const RecordDecl *RD = FD->getParent ();
1511
+ const Record *R = getRecord (RD);
1512
+ if (!R)
1513
+ return false ;
1514
+ const Record::Field *F = R->getField (FD);
1515
+ // Leave a pointer to the field on the stack.
1516
+ if (F->Decl ->getType ()->isReferenceType ())
1517
+ return this ->emitGetFieldPop (PT_Ptr, F->Offset , E) && maybeLoadValue ();
1518
+ return this ->emitGetPtrFieldPop (F->Offset , E) && maybeLoadValue ();
1519
1519
}
1520
1520
1521
1521
template <class Emitter >
0 commit comments