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