diff --git a/sycl/include/CL/sycl/detail/cg.hpp b/sycl/include/CL/sycl/detail/cg.hpp index 1bb1351c14b07..10aa2b25c99c0 100644 --- a/sycl/include/CL/sycl/detail/cg.hpp +++ b/sycl/include/CL/sycl/detail/cg.hpp @@ -325,7 +325,7 @@ class CG { CG(CGTYPE Type, std::vector> ArgsStorage, std::vector AccStorage, - std::vector> SharedPtrStorage, + std::vector> SharedPtrStorage, std::vector Requirements) : MType(Type), MArgsStorage(std::move(ArgsStorage)), MAccStorage(std::move(AccStorage)), @@ -347,7 +347,7 @@ class CG { // Storage for accessors. std::vector MAccStorage; // Storage for shared_ptrs. - std::vector> MSharedPtrStorage; + std::vector> MSharedPtrStorage; // List of requirements that specify which memory is needed for the command // group to be executed. std::vector MRequirements; @@ -368,7 +368,7 @@ class CGExecKernel : public CG { std::shared_ptr SyclKernel, std::vector> ArgsStorage, std::vector AccStorage, - std::vector> SharedPtrStorage, + std::vector> SharedPtrStorage, std::vector Requirements, std::vector Args, std::string KernelName, detail::OSModuleHandle OSModuleHandle, @@ -396,7 +396,7 @@ class CGCopy : public CG { CGCopy(CGTYPE CopyType, void *Src, void *Dst, std::vector> ArgsStorage, std::vector AccStorage, - std::vector> SharedPtrStorage, + std::vector> SharedPtrStorage, std::vector Requirements) : CG(CopyType, std::move(ArgsStorage), std::move(AccStorage), std::move(SharedPtrStorage), std::move(Requirements)), @@ -414,7 +414,7 @@ class CGFill : public CG { CGFill(std::vector Pattern, void *Ptr, std::vector> ArgsStorage, std::vector AccStorage, - std::vector> SharedPtrStorage, + std::vector> SharedPtrStorage, std::vector Requirements) : CG(FILL, std::move(ArgsStorage), std::move(AccStorage), std::move(SharedPtrStorage), std::move(Requirements)), @@ -429,7 +429,7 @@ class CGUpdateHost : public CG { public: CGUpdateHost(void *Ptr, std::vector> ArgsStorage, std::vector AccStorage, - std::vector> SharedPtrStorage, + std::vector> SharedPtrStorage, std::vector Requirements) : CG(UPDATE_HOST, std::move(ArgsStorage), std::move(AccStorage), std::move(SharedPtrStorage), std::move(Requirements)), @@ -438,6 +438,6 @@ class CGUpdateHost : public CG { Requirement *getReqToUpdate() { return MPtr; } }; -} // namespace cl -} // namespace sycl } // namespace detail +} // namespace sycl +} // namespace cl diff --git a/sycl/include/CL/sycl/handler.hpp b/sycl/include/CL/sycl/handler.hpp index 82a3b2861b285..e56466c294504 100644 --- a/sycl/include/CL/sycl/handler.hpp +++ b/sycl/include/CL/sycl/handler.hpp @@ -141,7 +141,7 @@ class handler { std::vector> MArgsStorage; std::vector MAccStorage; std::vector> MStreamStorage; - std::vector> MSharedPtrStorage; + std::vector> MSharedPtrStorage; // The list of arguments for the kernel. std::vector MArgs; // The list of associated accessors with this handler. @@ -924,7 +924,7 @@ class handler { // Make sure data shared_ptr points to is not released until we finish // work with it. MSharedPtrStorage.push_back(Src); - T_Dst *RawSrcPtr = Src.get(); + T_Src *RawSrcPtr = Src.get(); copy(RawSrcPtr, Dst); } diff --git a/sycl/test/basic_tests/handler/handler_mem_op.cpp b/sycl/test/basic_tests/handler/handler_mem_op.cpp index 3ed7421d85219..77565a3ecb37c 100644 --- a/sycl/test/basic_tests/handler/handler_mem_op.cpp +++ b/sycl/test/basic_tests/handler/handler_mem_op.cpp @@ -32,6 +32,7 @@ template void test_fill(T Val); template void test_copy_ptr_acc(); template void test_copy_acc_ptr(); template void test_copy_shared_ptr_acc(); +template void test_copy_shared_ptr_const_acc(); template void test_copy_acc_shared_ptr(); template void test_copy_acc_acc(); template void test_update_host(); @@ -73,6 +74,14 @@ int main() { test_copy_shared_ptr_acc>(); test_copy_shared_ptr_acc>(); } + // handler.copy(const shared_ptr, acc) + { + test_copy_shared_ptr_const_acc(); + test_copy_shared_ptr_const_acc(); + test_copy_shared_ptr_const_acc>(); + test_copy_shared_ptr_const_acc>(); + test_copy_shared_ptr_const_acc>(); + } // handler.copy(acc, shared_ptr) { test_copy_acc_shared_ptr(); @@ -202,6 +211,24 @@ template void test_copy_shared_ptr_acc() { } } +template void test_copy_shared_ptr_const_acc() { + constexpr size_t Size = 10; + T Data[Size] = {0}; + std::shared_ptr Values(new T[Size]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}); + { + buffer Buffer(Data, range<1>(Size)); + queue Queue; + Queue.submit([&](handler &Cgh) { + accessor + Accessor(Buffer, Cgh, range<1>(Size)); + Cgh.copy(Values, Accessor); + }); + } + for (size_t I = 0; I < Size; ++I) { + assert(Data[I] == Values.get()[I]); + } +} + template void test_copy_acc_shared_ptr() { const size_t Size = 10; T Data[Size] = {0};