@@ -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
227271private:
0 commit comments