Title: [234980] trunk/Source/WTF
Revision
234980
Author
[email protected]
Date
2018-08-17 06:04:17 -0700 (Fri, 17 Aug 2018)

Log 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.

Modified Paths

Diff

Modified: trunk/Source/WTF/ChangeLog (234979 => 234980)


--- trunk/Source/WTF/ChangeLog	2018-08-17 09:59:40 UTC (rev 234979)
+++ trunk/Source/WTF/ChangeLog	2018-08-17 13:04:17 UTC (rev 234980)
@@ -1,3 +1,25 @@
+2018-08-17  David Kilzer  <[email protected]>
+
+        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.
+
 2018-08-16  Andy Estes  <[email protected]>
 
         [watchOS] Upstream Proximity Networking (nee Wi-Fi Assertions)

Modified: trunk/Source/WTF/wtf/Assertions.h (234979 => 234980)


--- trunk/Source/WTF/wtf/Assertions.h	2018-08-17 09:59:40 UTC (rev 234979)
+++ trunk/Source/WTF/wtf/Assertions.h	2018-08-17 13:04:17 UTC (rev 234980)
@@ -517,11 +517,17 @@
 #define RELEASE_ASSERT_WITH_MESSAGE(assertion, ...) RELEASE_ASSERT(assertion)
 #define RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(assertion) RELEASE_ASSERT(assertion)
 #define RELEASE_ASSERT_NOT_REACHED(...) CRASH_WITH_INFO(__VA_ARGS__)
+#define RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(assertion) do { \
+    if (UNLIKELY(!(assertion))) { \
+        CRASH_UNDER_CONSTEXPR_CONTEXT(); \
+    } \
+} while (0)
 #else
 #define RELEASE_ASSERT(assertion, ...) ASSERT(assertion, __VA_ARGS__)
 #define RELEASE_ASSERT_WITH_MESSAGE(assertion, ...) ASSERT_WITH_MESSAGE(assertion, __VA_ARGS__)
 #define RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(assertion) ASSERT_WITH_SECURITY_IMPLICATION(assertion)
 #define RELEASE_ASSERT_NOT_REACHED() ASSERT_NOT_REACHED()
+#define RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(assertion) ASSERT_UNDER_CONSTEXPR_CONTEXT(assertion)
 #endif
 
 #ifdef __cplusplus

Modified: trunk/Source/WTF/wtf/Optional.h (234979 => 234980)


--- trunk/Source/WTF/wtf/Optional.h	2018-08-17 09:59:40 UTC (rev 234979)
+++ trunk/Source/WTF/wtf/Optional.h	2018-08-17 13:04:17 UTC (rev 234980)
@@ -516,42 +516,42 @@
   constexpr bool has_value() const __NOEXCEPT { return initialized(); }
 
   constexpr T const* operator ->() const {
-    ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
+    RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
     return dataptr();
   }
 
   OPTIONAL_MUTABLE_CONSTEXPR T* operator ->() {
-    ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
+    RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
     return dataptr();
   }
 
   constexpr T const& operator *() const& {
-    ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
+    RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
     return contained_val();
   }
 
   OPTIONAL_MUTABLE_CONSTEXPR T& operator *() & {
-    ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
+    RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
     return contained_val();
   }
 
   OPTIONAL_MUTABLE_CONSTEXPR T&& operator *() && {
-    ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
+    RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
     return detail_::constexpr_move(contained_val());
   }
 
   constexpr T const& value() const& {
-    ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
+    RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
     return contained_val();
   }
 
   OPTIONAL_MUTABLE_CONSTEXPR T& value() & {
-    ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
+    RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
     return contained_val();
   }
 
   OPTIONAL_MUTABLE_CONSTEXPR T&& value() && {
-    ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
+    RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(initialized());
     return std::move(contained_val());
   }
 
@@ -661,17 +661,17 @@
 
   // 20.5.5.3, observers
   constexpr T* operator->() const {
-    ASSERT_UNDER_CONSTEXPR_CONTEXT(ref);
+    RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(ref);
     return ref;
   }
 
   constexpr T& operator*() const {
-    ASSERT_UNDER_CONSTEXPR_CONTEXT(ref);
+    RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(ref);
     return *ref;
   }
 
   constexpr T& value() const {
-    ASSERT_UNDER_CONSTEXPR_CONTEXT(ref());
+    RELEASE_ASSERT_UNDER_CONSTEXPR_CONTEXT(ref());
     return *ref;
   }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to