Skip to content

Commit 891454b

Browse files
author
Erich Keane
committed
Refactor to make memberexprbases less error prone
1 parent 7ed04d7 commit 891454b

File tree

1 file changed

+20
-18
lines changed

1 file changed

+20
-18
lines changed

clang/lib/Sema/SemaSYCL.cpp

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1655,7 +1655,6 @@ class SyclKernelDeclCreator : public SyclKernelFieldHandler {
16551655
using SyclKernelFieldHandler::leaveStruct;
16561656
};
16571657

1658-
// TODO: ERICH: const-correctness of all the functions?
16591658
class SyclKernelBodyCreator : public SyclKernelFieldHandler {
16601659
SyclKernelDeclCreator &DeclCreator;
16611660
llvm::SmallVector<Stmt *, 16> BodyStmts;
@@ -1825,7 +1824,7 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
18251824
addFieldInit(FD, Ty, ParamRef);
18261825
}
18271826

1828-
MemberExpr *BuildMemberExpr(Expr *Base, ValueDecl *Member) {
1827+
MemberExpr *BuildMemberExpr(Expr *Base, const ValueDecl *Member) {
18291828
DeclAccessPair MemberDAP = DeclAccessPair::make(Member, AS_none);
18301829
MemberExpr *Result = SemaRef.BuildMemberExpr(
18311830
Base, /*IsArrow */ false, SourceLocation(), NestedNameSpecifierLoc(),
@@ -1836,6 +1835,17 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
18361835
return Result;
18371836
}
18381837

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+
18391849
void createSpecialMethodCall(const CXXRecordDecl *RD, StringRef MethodName,
18401850
SmallVectorImpl<Stmt *> &AddTo) {
18411851
CXXMethodDecl *Method = getMethodByName(RD, MethodName);
@@ -1923,14 +1933,12 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
19231933
addFieldInit(FD, Ty, None,
19241934
InitializationKind::CreateDefault(SourceLocation()));
19251935

1926-
if (!IsArrayElement(FD, Ty))
1927-
MemberExprBases.push_back(BuildMemberExpr(MemberExprBases.back(), FD));
1936+
AddFieldMemberExpr(FD, Ty);
19281937

19291938
const auto *RecordDecl = Ty->getAsCXXRecordDecl();
19301939
createSpecialMethodCall(RecordDecl, InitMethodName, BodyStmts);
19311940

1932-
if (!IsArrayElement(FD, Ty))
1933-
MemberExprBases.pop_back();
1941+
RemoveFieldMemberExpr(FD, Ty);
19341942

19351943
return true;
19361944
}
@@ -2027,8 +2035,7 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
20272035
const auto *StreamDecl = Ty->getAsCXXRecordDecl();
20282036
CollectionInitExprs.push_back(CreateInitListExpr(StreamDecl));
20292037

2030-
if (!IsArrayElement(FD, Ty))
2031-
MemberExprBases.push_back(BuildMemberExpr(MemberExprBases.back(), FD));
2038+
AddFieldMemberExpr(FD, Ty);
20322039
return true;
20332040
}
20342041

@@ -2041,8 +2048,7 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
20412048
createSpecialMethodCall(StreamDecl, InitMethodName, BodyStmts);
20422049
createSpecialMethodCall(StreamDecl, FinalizeMethodName, FinalizeStmts);
20432050

2044-
if (!IsArrayElement(FD, Ty))
2045-
MemberExprBases.pop_back();
2051+
RemoveFieldMemberExpr(FD, Ty);
20462052

20472053
CollectionInitExprs.pop_back();
20482054
return true;
@@ -2052,17 +2058,15 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
20522058
++ContainerDepth;
20532059
addCollectionInitListExpr(Ty->getAsCXXRecordDecl());
20542060

2055-
if (!IsArrayElement(FD, Ty))
2056-
MemberExprBases.push_back(BuildMemberExpr(MemberExprBases.back(), FD));
2061+
AddFieldMemberExpr(FD, Ty);
20572062
return true;
20582063
}
20592064

20602065
bool leaveStruct(const CXXRecordDecl *, FieldDecl *FD, QualType Ty) final {
20612066
--ContainerDepth;
20622067
CollectionInitExprs.pop_back();
20632068

2064-
if (!IsArrayElement(FD, Ty))
2065-
MemberExprBases.pop_back();
2069+
RemoveFieldMemberExpr(FD, Ty);
20662070
return true;
20672071
}
20682072

@@ -2104,8 +2108,7 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
21042108

21052109
// If this is the top-level array, we need to make a MemberExpr in addition
21062110
// to an array subscript.
2107-
if (!IsArrayElement(FD, ArrayType))
2108-
MemberExprBases.push_back(BuildMemberExpr(MemberExprBases.back(), FD));
2111+
AddFieldMemberExpr(FD, Ty);
21092112
return true;
21102113
}
21112114

@@ -2147,8 +2150,7 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
21472150
MemberExprBases.pop_back();
21482151

21492152
// Remove the field access expr as well.
2150-
if (!IsArrayElement(FD, ArrayType))
2151-
MemberExprBases.pop_back();
2153+
AddFieldMemberExpr(FD, Ty);
21522154
return true;
21532155
}
21542156

0 commit comments

Comments
 (0)