@@ -2027,7 +2027,8 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
20272027 const auto *StreamDecl = Ty->getAsCXXRecordDecl ();
20282028 CollectionInitExprs.push_back (CreateInitListExpr (StreamDecl));
20292029
2030- MemberExprBases.push_back (BuildMemberExpr (MemberExprBases.back (), FD));
2030+ if (!IsArrayElement (FD, Ty))
2031+ MemberExprBases.push_back (BuildMemberExpr (MemberExprBases.back (), FD));
20312032 return true ;
20322033 }
20332034
@@ -2036,8 +2037,6 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
20362037 // Stream requires that its 'init' calls happen after its accessors init
20372038 // calls, so add them here instead.
20382039 const auto *StreamDecl = Ty->getAsCXXRecordDecl ();
2039- if (!IsArrayElement (FD, Ty))
2040- MemberExprBases.push_back (BuildMemberExpr (MemberExprBases.back (), FD));
20412040
20422041 createSpecialMethodCall (StreamDecl, InitMethodName, BodyStmts);
20432042 createSpecialMethodCall (StreamDecl, FinalizeMethodName, FinalizeStmts);
@@ -2046,23 +2045,24 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
20462045 MemberExprBases.pop_back ();
20472046
20482047 CollectionInitExprs.pop_back ();
2049- MemberExprBases.pop_back ();
20502048 return true ;
20512049 }
20522050
20532051 bool enterStruct (const CXXRecordDecl *RD, FieldDecl *FD, QualType Ty) final {
20542052 ++ContainerDepth;
20552053 addCollectionInitListExpr (Ty->getAsCXXRecordDecl ());
20562054
2057- MemberExprBases.push_back (BuildMemberExpr (MemberExprBases.back (), FD));
2055+ if (!IsArrayElement (FD, Ty))
2056+ MemberExprBases.push_back (BuildMemberExpr (MemberExprBases.back (), FD));
20582057 return true ;
20592058 }
20602059
20612060 bool leaveStruct (const CXXRecordDecl *, FieldDecl *FD, QualType Ty) final {
20622061 --ContainerDepth;
20632062 CollectionInitExprs.pop_back ();
20642063
2065- MemberExprBases.pop_back ();
2064+ if (!IsArrayElement (FD, Ty))
2065+ MemberExprBases.pop_back ();
20662066 return true ;
20672067 }
20682068
0 commit comments