Author: Mark de Wever Date: 2022-09-14T08:14:43+02:00 New Revision: c51a59d8a9470bb06edc9305135c59c19de96011
URL: https://github.com/llvm/llvm-project/commit/c51a59d8a9470bb06edc9305135c59c19de96011 DIFF: https://github.com/llvm/llvm-project/commit/c51a59d8a9470bb06edc9305135c59c19de96011.diff LOG: [libc++][format] Updates feature-test macros. During the discussion on the SG-10 mailinglist regarding the format feature-test macros voted in during the last plenary it turns out libc++ can't mark the format feature-test macro as implemented. According to https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations#__cpp_lib_format the not yet implemented paper P1361R2 Integration of chrono with text formatting affects the feature test macro. Note that P1361R2 doesn't mention the feature-test macro nor is there an LWG-issue to address the issue. The reporter of the issue didn't recall where this requirement exactly has been decided. Reviewed By: ldionne, #libc Differential Revision: https://reviews.llvm.org/D133271 Added: Modified: libcxx/docs/FeatureTestMacroTable.rst libcxx/include/version libcxx/test/std/language.support/support.limits/support.limits.general/format.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp libcxx/utils/generate_feature_test_macro_components.py Removed: ################################################################################ diff --git a/libcxx/docs/FeatureTestMacroTable.rst b/libcxx/docs/FeatureTestMacroTable.rst index e5a06dcced65a..b1bf86942e690 100644 --- a/libcxx/docs/FeatureTestMacroTable.rst +++ b/libcxx/docs/FeatureTestMacroTable.rst @@ -234,7 +234,7 @@ Status ------------------------------------------------- ----------------- ``__cpp_lib_execution`` *unimplemented* ------------------------------------------------- ----------------- - ``__cpp_lib_format`` ``202106L`` + ``__cpp_lib_format`` *unimplemented* ------------------------------------------------- ----------------- ``__cpp_lib_generic_unordered_lookup`` ``201811L`` ------------------------------------------------- ----------------- diff --git a/libcxx/include/version b/libcxx/include/version index 8ffb1747eb276..d0c6fe466e70b 100644 --- a/libcxx/include/version +++ b/libcxx/include/version @@ -332,7 +332,7 @@ __cpp_lib_void_t 201411L <type_traits> # undef __cpp_lib_execution // # define __cpp_lib_execution 201902L # if !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT) -# define __cpp_lib_format 202106L +// # define __cpp_lib_format 202106L # endif # define __cpp_lib_generic_unordered_lookup 201811L # define __cpp_lib_int_pow2 202002L diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/format.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/format.version.compile.pass.cpp index dd995cd87e834..7e183311bceca 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/format.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/format.version.compile.pass.cpp @@ -44,31 +44,31 @@ #elif TEST_STD_VER == 20 -# if !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT) +# if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_format # error "__cpp_lib_format should be defined in c++20" # endif # if __cpp_lib_format != 202106L # error "__cpp_lib_format should have the value 202106L in c++20" # endif -# else +# else // _LIBCPP_VERSION # ifdef __cpp_lib_format -# error "__cpp_lib_format should not be defined when !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT) is not defined!" +# error "__cpp_lib_format should not be defined because it is unimplemented in libc++!" # endif # endif #elif TEST_STD_VER > 20 -# if !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT) +# if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_format # error "__cpp_lib_format should be defined in c++2b" # endif # if __cpp_lib_format != 202106L # error "__cpp_lib_format should have the value 202106L in c++2b" # endif -# else +# else // _LIBCPP_VERSION # ifdef __cpp_lib_format -# error "__cpp_lib_format should not be defined when !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT) is not defined!" +# error "__cpp_lib_format should not be defined because it is unimplemented in libc++!" # endif # endif diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp index d9a340e52ef9a..cd2c0814016ee 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp @@ -2817,16 +2817,16 @@ # endif # endif -# if !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT) +# if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_format # error "__cpp_lib_format should be defined in c++20" # endif # if __cpp_lib_format != 202106L # error "__cpp_lib_format should have the value 202106L in c++20" # endif -# else +# else // _LIBCPP_VERSION # ifdef __cpp_lib_format -# error "__cpp_lib_format should not be defined when !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT) is not defined!" +# error "__cpp_lib_format should not be defined because it is unimplemented in libc++!" # endif # endif @@ -4054,16 +4054,16 @@ # endif # endif -# if !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT) +# if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_format # error "__cpp_lib_format should be defined in c++2b" # endif # if __cpp_lib_format != 202106L # error "__cpp_lib_format should have the value 202106L in c++2b" # endif -# else +# else // _LIBCPP_VERSION # ifdef __cpp_lib_format -# error "__cpp_lib_format should not be defined when !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT) is not defined!" +# error "__cpp_lib_format should not be defined because it is unimplemented in libc++!" # endif # endif diff --git a/libcxx/utils/generate_feature_test_macro_components.py b/libcxx/utils/generate_feature_test_macro_components.py index b6078c002f446..788cc5be1a526 100755 --- a/libcxx/utils/generate_feature_test_macro_components.py +++ b/libcxx/utils/generate_feature_test_macro_components.py @@ -309,15 +309,17 @@ def add_version_header(tc): "libcxx_guard": "!defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_filesystem)" }, { "name": "__cpp_lib_format", - # P2508, P2286, and P2419 were accepted in the same plenary and modify this - # feature-test macro. We expect to see an LWG issue soon. For now keep the - # value as is. - # TODO FMT Set P2508's feature-test macro. - #"values": { "c++20": 202106, "c++23": 202207" }, - "values": { "c++20": 202106 }, + "values": { + # "c++20": 201907 Not implemented P1361R2 Integration of chrono with text formatting + # "c++20": 202106 Fully implemented + # "c++20": 202110 Not implemented P2372R3 Fixing locale handling in chrono formatters + "c++20": 202106, + # "c++23": 202207, Not implemented P2419R2 Clarify handling of encodings in localized formatting of chrono types + }, "headers": ["format"], "test_suite_guard": "!defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)", "libcxx_guard": "!defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)", + "unimplemented": True, }, { "name": "__cpp_lib_gcd_lcm", "values": { "c++17": 201606 }, _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits