@@ -889,6 +889,7 @@ class accessor :
889889 getAdjustedMode (PropertyList),
890890 detail::getSyclObjImpl (BufferRef).get (), AdjustedDim, sizeof (DataT),
891891 BufferRef.OffsetInBytes , BufferRef.IsSubBuffer ) {
892+ checkDeviceAccessorBufferSize (BufferRef.get_count ());
892893 if (!IsPlaceH)
893894 addHostAccessorAndWait (AccessorBaseHost::impl.get ());
894895#endif
@@ -912,6 +913,7 @@ class accessor :
912913 getAdjustedMode (PropertyList),
913914 detail::getSyclObjImpl (BufferRef).get (), Dimensions, sizeof (DataT),
914915 BufferRef.OffsetInBytes , BufferRef.IsSubBuffer ) {
916+ checkDeviceAccessorBufferSize (BufferRef.get_count ());
915917 detail::associateWithHandler (CommandGroupHandler, this , AccessTarget);
916918 }
917919#endif
@@ -935,6 +937,7 @@ class accessor :
935937 getAdjustedMode (PropertyList),
936938 detail::getSyclObjImpl (BufferRef).get (), Dimensions, sizeof (DataT),
937939 BufferRef.OffsetInBytes , BufferRef.IsSubBuffer ) {
940+ checkDeviceAccessorBufferSize (BufferRef.get_count ());
938941 if (!IsPlaceH)
939942 addHostAccessorAndWait (AccessorBaseHost::impl.get ());
940943 }
@@ -972,6 +975,7 @@ class accessor :
972975 getAdjustedMode (PropertyList),
973976 detail::getSyclObjImpl (BufferRef).get (), Dimensions, sizeof (DataT),
974977 BufferRef.OffsetInBytes , BufferRef.IsSubBuffer ) {
978+ checkDeviceAccessorBufferSize (BufferRef.get_count ());
975979 detail::associateWithHandler (CommandGroupHandler, this , AccessTarget);
976980 }
977981#endif
@@ -1058,6 +1062,7 @@ class accessor :
10581062 detail::getSyclObjImpl (BufferRef).get (), Dimensions,
10591063 sizeof (DataT), BufferRef.OffsetInBytes ,
10601064 BufferRef.IsSubBuffer ) {
1065+ checkDeviceAccessorBufferSize (BufferRef.get_count ());
10611066 if (!IsPlaceH)
10621067 addHostAccessorAndWait (AccessorBaseHost::impl.get ());
10631068 }
@@ -1097,6 +1102,7 @@ class accessor :
10971102 detail::getSyclObjImpl (BufferRef).get (), Dimensions,
10981103 sizeof (DataT), BufferRef.OffsetInBytes ,
10991104 BufferRef.IsSubBuffer ) {
1105+ checkDeviceAccessorBufferSize (BufferRef.get_count ());
11001106 detail::associateWithHandler (CommandGroupHandler, this , AccessTarget);
11011107 }
11021108#endif
@@ -1219,6 +1225,15 @@ class accessor :
12191225
12201226 bool operator ==(const accessor &Rhs) const { return impl == Rhs.impl ; }
12211227 bool operator !=(const accessor &Rhs) const { return !(*this == Rhs); }
1228+
1229+ private:
1230+ void checkDeviceAccessorBufferSize (const size_t elemInBuffer) {
1231+ if (!IsHostBuf && elemInBuffer == 0 )
1232+ throw cl::sycl::invalid_object_error (
1233+ " SYCL buffer size is zero. To create a device accessor, SYCL "
1234+ " buffer size must be greater than zero." ,
1235+ PI_INVALID_VALUE);
1236+ }
12221237};
12231238
12241239#if __cplusplus > 201402L
0 commit comments