Skip to content

Commit c7f397a

Browse files
author
Erich Keane
authored
[NFC][SYCL] Add const to some uses of CXXRecordDecl (#2153)
This adds const-correctness to a bit of the visitor, as brought up in review on #1785.
1 parent a557d5a commit c7f397a

File tree

1 file changed

+17
-16
lines changed

1 file changed

+17
-16
lines changed

clang/lib/Sema/SemaSYCL.cpp

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -729,7 +729,7 @@ getKernelInvocationKind(FunctionDecl *KernelCallerFunc) {
729729
.Default(InvokeUnknown);
730730
}
731731

732-
static CXXRecordDecl *getKernelObjectType(FunctionDecl *Caller) {
732+
static const CXXRecordDecl *getKernelObjectType(FunctionDecl *Caller) {
733733
return (*Caller->param_begin())->getType()->getAsCXXRecordDecl();
734734
}
735735

@@ -878,12 +878,12 @@ class KernelObjVisitor {
878878
}
879879

880880
template <typename ParentTy, typename... Handlers>
881-
void VisitRecord(CXXRecordDecl *Owner, ParentTy &Parent,
882-
CXXRecordDecl *Wrapper, Handlers &... handlers);
881+
void VisitRecord(const CXXRecordDecl *Owner, ParentTy &Parent,
882+
const CXXRecordDecl *Wrapper, Handlers &... handlers);
883883

884884
template <typename... Handlers>
885-
void VisitRecordHelper(CXXRecordDecl *Owner,
886-
clang::CXXRecordDecl::base_class_range Range,
885+
void VisitRecordHelper(const CXXRecordDecl *Owner,
886+
clang::CXXRecordDecl::base_class_const_range Range,
887887
Handlers &... handlers) {
888888
for (const auto &Base : Range) {
889889
(void)std::initializer_list<int>{
@@ -906,15 +906,15 @@ class KernelObjVisitor {
906906
}
907907

908908
template <typename... Handlers>
909-
void VisitRecordHelper(CXXRecordDecl *Owner,
910-
clang::RecordDecl::field_range Range,
909+
void VisitRecordHelper(const CXXRecordDecl *Owner,
910+
RecordDecl::field_range Range,
911911
Handlers &... handlers) {
912912
VisitRecordFields(Owner, handlers...);
913913
}
914914

915915
// FIXME: Can this be refactored/handled some other way?
916916
template <typename ParentTy, typename... Handlers>
917-
void VisitStreamRecord(CXXRecordDecl *Owner, ParentTy &Parent,
917+
void VisitStreamRecord(const CXXRecordDecl *Owner, ParentTy &Parent,
918918
CXXRecordDecl *Wrapper, Handlers &... handlers) {
919919
(void)std::initializer_list<int>{
920920
(handlers.enterStruct(Owner, Parent), 0)...};
@@ -933,14 +933,15 @@ class KernelObjVisitor {
933933
}
934934

935935
template <typename... Handlers>
936-
void VisitRecordBases(CXXRecordDecl *KernelFunctor, Handlers &... handlers) {
936+
void VisitRecordBases(const CXXRecordDecl *KernelFunctor,
937+
Handlers &... handlers) {
937938
VisitRecordHelper(KernelFunctor, KernelFunctor->bases(), handlers...);
938939
}
939940

940941
// A visitor function that dispatches to functions as defined in
941942
// SyclKernelFieldHandler for the purposes of kernel generation.
942943
template <typename... Handlers>
943-
void VisitRecordFields(CXXRecordDecl *Owner, Handlers &... handlers) {
944+
void VisitRecordFields(const CXXRecordDecl *Owner, Handlers &... handlers) {
944945

945946
for (const auto Field : Owner->fields()) {
946947
(void)std::initializer_list<int>{
@@ -987,8 +988,8 @@ class KernelObjVisitor {
987988
// type (which doesn't exist in cases where it is a FieldDecl in the
988989
// 'root'), and Wrapper is the current struct being unwrapped.
989990
template <typename ParentTy, typename... Handlers>
990-
void KernelObjVisitor::VisitRecord(CXXRecordDecl *Owner, ParentTy &Parent,
991-
CXXRecordDecl *Wrapper,
991+
void KernelObjVisitor::VisitRecord(const CXXRecordDecl *Owner, ParentTy &Parent,
992+
const CXXRecordDecl *Wrapper,
992993
Handlers &... handlers) {
993994
(void)std::initializer_list<int>{(handlers.enterStruct(Owner, Parent), 0)...};
994995
VisitRecordHelper(Wrapper, Wrapper->bases(), handlers...);
@@ -1357,7 +1358,7 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
13571358
llvm::SmallVector<Expr *, 16> InitExprs;
13581359
VarDecl *KernelObjClone;
13591360
InitializedEntity VarEntity;
1360-
CXXRecordDecl *KernelObj;
1361+
const CXXRecordDecl *KernelObj;
13611362
llvm::SmallVector<Expr *, 16> MemberExprBases;
13621363
uint64_t ArrayIndex;
13631364
FunctionDecl *KernelCallerFunc;
@@ -1524,7 +1525,7 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
15241525
// FIXME Avoid creation of kernel obj clone.
15251526
// See https://github.com/intel/llvm/issues/1544 for details.
15261527
static VarDecl *createKernelObjClone(ASTContext &Ctx, DeclContext *DC,
1527-
CXXRecordDecl *KernelObj) {
1528+
const CXXRecordDecl *KernelObj) {
15281529
TypeSourceInfo *TSInfo =
15291530
KernelObj->isLambda() ? KernelObj->getLambdaTypeInfo() : nullptr;
15301531
VarDecl *VD = VarDecl::Create(
@@ -1572,7 +1573,7 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
15721573

15731574
public:
15741575
SyclKernelBodyCreator(Sema &S, SyclKernelDeclCreator &DC,
1575-
CXXRecordDecl *KernelObj,
1576+
const CXXRecordDecl *KernelObj,
15761577
FunctionDecl *KernelCallerFunc)
15771578
: SyclKernelFieldHandler(S), DeclCreator(DC),
15781579
KernelObjClone(createKernelObjClone(S.getASTContext(),
@@ -1934,7 +1935,7 @@ class SyclKernelIntHeaderCreator : public SyclKernelFieldHandler {
19341935
void Sema::ConstructOpenCLKernel(FunctionDecl *KernelCallerFunc,
19351936
MangleContext &MC) {
19361937
// The first argument to the KernelCallerFunc is the lambda object.
1937-
CXXRecordDecl *KernelObj = getKernelObjectType(KernelCallerFunc);
1938+
const CXXRecordDecl *KernelObj = getKernelObjectType(KernelCallerFunc);
19381939
assert(KernelObj && "invalid kernel caller");
19391940

19401941
// Calculate both names, since Integration headers need both.

0 commit comments

Comments
 (0)