Skip to content

Commit cba990a

Browse files
committed
Fix is_placeholder() condition for generic accessors
1 parent 9cb0b40 commit cba990a

File tree

1 file changed

+32
-4
lines changed

1 file changed

+32
-4
lines changed

include/simsycl/sycl/accessor.hh

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,10 @@ class accessor : public simsycl::detail::property_interface {
300300

301301
void swap(accessor &other) { return std::swap(*this, other); }
302302

303-
bool is_placeholder() const { return !m_required; }
303+
bool is_placeholder() const {
304+
SIMSYCL_CHECK(m_required != nullptr);
305+
return !*m_required;
306+
}
304307

305308
size_type byte_size() const noexcept {
306309
SIMSYCL_CHECK(m_buffer != nullptr);
@@ -334,6 +337,7 @@ class accessor : public simsycl::detail::property_interface {
334337
requires(AccessMode != access_mode::atomic)
335338
{
336339
SIMSYCL_CHECK(m_buffer != nullptr);
340+
SIMSYCL_CHECK(m_required != nullptr);
337341
SIMSYCL_CHECK(*m_required);
338342
return m_buffer->data[detail::get_linear_index(m_buffer->range, index)];
339343
}
@@ -352,6 +356,7 @@ class accessor : public simsycl::detail::property_interface {
352356
requires(AccessTarget == target::device)
353357
{
354358
SIMSYCL_CHECK(m_buffer != nullptr);
359+
SIMSYCL_CHECK(m_required != nullptr);
355360
SIMSYCL_CHECK(*m_required);
356361
return m_buffer->data;
357362
}
@@ -360,6 +365,7 @@ class accessor : public simsycl::detail::property_interface {
360365
requires(AccessTarget == target::host_task)
361366
{
362367
SIMSYCL_CHECK(m_buffer != nullptr);
368+
SIMSYCL_CHECK(m_required != nullptr);
363369
SIMSYCL_CHECK(*m_required);
364370
return m_buffer->data;
365371
}
@@ -369,6 +375,7 @@ class accessor : public simsycl::detail::property_interface {
369375
requires(AccessTarget == target::device)
370376
{
371377
SIMSYCL_CHECK(m_buffer != nullptr);
378+
SIMSYCL_CHECK(m_required != nullptr);
372379
SIMSYCL_CHECK(*m_required);
373380
return accessor_ptr<IsDecorated>(m_buffer->data);
374381
}
@@ -433,6 +440,7 @@ class accessor : public simsycl::detail::property_interface {
433440
void require() {
434441
SIMSYCL_CHECK(m_buffer != nullptr);
435442
SIMSYCL_CHECK(m_guard != nullptr);
443+
SIMSYCL_CHECK(m_required != nullptr);
436444
m_guard->check_access_from_command_group({m_access_offset, m_access_range, AccessMode});
437445
*m_required = true;
438446
}
@@ -537,7 +545,10 @@ class accessor<DataT, 0, AccessMode, AccessTarget, IsPlaceholder> : public simsy
537545

538546
void swap(accessor &other) { return std::swap(*this, other); }
539547

540-
bool is_placeholder() const { return !m_required; }
548+
bool is_placeholder() const {
549+
SIMSYCL_CHECK(m_required != nullptr);
550+
return !*m_required;
551+
}
541552

542553
size_type byte_size() const noexcept { return sizeof(DataT); }
543554

@@ -555,6 +566,7 @@ class accessor<DataT, 0, AccessMode, AccessTarget, IsPlaceholder> : public simsy
555566
requires(AccessMode != access_mode::atomic)
556567
{
557568
SIMSYCL_CHECK(m_buffer != nullptr);
569+
SIMSYCL_CHECK(m_required != nullptr);
558570
SIMSYCL_CHECK(*m_required);
559571
return *m_buffer->data;
560572
}
@@ -563,6 +575,7 @@ class accessor<DataT, 0, AccessMode, AccessTarget, IsPlaceholder> : public simsy
563575
requires(AccessMode != access_mode::atomic && AccessMode != access_mode::read)
564576
{
565577
SIMSYCL_CHECK(m_buffer != nullptr);
578+
SIMSYCL_CHECK(m_required != nullptr);
566579
SIMSYCL_CHECK(*m_required);
567580
*m_buffer->data = other;
568581
return *this;
@@ -572,6 +585,7 @@ class accessor<DataT, 0, AccessMode, AccessTarget, IsPlaceholder> : public simsy
572585
requires(AccessMode != access_mode::atomic && AccessMode != access_mode::read)
573586
{
574587
SIMSYCL_CHECK(m_buffer != nullptr);
588+
SIMSYCL_CHECK(m_required != nullptr);
575589
SIMSYCL_CHECK(*m_required);
576590
*m_buffer->data = std::move(other);
577591
return *this;
@@ -584,6 +598,7 @@ class accessor<DataT, 0, AccessMode, AccessTarget, IsPlaceholder> : public simsy
584598
requires(AccessTarget == target::device)
585599
{
586600
SIMSYCL_CHECK(m_buffer != nullptr);
601+
SIMSYCL_CHECK(m_required != nullptr);
587602
SIMSYCL_CHECK(*m_required);
588603
return m_buffer->data;
589604
}
@@ -592,6 +607,7 @@ class accessor<DataT, 0, AccessMode, AccessTarget, IsPlaceholder> : public simsy
592607
requires(AccessTarget == target::host_task)
593608
{
594609
SIMSYCL_CHECK(m_buffer != nullptr);
610+
SIMSYCL_CHECK(m_required != nullptr);
595611
SIMSYCL_CHECK(*m_required);
596612
return m_buffer->data;
597613
}
@@ -601,6 +617,7 @@ class accessor<DataT, 0, AccessMode, AccessTarget, IsPlaceholder> : public simsy
601617
requires(AccessTarget == target::device)
602618
{
603619
SIMSYCL_CHECK(m_buffer != nullptr);
620+
SIMSYCL_CHECK(m_required != nullptr);
604621
SIMSYCL_CHECK(*m_required);
605622
return accessor_ptr<IsDecorated>(m_buffer->data);
606623
}
@@ -636,6 +653,7 @@ class accessor<DataT, 0, AccessMode, AccessTarget, IsPlaceholder> : public simsy
636653
void require() {
637654
SIMSYCL_CHECK(m_buffer != nullptr);
638655
SIMSYCL_CHECK(m_guard != nullptr);
656+
SIMSYCL_CHECK(m_required != nullptr);
639657
m_guard->check_access_from_command_group({0, 1, AccessMode});
640658
*m_required = true;
641659
}
@@ -1142,7 +1160,10 @@ class accessor<DataT, Dimensions, AccessMode, target::constant_buffer, IsPlaceho
11421160

11431161
friend bool operator==(const accessor &lhs, const accessor &rhs) = default;
11441162

1145-
bool is_placeholder() const { return !*m_required; }
1163+
bool is_placeholder() const {
1164+
SIMSYCL_CHECK(m_required != nullptr);
1165+
return !*m_required;
1166+
}
11461167

11471168
size_t get_size() const noexcept { return get_count() * sizeof(DataT); }
11481169

@@ -1220,6 +1241,7 @@ class accessor<DataT, Dimensions, AccessMode, target::constant_buffer, IsPlaceho
12201241
void require() {
12211242
SIMSYCL_CHECK(m_buffer != nullptr);
12221243
SIMSYCL_CHECK(m_guard != nullptr);
1244+
SIMSYCL_CHECK(m_required != nullptr);
12231245
m_guard->check_access_from_command_group({m_access_offset, m_access_range, AccessMode});
12241246
*m_required = true;
12251247
}
@@ -1255,20 +1277,25 @@ class accessor<DataT, 0, AccessMode, target::constant_buffer, IsPlaceholder> fin
12551277

12561278
friend bool operator==(const accessor &lhs, const accessor &rhs) = default;
12571279

1258-
bool is_placeholder() const { return !m_required; }
1280+
bool is_placeholder() const {
1281+
SIMSYCL_CHECK(m_required != nullptr);
1282+
return !*m_required;
1283+
}
12591284

12601285
size_t get_size() const noexcept { return sizeof(DataT); }
12611286

12621287
size_t get_count() const noexcept { return 1; }
12631288

12641289
operator reference() const {
12651290
SIMSYCL_CHECK(m_buffer != nullptr);
1291+
SIMSYCL_CHECK(m_required != nullptr);
12661292
SIMSYCL_CHECK(*m_required);
12671293
return *m_buffer->data;
12681294
}
12691295

12701296
global_ptr<DataT> get_pointer() const noexcept {
12711297
SIMSYCL_CHECK(m_buffer != nullptr);
1298+
SIMSYCL_CHECK(m_required != nullptr);
12721299
SIMSYCL_CHECK(*m_required);
12731300
return m_buffer->data;
12741301
}
@@ -1287,6 +1314,7 @@ class accessor<DataT, 0, AccessMode, target::constant_buffer, IsPlaceholder> fin
12871314
void require() {
12881315
SIMSYCL_CHECK(m_buffer != nullptr);
12891316
SIMSYCL_CHECK(m_guard != nullptr);
1317+
SIMSYCL_CHECK(m_required != nullptr);
12901318
m_guard->check_access_from_command_group({0, 1, AccessMode});
12911319
*m_required = true;
12921320
}

0 commit comments

Comments
 (0)