@@ -1655,7 +1655,6 @@ class SyclKernelDeclCreator : public SyclKernelFieldHandler {
1655
1655
using SyclKernelFieldHandler::leaveStruct;
1656
1656
};
1657
1657
1658
- // TODO: ERICH: const-correctness of all the functions?
1659
1658
class SyclKernelBodyCreator : public SyclKernelFieldHandler {
1660
1659
SyclKernelDeclCreator &DeclCreator;
1661
1660
llvm::SmallVector<Stmt *, 16 > BodyStmts;
@@ -1825,7 +1824,7 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
1825
1824
addFieldInit (FD, Ty, ParamRef);
1826
1825
}
1827
1826
1828
- MemberExpr *BuildMemberExpr (Expr *Base, ValueDecl *Member) {
1827
+ MemberExpr *BuildMemberExpr (Expr *Base, const ValueDecl *Member) {
1829
1828
DeclAccessPair MemberDAP = DeclAccessPair::make (Member, AS_none);
1830
1829
MemberExpr *Result = SemaRef.BuildMemberExpr (
1831
1830
Base, /* IsArrow */ false , SourceLocation (), NestedNameSpecifierLoc (),
@@ -1836,6 +1835,17 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
1836
1835
return Result;
1837
1836
}
1838
1837
1838
+ void AddFieldMemberExpr (const FieldDecl *FD, QualType Ty) {
1839
+ if (!IsArrayType (FD, Ty))
1840
+ MemberExprBases.push_back (BuildMemberExpr (MemberExprBases.back (), FD));
1841
+ }
1842
+
1843
+ void RemoveFieldMemberExpr (const FieldDecl *FD, QualType Ty) {
1844
+ if (!IsArrayType (FD, Ty))
1845
+ MemberExprBases.pop_back ();
1846
+ }
1847
+
1848
+
1839
1849
void createSpecialMethodCall (const CXXRecordDecl *RD, StringRef MethodName,
1840
1850
SmallVectorImpl<Stmt *> &AddTo) {
1841
1851
CXXMethodDecl *Method = getMethodByName (RD, MethodName);
@@ -1923,14 +1933,12 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
1923
1933
addFieldInit (FD, Ty, None,
1924
1934
InitializationKind::CreateDefault (SourceLocation ()));
1925
1935
1926
- if (!IsArrayElement (FD, Ty))
1927
- MemberExprBases.push_back (BuildMemberExpr (MemberExprBases.back (), FD));
1936
+ AddFieldMemberExpr (FD, Ty);
1928
1937
1929
1938
const auto *RecordDecl = Ty->getAsCXXRecordDecl ();
1930
1939
createSpecialMethodCall (RecordDecl, InitMethodName, BodyStmts);
1931
1940
1932
- if (!IsArrayElement (FD, Ty))
1933
- MemberExprBases.pop_back ();
1941
+ RemoveFieldMemberExpr (FD, Ty);
1934
1942
1935
1943
return true ;
1936
1944
}
@@ -2027,8 +2035,7 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
2027
2035
const auto *StreamDecl = Ty->getAsCXXRecordDecl ();
2028
2036
CollectionInitExprs.push_back (CreateInitListExpr (StreamDecl));
2029
2037
2030
- if (!IsArrayElement (FD, Ty))
2031
- MemberExprBases.push_back (BuildMemberExpr (MemberExprBases.back (), FD));
2038
+ AddFieldMemberExpr (FD, Ty);
2032
2039
return true ;
2033
2040
}
2034
2041
@@ -2041,8 +2048,7 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
2041
2048
createSpecialMethodCall (StreamDecl, InitMethodName, BodyStmts);
2042
2049
createSpecialMethodCall (StreamDecl, FinalizeMethodName, FinalizeStmts);
2043
2050
2044
- if (!IsArrayElement (FD, Ty))
2045
- MemberExprBases.pop_back ();
2051
+ RemoveFieldMemberExpr (FD, Ty);
2046
2052
2047
2053
CollectionInitExprs.pop_back ();
2048
2054
return true ;
@@ -2052,17 +2058,15 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
2052
2058
++ContainerDepth;
2053
2059
addCollectionInitListExpr (Ty->getAsCXXRecordDecl ());
2054
2060
2055
- if (!IsArrayElement (FD, Ty))
2056
- MemberExprBases.push_back (BuildMemberExpr (MemberExprBases.back (), FD));
2061
+ AddFieldMemberExpr (FD, Ty);
2057
2062
return true ;
2058
2063
}
2059
2064
2060
2065
bool leaveStruct (const CXXRecordDecl *, FieldDecl *FD, QualType Ty) final {
2061
2066
--ContainerDepth;
2062
2067
CollectionInitExprs.pop_back ();
2063
2068
2064
- if (!IsArrayElement (FD, Ty))
2065
- MemberExprBases.pop_back ();
2069
+ RemoveFieldMemberExpr (FD, Ty);
2066
2070
return true ;
2067
2071
}
2068
2072
@@ -2104,8 +2108,7 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
2104
2108
2105
2109
// If this is the top-level array, we need to make a MemberExpr in addition
2106
2110
// to an array subscript.
2107
- if (!IsArrayElement (FD, ArrayType))
2108
- MemberExprBases.push_back (BuildMemberExpr (MemberExprBases.back (), FD));
2111
+ AddFieldMemberExpr (FD, Ty);
2109
2112
return true ;
2110
2113
}
2111
2114
@@ -2147,8 +2150,7 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
2147
2150
MemberExprBases.pop_back ();
2148
2151
2149
2152
// Remove the field access expr as well.
2150
- if (!IsArrayElement (FD, ArrayType))
2151
- MemberExprBases.pop_back ();
2153
+ AddFieldMemberExpr (FD, Ty);
2152
2154
return true ;
2153
2155
}
2154
2156
0 commit comments