[libcxx-commits] [libcxx] cb347a1 - [libc++] Remove assertion in year_month_day_last::day()

Louis Dionne via libcxx-commits libcxx-commits at lists.llvm.org
Tue Jun 9 07:46:28 PDT 2020


Author: Louis Dionne
Date: 2020-06-09T10:46:13-04:00
New Revision: cb347a1106a76e248a6c0d78451a018b20662c03

URL: https://github.com/llvm/llvm-project/commit/cb347a1106a76e248a6c0d78451a018b20662c03
DIFF: https://github.com/llvm/llvm-project/commit/cb347a1106a76e248a6c0d78451a018b20662c03.diff

LOG: [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

Added: 
    

Modified: 
    libcxx/include/chrono
    libcxx/test/libcxx/algorithms/debug_less.pass.cpp
    libcxx/test/std/utilities/time/time.cal/time.cal.operators/year_month_day_last.pass.cpp

Removed: 
    


################################################################################
diff  --git a/libcxx/include/chrono b/libcxx/include/chrono
index 9913dc1d06c9..6e5de398b72f 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 <ctime>
 #include <type_traits>
 #include <ratio>
@@ -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<unsigned>(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 8a38a8053d42..6dd56955001d 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 <chrono> // 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 af99b4ecb387..7648999b7cbd 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;
 }


        


More information about the libcxx-commits mailing list