Skip to content

Commit 7ed04d7

Browse files
author
Erich Keane
committed
Fix a pair of issues in stream/arrays of struct, add streams test that tests most array situations too.
1 parent a6ee425 commit 7ed04d7

File tree

3 files changed

+950
-6
lines changed

3 files changed

+950
-6
lines changed

clang/lib/Sema/SemaSYCL.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

clang/test/SemaSYCL/Inputs/sycl.hpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,18 @@ class handler {
218218
}
219219
};
220220

221+
class stream {
222+
public:
223+
stream(unsigned long BufferSize, unsigned long MaxStatementSize,
224+
handler &CGH) {}
225+
226+
void __init() {}
227+
void use() const {}
228+
229+
void __finalize() {}
230+
};
231+
232+
221233
namespace ONEAPI {
222234
namespace experimental {
223235
template <typename T, typename ID = T>

0 commit comments

Comments
 (0)