[libcxx-commits] [PATCH] D133490: [libc++] Fix compilation error on platforms that don't implement std::tm

Louis Dionne via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Thu Sep 8 07:00:22 PDT 2022


ldionne created this revision.
Herald added a project: All.
ldionne requested review of this revision.
Herald added a project: libc++.
Herald added a subscriber: libcxx-commits.
Herald added a reviewer: libc++.

Instead of mentioning tm directly in the definition of __convert_to_tm,
take it as a template argument. As a fly-by also fix incorrect Lit feature
(should have been no-localization instead of libcpp-has-no-localization).


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D133490

Files:
  libcxx/include/__chrono/convert_to_tm.h
  libcxx/include/__chrono/formatter.h
  libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.nonmembers/ostream.pass.cpp
  libcxx/test/std/time/time.syn/formatter.day.pass.cpp


Index: libcxx/test/std/time/time.syn/formatter.day.pass.cpp
===================================================================
--- libcxx/test/std/time/time.syn/formatter.day.pass.cpp
+++ libcxx/test/std/time/time.syn/formatter.day.pass.cpp
@@ -6,7 +6,7 @@
 //===----------------------------------------------------------------------===//
 
 // UNSUPPORTED: c++03, c++11, c++14, c++17
-// UNSUPPORTED: libcpp-has-no-localization
+// UNSUPPORTED: no-localization
 // UNSUPPORTED: libcpp-has-no-incomplete-format
 
 // TODO FMT Investigate Windows issues.
Index: libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.nonmembers/ostream.pass.cpp
===================================================================
--- libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.nonmembers/ostream.pass.cpp
+++ libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.nonmembers/ostream.pass.cpp
@@ -7,7 +7,7 @@
 //===----------------------------------------------------------------------===//
 
 // UNSUPPORTED: c++03, c++11, c++14, c++17
-// UNSUPPORTED: libcpp-has-no-localization
+// UNSUPPORTED: no-localization
 // UNSUPPORTED: libcpp-has-no-incomplete-format
 
 // TODO FMT Investigate Windows issues.
Index: libcxx/include/__chrono/formatter.h
===================================================================
--- libcxx/include/__chrono/formatter.h
+++ libcxx/include/__chrono/formatter.h
@@ -55,7 +55,7 @@
 template <class _CharT, class _Tp>
 _LIBCPP_HIDE_FROM_ABI void __format_chrono_using_chrono_specs(
     const _Tp& __value, basic_stringstream<_CharT>& __sstr, basic_string_view<_CharT> __chrono_specs) {
-  tm __t              = std::__convert_to_tm(__value);
+  tm __t              = std::__convert_to_tm<tm>(__value);
   const auto& __facet = std::use_facet<time_put<_CharT>>(__sstr.getloc());
   for (auto __it = __chrono_specs.begin(); __it != __chrono_specs.end(); ++__it) {
     if (*__it == _CharT('%')) {
Index: libcxx/include/__chrono/convert_to_tm.h
===================================================================
--- libcxx/include/__chrono/convert_to_tm.h
+++ libcxx/include/__chrono/convert_to_tm.h
@@ -11,7 +11,6 @@
 #define _LIBCPP___CHRONO_CONVERT_TO_TM_H
 
 #include <__chrono/day.h>
-#include <__concepts/same_as.h>
 #include <__config>
 #include <ctime>
 
@@ -23,18 +22,14 @@
 
 #if _LIBCPP_STD_VER > 17
 
-template <class _Tp>
-_LIBCPP_HIDE_FROM_ABI tm __convert_to_tm(const _Tp& __value) {
-  tm __result = {};
+// Convert chrono::days to the given tm type, which must have the same properties as std::tm.
+template <class _Tm>
+_LIBCPP_HIDE_FROM_ABI _Tm __convert_to_tm(const chrono::day& __value) {
+  _Tm __result = {};
 #  ifdef __GLIBC__
   __result.tm_zone = "UTC";
 #  endif
-
-  if constexpr (same_as<_Tp, chrono::day>)
-    __result.tm_mday = static_cast<unsigned>(__value);
-  else
-    static_assert(sizeof(_Tp) == 0, "Add the missing type specialization");
-
+  __result.tm_mday = static_cast<unsigned>(__value);
   return __result;
 }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D133490.458725.patch
Type: text/x-patch
Size: 2988 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20220908/8f178362/attachment.bin>


More information about the libcxx-commits mailing list