[libcxx-commits] [libcxx] [libc++] Adds is_implemented function for new ftm generator. (PR #134538)

Mark de Wever via libcxx-commits libcxx-commits at lists.llvm.org
Tue Apr 8 10:40:06 PDT 2025


https://github.com/mordante updated https://github.com/llvm/llvm-project/pull/134538

>From 3736fdd4d9e4772daa4f78656b81d239d0735044 Mon Sep 17 00:00:00 2001
From: Mark de Wever <koraq at xs4all.nl>
Date: Sat, 5 Apr 2025 12:15:08 +0200
Subject: [PATCH 1/3] [NFC][libc++][test] Refactor new ftm generator tests.

This uses the python unit test framework instead of just asserts.
This improves the diagnostics when a test fails.
---
 .../feature_test_macro/ftm_metadata.sh.py     | 73 ++++++++------
 .../feature_test_macro/implemented_ftms.sh.py | 98 +++++++++---------
 .../feature_test_macro/standard_ftms.sh.py    | 99 ++++++++++---------
 .../feature_test_macro/std_dialects.sh.py     | 35 ++++---
 .../feature_test_macro/version_header.sh.py   | 28 ++++--
 .../version_header_implementation.sh.py       | 36 +++----
 6 files changed, 208 insertions(+), 161 deletions(-)

diff --git a/libcxx/test/libcxx/feature_test_macro/ftm_metadata.sh.py b/libcxx/test/libcxx/feature_test_macro/ftm_metadata.sh.py
index 4f23773f9a0a5..52696d8bc3605 100644
--- a/libcxx/test/libcxx/feature_test_macro/ftm_metadata.sh.py
+++ b/libcxx/test/libcxx/feature_test_macro/ftm_metadata.sh.py
@@ -9,39 +9,48 @@
 # RUN: %{python} %s %{libcxx-dir}/utils %{libcxx-dir}/test/libcxx/feature_test_macro/test_data.json
 
 import sys
+import unittest
 
-sys.path.append(sys.argv[1])
+UTILS = sys.argv[1]
+TEST_DATA = sys.argv[2]
+del sys.argv[1:3]
+
+sys.path.append(UTILS)
 from generate_feature_test_macro_components import FeatureTestMacros, Metadata
 
 
-def test(output, expected):
-    assert output == expected, f"expected\n{expected}\n\noutput\n{output}"
-
-
-ftm = FeatureTestMacros(sys.argv[2])
-
-test(
-    ftm.ftm_metadata,
-    {
-        "__cpp_lib_any": Metadata(
-            headers=["any"], test_suite_guard=None, libcxx_guard=None
-        ),
-        "__cpp_lib_barrier": Metadata(
-            headers=["barrier"],
-            test_suite_guard="!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)",
-            libcxx_guard="_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC",
-        ),
-        "__cpp_lib_format": Metadata(
-            headers=["format"], test_suite_guard=None, libcxx_guard=None
-        ),
-        "__cpp_lib_parallel_algorithm": Metadata(
-            headers=["algorithm", "numeric"], test_suite_guard=None, libcxx_guard=None
-        ),
-        "__cpp_lib_variant": Metadata(
-            headers=["variant"], test_suite_guard=None, libcxx_guard=None
-        ),
-        "__cpp_lib_missing_FTM_in_older_standard": Metadata(
-            headers=[], test_suite_guard=None, libcxx_guard=None
-        ),
-    },
-)
+class Test(unittest.TestCase):
+    def setUp(self):
+        self.ftm = FeatureTestMacros(TEST_DATA)
+        self.maxDiff = None  # This causes the diff to be printed when the test fails
+
+    def test_implementation(self):
+        expected = {
+            "__cpp_lib_any": Metadata(
+                headers=["any"], test_suite_guard=None, libcxx_guard=None
+            ),
+            "__cpp_lib_barrier": Metadata(
+                headers=["barrier"],
+                test_suite_guard="!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)",
+                libcxx_guard="_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC",
+            ),
+            "__cpp_lib_format": Metadata(
+                headers=["format"], test_suite_guard=None, libcxx_guard=None
+            ),
+            "__cpp_lib_parallel_algorithm": Metadata(
+                headers=["algorithm", "numeric"],
+                test_suite_guard=None,
+                libcxx_guard=None,
+            ),
+            "__cpp_lib_variant": Metadata(
+                headers=["variant"], test_suite_guard=None, libcxx_guard=None
+            ),
+            "__cpp_lib_missing_FTM_in_older_standard": Metadata(
+                headers=[], test_suite_guard=None, libcxx_guard=None
+            ),
+        }
+        self.assertEqual(self.ftm.ftm_metadata, expected)
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/libcxx/test/libcxx/feature_test_macro/implemented_ftms.sh.py b/libcxx/test/libcxx/feature_test_macro/implemented_ftms.sh.py
index 942cd4b608760..92e14757ddd49 100644
--- a/libcxx/test/libcxx/feature_test_macro/implemented_ftms.sh.py
+++ b/libcxx/test/libcxx/feature_test_macro/implemented_ftms.sh.py
@@ -9,51 +9,61 @@
 # RUN: %{python} %s %{libcxx-dir}/utils %{libcxx-dir}/test/libcxx/feature_test_macro/test_data.json
 
 import sys
+import unittest
 
-sys.path.append(sys.argv[1])
+UTILS = sys.argv[1]
+TEST_DATA = sys.argv[2]
+del sys.argv[1:3]
+
+sys.path.append(UTILS)
 from generate_feature_test_macro_components import FeatureTestMacros
 
 
-def test(output, expected):
-    assert output == expected, f"expected\n{expected}\n\noutput\n{output}"
-
-
-ftm = FeatureTestMacros(sys.argv[2])
-test(
-    ftm.implemented_ftms,
-    {
-        "__cpp_lib_any": {
-            "c++17": "201606L",
-            "c++20": "201606L",
-            "c++23": "201606L",
-            "c++26": "201606L",
-        },
-        "__cpp_lib_barrier": {
-            "c++20": "201907L",
-            "c++23": "201907L",
-            "c++26": "299900L",
-        },
-        "__cpp_lib_format": {
-            "c++20": None,
-            "c++23": None,
-            "c++26": None,
-        },
-        "__cpp_lib_parallel_algorithm": {
-            "c++17": "201603L",
-            "c++20": "201603L",
-            "c++23": "201603L",
-            "c++26": "201603L",
-        },
-        "__cpp_lib_variant": {
-            "c++17": "202102L",
-            "c++20": "202102L",
-            "c++23": "202102L",
-            "c++26": "202102L",
-        },
-        "__cpp_lib_missing_FTM_in_older_standard": {
-            "c++17": None,
-            "c++20": None,
-            "c++26": None,
-        },
-    },
-)
+class Test(unittest.TestCase):
+    def setUp(self):
+        self.ftm = FeatureTestMacros(TEST_DATA)
+        self.maxDiff = None  # This causes the diff to be printed when the test fails
+
+    def test_implementation(self):
+
+        expected = {
+            "__cpp_lib_any": {
+                "c++17": "201606L",
+                "c++20": "201606L",
+                "c++23": "201606L",
+                "c++26": "201606L",
+            },
+            "__cpp_lib_barrier": {
+                "c++20": "201907L",
+                "c++23": "201907L",
+                "c++26": "299900L",
+            },
+            "__cpp_lib_format": {
+                "c++20": None,
+                "c++23": None,
+                "c++26": None,
+            },
+            "__cpp_lib_parallel_algorithm": {
+                "c++17": "201603L",
+                "c++20": "201603L",
+                "c++23": "201603L",
+                "c++26": "201603L",
+            },
+            "__cpp_lib_variant": {
+                "c++17": "202102L",
+                "c++20": "202102L",
+                "c++23": "202102L",
+                "c++26": "202102L",
+            },
+            "__cpp_lib_missing_FTM_in_older_standard": {
+                "c++17": None,
+                "c++20": None,
+                "c++26": None,
+            },
+        }
+
+        self.assertEqual(self.ftm.implemented_ftms, expected)
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/libcxx/test/libcxx/feature_test_macro/standard_ftms.sh.py b/libcxx/test/libcxx/feature_test_macro/standard_ftms.sh.py
index 95c9b9baaf2fa..ac3e284261d03 100644
--- a/libcxx/test/libcxx/feature_test_macro/standard_ftms.sh.py
+++ b/libcxx/test/libcxx/feature_test_macro/standard_ftms.sh.py
@@ -9,52 +9,61 @@
 # RUN: %{python} %s %{libcxx-dir}/utils %{libcxx-dir}/test/libcxx/feature_test_macro/test_data.json
 
 import sys
+import unittest
 
-sys.path.append(sys.argv[1])
+UTILS = sys.argv[1]
+TEST_DATA = sys.argv[2]
+del sys.argv[1:3]
+
+sys.path.append(UTILS)
 from generate_feature_test_macro_components import FeatureTestMacros
 
 
-def test(output, expected):
-    assert output == expected, f"expected\n{expected}\n\noutput\n{output}"
-
-
-ftm = FeatureTestMacros(sys.argv[2])
-test(
-    ftm.standard_ftms,
-    {
-        "__cpp_lib_any": {
-            "c++17": "201606L",
-            "c++20": "201606L",
-            "c++23": "201606L",
-            "c++26": "201606L",
-        },
-        "__cpp_lib_barrier": {
-            "c++20": "201907L",
-            "c++23": "201907L",
-            "c++26": "299900L",
-        },
-        "__cpp_lib_format": {
-            "c++20": "202110L",
-            "c++23": "202207L",
-            "c++26": "202311L",
-        },
-        "__cpp_lib_parallel_algorithm": {
-            "c++17": "201603L",
-            "c++20": "201603L",
-            "c++23": "201603L",
-            "c++26": "201603L",
-        },
-        "__cpp_lib_variant": {
-            "c++17": "202102L",
-            "c++20": "202106L",
-            "c++23": "202106L",
-            "c++26": "202306L",
-        },
-        "__cpp_lib_missing_FTM_in_older_standard": {
-            "c++17": "2017L",
-            "c++20": "2020L",
-            "c++23": "2020L",
-            "c++26": "2026L",
-        },
-    },
-)
+class Test(unittest.TestCase):
+    def setUp(self):
+        self.ftm = FeatureTestMacros(TEST_DATA)
+        self.maxDiff = None  # This causes the diff to be printed when the test fails
+
+    def test_implementation(self):
+        expected = {
+            "__cpp_lib_any": {
+                "c++17": "201606L",
+                "c++20": "201606L",
+                "c++23": "201606L",
+                "c++26": "201606L",
+            },
+            "__cpp_lib_barrier": {
+                "c++20": "201907L",
+                "c++23": "201907L",
+                "c++26": "299900L",
+            },
+            "__cpp_lib_format": {
+                "c++20": "202110L",
+                "c++23": "202207L",
+                "c++26": "202311L",
+            },
+            "__cpp_lib_parallel_algorithm": {
+                "c++17": "201603L",
+                "c++20": "201603L",
+                "c++23": "201603L",
+                "c++26": "201603L",
+            },
+            "__cpp_lib_variant": {
+                "c++17": "202102L",
+                "c++20": "202106L",
+                "c++23": "202106L",
+                "c++26": "202306L",
+            },
+            "__cpp_lib_missing_FTM_in_older_standard": {
+                "c++17": "2017L",
+                "c++20": "2020L",
+                "c++23": "2020L",
+                "c++26": "2026L",
+            },
+        }
+
+        self.assertEqual(self.ftm.standard_ftms, expected)
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/libcxx/test/libcxx/feature_test_macro/std_dialects.sh.py b/libcxx/test/libcxx/feature_test_macro/std_dialects.sh.py
index 368020c91e1d2..e3cca860f9ce6 100644
--- a/libcxx/test/libcxx/feature_test_macro/std_dialects.sh.py
+++ b/libcxx/test/libcxx/feature_test_macro/std_dialects.sh.py
@@ -9,22 +9,31 @@
 # RUN: %{python} %s %{libcxx-dir}/utils %{libcxx-dir}/test/libcxx/feature_test_macro/test_data.json
 
 import sys
+import unittest
 
-sys.path.append(sys.argv[1])
+UTILS = sys.argv[1]
+TEST_DATA = sys.argv[2]
+del sys.argv[1:3]
+
+sys.path.append(UTILS)
 from generate_feature_test_macro_components import FeatureTestMacros
 
 
-def test(output, expected):
-    assert output == expected, f"expected\n{expected}\n\noutput\n{output}"
+class Test(unittest.TestCase):
+    def setUp(self):
+        self.ftm = FeatureTestMacros(TEST_DATA)
+        self.maxDiff = None  # This causes the diff to be printed when the test fails
+
+    def test_implementation(self):
+        expected = [
+            "c++17",
+            "c++20",
+            "c++23",
+            "c++26",
+        ]
+
+        self.assertEqual(self.ftm.std_dialects, expected)
 
 
-ftm = FeatureTestMacros(sys.argv[2])
-test(
-    ftm.std_dialects,
-    [
-        "c++17",
-        "c++20",
-        "c++23",
-        "c++26",
-    ],
-)
+if __name__ == "__main__":
+    unittest.main()
diff --git a/libcxx/test/libcxx/feature_test_macro/version_header.sh.py b/libcxx/test/libcxx/feature_test_macro/version_header.sh.py
index 1e53d5fd92830..e3053c18a5211 100644
--- a/libcxx/test/libcxx/feature_test_macro/version_header.sh.py
+++ b/libcxx/test/libcxx/feature_test_macro/version_header.sh.py
@@ -9,19 +9,23 @@
 # RUN: %{python} %s %{libcxx-dir}/utils %{libcxx-dir}/test/libcxx/feature_test_macro/test_data.json
 
 import sys
+import unittest
 
-sys.path.append(sys.argv[1])
-from generate_feature_test_macro_components import FeatureTestMacros
+UTILS = sys.argv[1]
+TEST_DATA = sys.argv[2]
+del sys.argv[1:3]
 
+sys.path.append(UTILS)
+from generate_feature_test_macro_components import FeatureTestMacros
 
-def test(output, expected):
-    assert output == expected, f"expected\n{expected}\n\noutput\n{output}"
 
+class Test(unittest.TestCase):
+    def setUp(self):
+        self.ftm = FeatureTestMacros(TEST_DATA)
+        self.maxDiff = None  # This causes the diff to be printed when the test fails
 
-ftm = FeatureTestMacros(sys.argv[2])
-test(
-    ftm.version_header,
-    """// -*- C++ -*-
+    def test_implementeation(self):
+        expected = """// -*- C++ -*-
 //===----------------------------------------------------------------------===//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
@@ -70,5 +74,9 @@ def test(output, expected):
 #endif // _LIBCPP_STD_VER >= 26
 
 #endif // _LIBCPP_VERSIONH
-""",
-)
+"""
+        self.assertEqual(self.ftm.version_header, expected)
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/libcxx/test/libcxx/feature_test_macro/version_header_implementation.sh.py b/libcxx/test/libcxx/feature_test_macro/version_header_implementation.sh.py
index 2771a2f7d8abf..2ab6a9be7339b 100644
--- a/libcxx/test/libcxx/feature_test_macro/version_header_implementation.sh.py
+++ b/libcxx/test/libcxx/feature_test_macro/version_header_implementation.sh.py
@@ -18,10 +18,11 @@
 sys.path.append(UTILS)
 from generate_feature_test_macro_components import FeatureTestMacros, VersionHeader
 
+
 class Test(unittest.TestCase):
     def setUp(self):
         self.ftm = FeatureTestMacros(TEST_DATA)
-        self.maxDiff = None # This causes the diff to be printed when the test fails
+        self.maxDiff = None  # This causes the diff to be printed when the test fails
 
     def test_implementation(self):
         expected = {
@@ -51,11 +52,11 @@ def test_implementation(self):
                     ),
                 },
                 {
-                    "__cpp_lib_missing_FTM_in_older_standard" : VersionHeader(
-                        value = "2017L",
-                        implemented = False,
-                        need_undef = False,
-                        condition = None,
+                    "__cpp_lib_missing_FTM_in_older_standard": VersionHeader(
+                        value="2017L",
+                        implemented=False,
+                        need_undef=False,
+                        condition=None,
                     ),
                 },
             ],
@@ -85,11 +86,11 @@ def test_implementation(self):
                     ),
                 },
                 {
-                    "__cpp_lib_missing_FTM_in_older_standard" : VersionHeader(
-                        value = "2020L",
-                        implemented = False,
-                        need_undef = False,
-                        condition = None,
+                    "__cpp_lib_missing_FTM_in_older_standard": VersionHeader(
+                        value="2020L",
+                        implemented=False,
+                        need_undef=False,
+                        condition=None,
                     ),
                 },
             ],
@@ -129,11 +130,11 @@ def test_implementation(self):
                     ),
                 },
                 {
-                    "__cpp_lib_missing_FTM_in_older_standard" : VersionHeader(
-                        value = "2026L",
-                        implemented = False,
-                        need_undef = False,
-                        condition = None,
+                    "__cpp_lib_missing_FTM_in_older_standard": VersionHeader(
+                        value="2026L",
+                        implemented=False,
+                        need_undef=False,
+                        condition=None,
                     ),
                 },
             ],
@@ -141,5 +142,6 @@ def test_implementation(self):
 
         self.assertEqual(self.ftm.version_header_implementation, expected)
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     unittest.main()

>From 72954e170f2c91c10d4dd4702db981a7b8c756fc Mon Sep 17 00:00:00 2001
From: Mark de Wever <koraq at xs4all.nl>
Date: Sat, 5 Apr 2025 12:15:09 +0200
Subject: [PATCH 2/3] [libc++] Adds is_implemented function for new ftm
 generator.

At the moment the ftm macro for __cpp_lib_to_chars will have the
following values:

standard_ftms: {
    "c++17": "201611L",
    "c++20": "201611L",
    "c++23": "201611L",
    "c++26": "201611L",
}

implemented_ftms: {
    "c++17": None,
}

This is an issue with the test whether the FTM is implemented it does:
  self.implemented_ftms[ftm][std] == self.standard_ftms[ftm][std]
This will fail in C++20 since implemented_ftms[ftm] does not have the
key c++20. This adds a new helper function and removes the None entries
when a FTM is not implemented.
---
 .../feature_test_macro/implemented_ftms.sh.py | 12 +-----
 .../feature_test_macro/is_implemented.sh.py   | 39 +++++++++++++++++++
 .../generate_feature_test_macro_components.py | 19 ++++++++-
 3 files changed, 58 insertions(+), 12 deletions(-)
 create mode 100644 libcxx/test/libcxx/feature_test_macro/is_implemented.sh.py

diff --git a/libcxx/test/libcxx/feature_test_macro/implemented_ftms.sh.py b/libcxx/test/libcxx/feature_test_macro/implemented_ftms.sh.py
index 92e14757ddd49..4f445d55c883c 100644
--- a/libcxx/test/libcxx/feature_test_macro/implemented_ftms.sh.py
+++ b/libcxx/test/libcxx/feature_test_macro/implemented_ftms.sh.py
@@ -38,11 +38,7 @@ def test_implementation(self):
                 "c++23": "201907L",
                 "c++26": "299900L",
             },
-            "__cpp_lib_format": {
-                "c++20": None,
-                "c++23": None,
-                "c++26": None,
-            },
+            "__cpp_lib_format": {},
             "__cpp_lib_parallel_algorithm": {
                 "c++17": "201603L",
                 "c++20": "201603L",
@@ -55,11 +51,7 @@ def test_implementation(self):
                 "c++23": "202102L",
                 "c++26": "202102L",
             },
-            "__cpp_lib_missing_FTM_in_older_standard": {
-                "c++17": None,
-                "c++20": None,
-                "c++26": None,
-            },
+            "__cpp_lib_missing_FTM_in_older_standard": {},
         }
 
         self.assertEqual(self.ftm.implemented_ftms, expected)
diff --git a/libcxx/test/libcxx/feature_test_macro/is_implemented.sh.py b/libcxx/test/libcxx/feature_test_macro/is_implemented.sh.py
new file mode 100644
index 0000000000000..0414722b89a76
--- /dev/null
+++ b/libcxx/test/libcxx/feature_test_macro/is_implemented.sh.py
@@ -0,0 +1,39 @@
+# ===----------------------------------------------------------------------===##
+#
+# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+# See https://llvm.org/LICENSE.txt for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+#
+# ===----------------------------------------------------------------------===##
+
+# RUN: %{python} %s %{libcxx-dir}/utils %{libcxx-dir}/test/libcxx/feature_test_macro/test_data.json
+
+import sys
+import unittest
+
+UTILS = sys.argv[1]
+TEST_DATA = sys.argv[2]
+del sys.argv[1:3]
+
+sys.path.append(UTILS)
+from generate_feature_test_macro_components import FeatureTestMacros, Metadata
+
+
+class Test(unittest.TestCase):
+    def setUp(self):
+        self.ftm = FeatureTestMacros(TEST_DATA)
+        self.maxDiff = None  # This causes the diff to be printed when the test fails
+
+    def test_implementation(self):
+        # FTM not available in C++14.
+        self.assertEqual(self.ftm.is_implemented("__cpp_lib_any", "c++14"), False)
+        self.assertEqual(self.ftm.is_implemented("__cpp_lib_any", "c++17"), True)
+
+        self.assertEqual(self.ftm.is_implemented("__cpp_lib_format", "c++20"), False)
+
+        # FTM C++20 202106L, libc++ has 202102L
+        self.assertEqual(self.ftm.is_implemented("__cpp_lib_variant", "c++20"), False)
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/libcxx/utils/generate_feature_test_macro_components.py b/libcxx/utils/generate_feature_test_macro_components.py
index 53252d5e2d673..ecf31f5af7fb2 100755
--- a/libcxx/utils/generate_feature_test_macro_components.py
+++ b/libcxx/utils/generate_feature_test_macro_components.py
@@ -2012,7 +2012,8 @@ def get_ftms(
                         else:
                             break
 
-                entry[std] = last
+                if last:
+                    entry[std] = last
         result[feature["name"]] = entry
 
     return result
@@ -2208,6 +2209,20 @@ def implemented_ftms(self) -> Dict[Ftm, Dict[Std, Optional[Value]]]:
 
         return get_ftms(self.__data, self.std_dialects, True)
 
+    def is_implemented(self, ftm: Ftm, std: Std) -> bool:
+        """Has the FTM `ftm` been implemented in the dialect `std`?"""
+
+        # When a paper for C++20 has not been implemented in libc++, then there will be no
+        # FTM entry in implemented_ftms for C++23 and later.
+        #
+        # Typically standard_ftms is not used with invalid values in the code, but
+        # guard just in case.
+        if not std in self.implemented_ftms[ftm].keys() or not std in self.standard_ftms[ftm].keys():
+            return False
+
+        return self.implemented_ftms[ftm][std] == self.standard_ftms[ftm][std]
+
+
     @functools.cached_property
     def ftm_metadata(self) -> Dict[Ftm, Metadata]:
         """Returns the metadata of the FTMs defined in the Standard.
@@ -2241,7 +2256,7 @@ def version_header_implementation(self) -> Dict[Std, Dict[Ftm, VersionHeader]]:
                     continue
                 last_value = value
 
-                implemented = self.implemented_ftms[ftm][std] == self.standard_ftms[ftm][std]
+                implemented = self.is_implemented(ftm, std)
                 entry = VersionHeader(
                     value,
                     implemented,

>From 14c5af3d814e39b9a811f19595430ebcb61f8328 Mon Sep 17 00:00:00 2001
From: Mark de Wever <koraq at xs4all.nl>
Date: Tue, 8 Apr 2025 19:39:57 +0200
Subject: [PATCH 3/3] Update
 libcxx/utils/generate_feature_test_macro_components.py

Co-authored-by: Louis Dionne <ldionne.2 at gmail.com>
---
 libcxx/utils/generate_feature_test_macro_components.py | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/libcxx/utils/generate_feature_test_macro_components.py b/libcxx/utils/generate_feature_test_macro_components.py
index ecf31f5af7fb2..4c09f4750aefb 100755
--- a/libcxx/utils/generate_feature_test_macro_components.py
+++ b/libcxx/utils/generate_feature_test_macro_components.py
@@ -2213,10 +2213,8 @@ def is_implemented(self, ftm: Ftm, std: Std) -> bool:
         """Has the FTM `ftm` been implemented in the dialect `std`?"""
 
         # When a paper for C++20 has not been implemented in libc++, then there will be no
-        # FTM entry in implemented_ftms for C++23 and later.
-        #
-        # Typically standard_ftms is not used with invalid values in the code, but
-        # guard just in case.
+        # FTM entry in implemented_ftms for C++23 and later. Similarly, a paper like <format>
+        # has no entry in standard_ftms for e.g. C++11.
         if not std in self.implemented_ftms[ftm].keys() or not std in self.standard_ftms[ftm].keys():
             return False
 



More information about the libcxx-commits mailing list