Changeset 234980 in webkit
- Timestamp:
- Aug 17, 2018 6:04:17 AM (6 years ago)
- Location:
- trunk/Source/WTF
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WTF/ChangeLog
r234968 r234980 1 2018-08-17 David Kilzer <ddkilzer@apple.com> 2 3 WTF's internal std::optional implementation should release assert on all bad accesses 4 <https://webkit.org/b/187669> 5 6 Reviewed by Ryosuke Niwa. 7 8 * wtf/Assertions.h: 9 (RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT): Add macro definitions. 10 * wtf/Optional.h: 11 (std::optional::operator -> const): 12 (std::optional::operator ->): 13 (std::optional::operator * const): 14 (std::optional::operator *): 15 (std::optional::value const): 16 (std::optional::value): 17 (std::optional<T::operator-> const): 18 (std::optional<T::operator* const): 19 (std::optional<T::value const): 20 - Change ASSERT_UNDER_CONSTEXPR_CONTEXT() macros to 21 RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT() macros. 22 1 23 2018-08-16 Andy Estes <aestes@apple.com> 2 24 -
trunk/Source/WTF/wtf/Assertions.h
r234344 r234980 518 518 #define RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(assertion) RELEASE_ASSERT(assertion) 519 519 #define RELEASE_ASSERT_NOT_REACHED(...) CRASH_WITH_INFO(__VA_ARGS__) 520 #define RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(assertion) do { \ 521 if (UNLIKELY(!(assertion))) { \ 522 CRASH_UNDER_CONSTEXPR_CONTEXT(); \ 523 } \ 524 } while (0) 520 525 #else 521 526 #define RELEASE_ASSERT(assertion, ...) ASSERT(assertion, __VA_ARGS__) … … 523 528 #define RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(assertion) ASSERT_WITH_SECURITY_IMPLICATION(assertion) 524 529 #define RELEASE_ASSERT_NOT_REACHED() ASSERT_NOT_REACHED() 530 #define RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(assertion) ASSERT_UNDER_CONSTEXPR_CONTEXT(assertion) 525 531 #endif 526 532 -
trunk/Source/WTF/wtf/Optional.h
r233912 r234980 517 517 518 518 constexpr T const* operator ->() const { 519 ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());519 RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized()); 520 520 return dataptr(); 521 521 } 522 522 523 523 OPTIONAL_MUTABLE_CONSTEXPR T* operator ->() { 524 ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());524 RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized()); 525 525 return dataptr(); 526 526 } 527 527 528 528 constexpr T const& operator *() const& { 529 ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());529 RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized()); 530 530 return contained_val(); 531 531 } 532 532 533 533 OPTIONAL_MUTABLE_CONSTEXPR T& operator *() & { 534 ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());534 RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized()); 535 535 return contained_val(); 536 536 } 537 537 538 538 OPTIONAL_MUTABLE_CONSTEXPR T&& operator *() && { 539 ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());539 RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized()); 540 540 return detail_::constexpr_move(contained_val()); 541 541 } 542 542 543 543 constexpr T const& value() const& { 544 ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());544 RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized()); 545 545 return contained_val(); 546 546 } 547 547 548 548 OPTIONAL_MUTABLE_CONSTEXPR T& value() & { 549 ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());549 RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized()); 550 550 return contained_val(); 551 551 } 552 552 553 553 OPTIONAL_MUTABLE_CONSTEXPR T&& value() && { 554 ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());554 RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized()); 555 555 return std::move(contained_val()); 556 556 } … … 662 662 // 20.5.5.3, observers 663 663 constexpr T* operator->() const { 664 ASSERT_UNDER_CONSTEXPR_CONTEXT(ref);664 RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(ref); 665 665 return ref; 666 666 } 667 667 668 668 constexpr T& operator*() const { 669 ASSERT_UNDER_CONSTEXPR_CONTEXT(ref);669 RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(ref); 670 670 return *ref; 671 671 } 672 672 673 673 constexpr T& value() const { 674 ASSERT_UNDER_CONSTEXPR_CONTEXT(ref());674 RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(ref()); 675 675 return *ref; 676 676 }
Note: See TracChangeset
for help on using the changeset viewer.