Skip to content
This repository was archived by the owner on Mar 22, 2023. It is now read-only.

Commit fd22c3e

Browse files
committed
[atomic_self_relative_ptr] Add try-catch to filfill noexcept requirement
1 parent 5ddd0ea commit fd22c3e

File tree

1 file changed

+60
-16
lines changed

1 file changed

+60
-16
lines changed

include/libpmemobj++/experimental/atomic_self_relative_ptr.hpp

Lines changed: 60 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,14 @@ struct atomic<pmem::obj::experimental::self_relative_ptr<T>> {
8585

8686
bool result = accessor::get_offset(ptr).compare_exchange_weak(
8787
expected_offset, desired_offset, success, failure);
88-
if (!result)
89-
expected = accessor::offset_to_pointer<T>(
90-
expected_offset, ptr);
88+
if (!result) {
89+
try {
90+
expected = accessor::offset_to_pointer<T>(
91+
expected_offset, ptr);
92+
} catch (...) {
93+
std::terminate();
94+
}
95+
}
9196
return result;
9297
}
9398

@@ -103,9 +108,14 @@ struct atomic<pmem::obj::experimental::self_relative_ptr<T>> {
103108

104109
bool result = accessor::get_offset(ptr).compare_exchange_weak(
105110
expected_offset, desired_offset, order);
106-
if (!result)
107-
expected = accessor::offset_to_pointer<T>(
108-
expected_offset, ptr);
111+
if (!result) {
112+
try {
113+
expected = accessor::offset_to_pointer<T>(
114+
expected_offset, ptr);
115+
} catch (...) {
116+
std::terminate();
117+
}
118+
}
109119
return result;
110120
}
111121

@@ -121,9 +131,14 @@ struct atomic<pmem::obj::experimental::self_relative_ptr<T>> {
121131

122132
bool result = accessor::get_offset(ptr).compare_exchange_strong(
123133
expected_offset, desired_offset, success, failure);
124-
if (!result)
125-
expected = accessor::offset_to_pointer<T>(
126-
expected_offset, ptr);
134+
if (!result) {
135+
try {
136+
expected = accessor::offset_to_pointer<T>(
137+
expected_offset, ptr);
138+
} catch (...) {
139+
std::terminate();
140+
}
141+
}
127142
return result;
128143
}
129144

@@ -139,9 +154,14 @@ struct atomic<pmem::obj::experimental::self_relative_ptr<T>> {
139154

140155
bool result = accessor::get_offset(ptr).compare_exchange_strong(
141156
expected_offset, desired_offset, order);
142-
if (!result)
143-
expected = accessor::offset_to_pointer<T>(
144-
expected_offset, ptr);
157+
if (!result) {
158+
try {
159+
expected = accessor::offset_to_pointer<T>(
160+
expected_offset, ptr);
161+
} catch (...) {
162+
std::terminate();
163+
}
164+
}
145165
return result;
146166
}
147167

@@ -191,7 +211,13 @@ struct atomic<pmem::obj::experimental::self_relative_ptr<T>> {
191211
value_type
192212
operator++() noexcept
193213
{
194-
return this->fetch_add(1) + 1;
214+
try {
215+
return this->fetch_add(1) + 1;
216+
} catch (...) {
217+
/* This should never happen during normal program
218+
* execution */
219+
std::terminate();
220+
}
195221
}
196222

197223
value_type
@@ -203,7 +229,13 @@ struct atomic<pmem::obj::experimental::self_relative_ptr<T>> {
203229
value_type
204230
operator--() noexcept
205231
{
206-
return this->fetch_sub(1) - 1;
232+
try {
233+
return this->fetch_sub(1) - 1;
234+
} catch (...) {
235+
/* This should never happen during normal program
236+
* execution */
237+
std::terminate();
238+
}
207239
}
208240

209241
value_type
@@ -215,13 +247,25 @@ struct atomic<pmem::obj::experimental::self_relative_ptr<T>> {
215247
value_type
216248
operator+=(difference_type diff) noexcept
217249
{
218-
return this->fetch_add(diff) + diff;
250+
try {
251+
return this->fetch_add(diff) + diff;
252+
} catch (...) {
253+
/* This should never happen during normal program
254+
* execution */
255+
std::terminate();
256+
}
219257
}
220258

221259
value_type
222260
operator-=(difference_type diff) noexcept
223261
{
224-
return this->fetch_sub(diff) - diff;
262+
try {
263+
return this->fetch_sub(diff) - diff;
264+
} catch (...) {
265+
/* This should never happen during normal program
266+
* execution */
267+
std::terminate();
268+
}
225269
}
226270

227271
private:

0 commit comments

Comments
 (0)