From cb347a1106a76e248a6c0d78451a018b20662c03 Mon Sep 17 00:00:00 2001 From: Louis Dionne Date: Tue, 9 Jun 2020 10:35:41 -0400 Subject: [PATCH] [libc++] Remove assertion in year_month_day_last::day() This reverts commit 0c148430cf61, which added an assertion in day(). The Standard doesn't allow day() to crash -- instead it says that the result is unspecified. Differential Revision: https://reviews.llvm.org/D70346 --- libcxx/include/chrono | 2 -- libcxx/test/libcxx/algorithms/debug_less.pass.cpp | 5 ----- .../time.cal/time.cal.operators/year_month_day_last.pass.cpp | 11 ++++++++++- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/libcxx/include/chrono b/libcxx/include/chrono index 9913dc1..6e5de39 100644 --- a/libcxx/include/chrono +++ b/libcxx/include/chrono @@ -824,7 +824,6 @@ constexpr chrono::year operator ""y(unsigned lo */ #include <__config> -#include <__debug> #include #include #include @@ -2455,7 +2454,6 @@ chrono::day year_month_day_last::day() const noexcept chrono::day(31), chrono::day(31), chrono::day(30), chrono::day(31), chrono::day(30), chrono::day(31) }; - _LIBCPP_ASSERT(ok(), "year_month_day_last::day(): year_month_day_last is invalid"); return month() != February || !__y.is_leap() ? __d[static_cast(month()) - 1] : chrono::day{29}; } diff --git a/libcxx/test/libcxx/algorithms/debug_less.pass.cpp b/libcxx/test/libcxx/algorithms/debug_less.pass.cpp index 8a38a80..6dd5695 100644 --- a/libcxx/test/libcxx/algorithms/debug_less.pass.cpp +++ b/libcxx/test/libcxx/algorithms/debug_less.pass.cpp @@ -14,13 +14,8 @@ // __debug_less checks that a comparator actually provides a strict-weak ordering. -#include // Include before defining _LIBCPP_ASSERT: cannot throw in a function marked noexcept. - struct DebugException {}; -#ifdef _LIBCPP_ASSERT -#undef _LIBCPP_ASSERT -#endif #define _LIBCPP_DEBUG 0 #define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : throw ::DebugException()) diff --git a/libcxx/test/std/utilities/time/time.cal/time.cal.operators/year_month_day_last.pass.cpp b/libcxx/test/std/utilities/time/time.cal/time.cal.operators/year_month_day_last.pass.cpp index af99b4e..7648999 100644 --- a/libcxx/test/std/utilities/time/time.cal/time.cal.operators/year_month_day_last.pass.cpp +++ b/libcxx/test/std/utilities/time/time.cal/time.cal.operators/year_month_day_last.pass.cpp @@ -40,6 +40,7 @@ int main(int, char**) { + using day = std::chrono::day; using month = std::chrono::month; using year_month = std::chrono::year_month; using year = std::chrono::year; @@ -122,5 +123,13 @@ int main(int, char**) } } - return 0; + // the result of year_month_day_last::day() is unspecified when !ok(), + // but it shouldn't crash. + { + year_month_day_last ymdl = year{2020}/month{13}/last; + assert(!ymdl.ok()); + day d = ymdl.day(); (void)d; // doesn't crash + } + + return 0; } -- 2.7.4