Changeset 234980 in webkit


Ignore:
Timestamp:
Aug 17, 2018 6:04:17 AM (6 years ago)
Author:
ddkilzer@apple.com
Message:

WTF's internal std::optional implementation should release assert on all bad accesses
<https://webkit.org/b/187669>

Reviewed by Ryosuke Niwa.

  • wtf/Assertions.h:

(RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT): Add macro definitions.

  • wtf/Optional.h:

(std::optional::operator -> const):
(std::optional::operator ->):
(std::optional::operator * const):
(std::optional::operator *):
(std::optional::value const):
(std::optional::value):
(std::optional<T::operator-> const):
(std::optional<T::operator* const):
(std::optional<T::value const):

  • Change ASSERT_UNDER_CONSTEXPR_CONTEXT() macros to RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT() macros.
Location:
trunk/Source/WTF
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r234968 r234980  
     12018-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
    1232018-08-16  Andy Estes  <aestes@apple.com>
    224
  • trunk/Source/WTF/wtf/Assertions.h

    r234344 r234980  
    518518#define RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(assertion) RELEASE_ASSERT(assertion)
    519519#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)
    520525#else
    521526#define RELEASE_ASSERT(assertion, ...) ASSERT(assertion, __VA_ARGS__)
     
    523528#define RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(assertion) ASSERT_WITH_SECURITY_IMPLICATION(assertion)
    524529#define RELEASE_ASSERT_NOT_REACHED() ASSERT_NOT_REACHED()
     530#define RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(assertion) ASSERT_UNDER_CONSTEXPR_CONTEXT(assertion)
    525531#endif
    526532
  • trunk/Source/WTF/wtf/Optional.h

    r233912 r234980  
    517517
    518518  constexpr T const* operator ->() const {
    519     ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
     519    RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
    520520    return dataptr();
    521521  }
    522522
    523523  OPTIONAL_MUTABLE_CONSTEXPR T* operator ->() {
    524     ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
     524    RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
    525525    return dataptr();
    526526  }
    527527
    528528  constexpr T const& operator *() const& {
    529     ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
     529    RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
    530530    return contained_val();
    531531  }
    532532
    533533  OPTIONAL_MUTABLE_CONSTEXPR T& operator *() & {
    534     ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
     534    RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
    535535    return contained_val();
    536536  }
    537537
    538538  OPTIONAL_MUTABLE_CONSTEXPR T&& operator *() && {
    539     ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
     539    RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
    540540    return detail_::constexpr_move(contained_val());
    541541  }
    542542
    543543  constexpr T const& value() const& {
    544     ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
     544    RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
    545545    return contained_val();
    546546  }
    547547
    548548  OPTIONAL_MUTABLE_CONSTEXPR T& value() & {
    549     ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
     549    RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
    550550    return contained_val();
    551551  }
    552552
    553553  OPTIONAL_MUTABLE_CONSTEXPR T&& value() && {
    554     ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
     554    RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
    555555    return std::move(contained_val());
    556556  }
     
    662662  // 20.5.5.3, observers
    663663  constexpr T* operator->() const {
    664     ASSERT_UNDER_CONSTEXPR_CONTEXT(ref);
     664    RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(ref);
    665665    return ref;
    666666  }
    667667
    668668  constexpr T& operator*() const {
    669     ASSERT_UNDER_CONSTEXPR_CONTEXT(ref);
     669    RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(ref);
    670670    return *ref;
    671671  }
    672672
    673673  constexpr T& value() const {
    674     ASSERT_UNDER_CONSTEXPR_CONTEXT(ref());
     674    RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(ref());
    675675    return *ref;
    676676  }
Note: See TracChangeset for help on using the changeset viewer.