[libcxx-commits] [libcxx] [llvm] [libc++] Stop using awk in transitive includes test (PR #110554)

Louis Dionne via libcxx-commits libcxx-commits at lists.llvm.org
Mon Sep 30 13:42:47 PDT 2024


https://github.com/ldionne updated https://github.com/llvm/llvm-project/pull/110554

>From 78d67e13a83c3a0e899c9a318fe3b8dff647c018 Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Mon, 30 Sep 2024 14:51:11 -0400
Subject: [PATCH 1/9] [libc++] Stop using awk in transitive includes test

For some reason, that doesn't work as expected on Github-hosted
runners and in Docker-in-Docker setups.
---
 libcxx/test/libcxx/transitive_includes.gen.py |  9 ++---
 .../libcxx/transitive_includes/expected.py    | 35 +++++++++++++++++++
 .../to_csv.py}                                |  0
 3 files changed, 38 insertions(+), 6 deletions(-)
 create mode 100755 libcxx/test/libcxx/transitive_includes/expected.py
 rename libcxx/test/libcxx/{transitive_includes_to_csv.py => transitive_includes/to_csv.py} (100%)

diff --git a/libcxx/test/libcxx/transitive_includes.gen.py b/libcxx/test/libcxx/transitive_includes.gen.py
index 22075364bf1b79..f9a868128c6c83 100644
--- a/libcxx/test/libcxx/transitive_includes.gen.py
+++ b/libcxx/test/libcxx/transitive_includes.gen.py
@@ -55,7 +55,7 @@
 
     print(
         f"""\
-// RUN: %{{python}} %{{libcxx-dir}}/test/libcxx/transitive_includes_to_csv.py {' '.join(all_traces)} > %{{libcxx-dir}}/test/libcxx/transitive_includes/%{{cxx_std}}.csv
+// RUN: %{{python}} %{{libcxx-dir}}/test/libcxx/transitive_includes/to_csv.py {' '.join(all_traces)} > %{{libcxx-dir}}/test/libcxx/transitive_includes/%{{cxx_std}}.csv
 """
     )
 
@@ -64,9 +64,6 @@
         if header.endswith(".h"):  # Skip C compatibility or detail headers
             continue
 
-        # Escape slashes for the awk command below
-        escaped_header = header.replace("/", "\\/")
-
         print(
             f"""\
 //--- {header}.sh.cpp
@@ -92,8 +89,8 @@
 
 // RUN: mkdir %t
 // RUN: %{{cxx}} %s %{{flags}} %{{compile_flags}} --trace-includes -fshow-skipped-includes --preprocess > /dev/null 2> %t/trace-includes.txt
-// RUN: %{{python}} %{{libcxx-dir}}/test/libcxx/transitive_includes_to_csv.py %t/trace-includes.txt > %t/actual_transitive_includes.csv
-// RUN: cat %{{libcxx-dir}}/test/libcxx/transitive_includes/%{{cxx_std}}.csv | awk '/^{escaped_header} / {{ print }}' > %t/expected_transitive_includes.csv
+// RUN: %{{python}} %{{libcxx-dir}}/test/libcxx/transitive_includes/to_csv.py %t/trace-includes.txt > %t/actual_transitive_includes.csv
+// RUN: %{{python}} %{{libcxx-dir}}/test/libcxx/transitive_includes/expected.py %{{cxx_std}} "{header}" > %t/expected_transitive_includes.csv
 // RUN: diff -w %t/expected_transitive_includes.csv %t/actual_transitive_includes.csv
 #include <{header}>
 """
diff --git a/libcxx/test/libcxx/transitive_includes/expected.py b/libcxx/test/libcxx/transitive_includes/expected.py
new file mode 100755
index 00000000000000..b2519f36b3974b
--- /dev/null
+++ b/libcxx/test/libcxx/transitive_includes/expected.py
@@ -0,0 +1,35 @@
+#!/usr/bin/env python
+# ===----------------------------------------------------------------------===##
+#
+# 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
+#
+# ===----------------------------------------------------------------------===##
+
+import argparse
+import os
+
+
+if __name__ == "__main__":
+    parser = argparse.ArgumentParser(
+        description="""Extract the list of expected transitive includes for the given Standard and header.""",
+    )
+    parser.add_argument(
+        "standard",
+        default=None,
+        choices=["cxx03", "cxx11", "cxx14", "cxx20", "cxx23", "cxx26"],
+    )
+    parser.add_argument(
+        "header",
+        default=None,
+        help="The header to extract the expected transitive includes for."
+    )
+    args = parser.parse_args()
+
+    CSV_ROOT = os.path.dirname(__file__)
+    filename = os.path.join(CSV_ROOT, f"{args.standard}.csv")
+    with open(filename, 'r') as f:
+        for line in f.readlines():
+            if line.startswith(args.header + ' '):
+                print(line, end='') # lines already end in newline
diff --git a/libcxx/test/libcxx/transitive_includes_to_csv.py b/libcxx/test/libcxx/transitive_includes/to_csv.py
similarity index 100%
rename from libcxx/test/libcxx/transitive_includes_to_csv.py
rename to libcxx/test/libcxx/transitive_includes/to_csv.py

>From 27370baf43d66b436ede791dcf7d55dc19a0633b Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Mon, 30 Sep 2024 14:57:28 -0400
Subject: [PATCH 2/9] TMP: Try running job on Github-hosted runner to surface
 the issue

---
 .github/workflows/libcxx-build-and-test.yaml | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/libcxx-build-and-test.yaml b/.github/workflows/libcxx-build-and-test.yaml
index b5e60781e00064..831db85ca8e5c2 100644
--- a/.github/workflows/libcxx-build-and-test.yaml
+++ b/.github/workflows/libcxx-build-and-test.yaml
@@ -49,7 +49,9 @@ env:
 jobs:
   stage1:
     if: github.repository_owner == 'llvm'
-    runs-on: libcxx-runners-8-set
+    runs-on: ubuntu-latest
+    container:
+      image: ghcr.io/libcxx/actions-builder:fozzie-live
     continue-on-error: false
     strategy:
       fail-fast: false

>From 34c46fc7b1ecfdfa324dd33e1db707196576b65d Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Mon, 30 Sep 2024 15:23:20 -0400
Subject: [PATCH 3/9] Shot in the dark: is the problem that we're reading the
 expcted file concurrently?

---
 .github/workflows/libcxx-build-and-test.yaml  |    6 -
 .../libcxx/transitive_includes/expected.py    | 2661 ++++++++++++++++-
 libcxx/utils/ci/run-buildbot                  |    1 +
 3 files changed, 2656 insertions(+), 12 deletions(-)

diff --git a/.github/workflows/libcxx-build-and-test.yaml b/.github/workflows/libcxx-build-and-test.yaml
index 831db85ca8e5c2..d82298f8505f8b 100644
--- a/.github/workflows/libcxx-build-and-test.yaml
+++ b/.github/workflows/libcxx-build-and-test.yaml
@@ -58,15 +58,9 @@ jobs:
       matrix:
         config: [
           'generic-cxx03',
-          'generic-cxx26',
-          'generic-modules'
         ]
         cc: [  'clang-19' ]
         cxx: [ 'clang++-19' ]
-        include:
-          - config: 'generic-gcc'
-            cc: 'gcc-14'
-            cxx: 'g++-14'
     steps:
       - uses: actions/checkout at v4
       - name: ${{ matrix.config }}.${{ matrix.cxx }}
diff --git a/libcxx/test/libcxx/transitive_includes/expected.py b/libcxx/test/libcxx/transitive_includes/expected.py
index b2519f36b3974b..126be27e97577f 100755
--- a/libcxx/test/libcxx/transitive_includes/expected.py
+++ b/libcxx/test/libcxx/transitive_includes/expected.py
@@ -10,6 +10,2651 @@
 import argparse
 import os
 
+files = {
+    'cxx03':
+"""
+algorithm atomic
+algorithm bit
+algorithm cctype
+algorithm climits
+algorithm cmath
+algorithm compare
+algorithm concepts
+algorithm cstddef
+algorithm cstdint
+algorithm cstdlib
+algorithm cstring
+algorithm ctime
+algorithm cwchar
+algorithm cwctype
+algorithm exception
+algorithm initializer_list
+algorithm iosfwd
+algorithm iterator
+algorithm limits
+algorithm memory
+algorithm new
+algorithm optional
+algorithm ratio
+algorithm stdexcept
+algorithm tuple
+algorithm type_traits
+algorithm typeinfo
+algorithm utility
+algorithm variant
+algorithm version
+any algorithm
+any array
+any atomic
+any bit
+any cctype
+any cerrno
+any chrono
+any climits
+any clocale
+any cmath
+any compare
+any concepts
+any cstdarg
+any cstddef
+any cstdint
+any cstdio
+any cstdlib
+any cstring
+any ctime
+any cwchar
+any cwctype
+any exception
+any forward_list
+any functional
+any initializer_list
+any ios
+any iosfwd
+any iterator
+any limits
+any locale
+any memory
+any mutex
+any new
+any optional
+any ratio
+any stdexcept
+any streambuf
+any string
+any string_view
+any system_error
+any tuple
+any type_traits
+any typeinfo
+any unordered_map
+any utility
+any variant
+any vector
+any version
+array algorithm
+array atomic
+array bit
+array cctype
+array climits
+array cmath
+array compare
+array concepts
+array cstddef
+array cstdint
+array cstdlib
+array cstring
+array ctime
+array cwchar
+array cwctype
+array exception
+array initializer_list
+array iosfwd
+array iterator
+array limits
+array memory
+array new
+array optional
+array ratio
+array stdexcept
+array tuple
+array type_traits
+array typeinfo
+array utility
+array variant
+array version
+atomic climits
+atomic cmath
+atomic compare
+atomic cstddef
+atomic cstdint
+atomic cstdlib
+atomic cstring
+atomic ctime
+atomic limits
+atomic ratio
+atomic type_traits
+atomic version
+barrier atomic
+barrier climits
+barrier cmath
+barrier compare
+barrier concepts
+barrier cstddef
+barrier cstdint
+barrier cstdlib
+barrier cstring
+barrier ctime
+barrier exception
+barrier initializer_list
+barrier iosfwd
+barrier iterator
+barrier limits
+barrier memory
+barrier new
+barrier ratio
+barrier stdexcept
+barrier tuple
+barrier type_traits
+barrier typeinfo
+barrier utility
+barrier variant
+barrier version
+bit cstdint
+bit cstdlib
+bit iosfwd
+bit limits
+bit type_traits
+bit version
+bitset algorithm
+bitset atomic
+bitset bit
+bitset cctype
+bitset climits
+bitset cmath
+bitset compare
+bitset concepts
+bitset cstddef
+bitset cstdint
+bitset cstdio
+bitset cstdlib
+bitset cstring
+bitset ctime
+bitset cwchar
+bitset cwctype
+bitset exception
+bitset initializer_list
+bitset iosfwd
+bitset iterator
+bitset limits
+bitset memory
+bitset new
+bitset optional
+bitset ratio
+bitset stdexcept
+bitset string
+bitset string_view
+bitset tuple
+bitset type_traits
+bitset typeinfo
+bitset utility
+bitset variant
+bitset version
+ccomplex algorithm
+ccomplex array
+ccomplex atomic
+ccomplex bit
+ccomplex bitset
+ccomplex cctype
+ccomplex cerrno
+ccomplex climits
+ccomplex clocale
+ccomplex cmath
+ccomplex compare
+ccomplex complex
+ccomplex concepts
+ccomplex cstdarg
+ccomplex cstddef
+ccomplex cstdint
+ccomplex cstdio
+ccomplex cstdlib
+ccomplex cstring
+ccomplex ctime
+ccomplex cwchar
+ccomplex cwctype
+ccomplex deque
+ccomplex exception
+ccomplex format
+ccomplex functional
+ccomplex initializer_list
+ccomplex ios
+ccomplex iosfwd
+ccomplex istream
+ccomplex iterator
+ccomplex limits
+ccomplex locale
+ccomplex memory
+ccomplex mutex
+ccomplex new
+ccomplex optional
+ccomplex ostream
+ccomplex print
+ccomplex queue
+ccomplex ratio
+ccomplex sstream
+ccomplex stack
+ccomplex stdexcept
+ccomplex streambuf
+ccomplex string
+ccomplex string_view
+ccomplex system_error
+ccomplex tuple
+ccomplex type_traits
+ccomplex typeinfo
+ccomplex unordered_map
+ccomplex utility
+ccomplex variant
+ccomplex vector
+ccomplex version
+charconv cerrno
+charconv cmath
+charconv concepts
+charconv cstddef
+charconv cstdint
+charconv cstdlib
+charconv cstring
+charconv initializer_list
+charconv iosfwd
+charconv limits
+charconv new
+charconv type_traits
+charconv version
+chrono algorithm
+chrono array
+chrono atomic
+chrono bit
+chrono cctype
+chrono cerrno
+chrono climits
+chrono clocale
+chrono cmath
+chrono compare
+chrono concepts
+chrono cstdarg
+chrono cstddef
+chrono cstdint
+chrono cstdio
+chrono cstdlib
+chrono cstring
+chrono ctime
+chrono cwchar
+chrono cwctype
+chrono exception
+chrono forward_list
+chrono functional
+chrono initializer_list
+chrono ios
+chrono iosfwd
+chrono iterator
+chrono limits
+chrono locale
+chrono memory
+chrono mutex
+chrono new
+chrono optional
+chrono ratio
+chrono stdexcept
+chrono streambuf
+chrono string
+chrono string_view
+chrono system_error
+chrono tuple
+chrono type_traits
+chrono typeinfo
+chrono unordered_map
+chrono utility
+chrono variant
+chrono vector
+chrono version
+cinttypes cstdint
+cmath cstdint
+cmath limits
+cmath type_traits
+cmath version
+codecvt algorithm
+codecvt atomic
+codecvt bit
+codecvt cctype
+codecvt cerrno
+codecvt climits
+codecvt clocale
+codecvt cmath
+codecvt compare
+codecvt concepts
+codecvt cstddef
+codecvt cstdint
+codecvt cstdio
+codecvt cstdlib
+codecvt cstring
+codecvt ctime
+codecvt cwchar
+codecvt cwctype
+codecvt exception
+codecvt initializer_list
+codecvt iosfwd
+codecvt iterator
+codecvt limits
+codecvt memory
+codecvt mutex
+codecvt new
+codecvt optional
+codecvt ratio
+codecvt stdexcept
+codecvt string
+codecvt string_view
+codecvt system_error
+codecvt tuple
+codecvt type_traits
+codecvt typeinfo
+codecvt utility
+codecvt variant
+codecvt version
+compare cmath
+compare cstddef
+compare cstdint
+compare limits
+compare type_traits
+compare version
+complex algorithm
+complex array
+complex atomic
+complex bit
+complex bitset
+complex cctype
+complex cerrno
+complex climits
+complex clocale
+complex cmath
+complex compare
+complex concepts
+complex cstdarg
+complex cstddef
+complex cstdint
+complex cstdio
+complex cstdlib
+complex cstring
+complex ctime
+complex cwchar
+complex cwctype
+complex deque
+complex exception
+complex format
+complex functional
+complex initializer_list
+complex ios
+complex iosfwd
+complex istream
+complex iterator
+complex limits
+complex locale
+complex memory
+complex mutex
+complex new
+complex optional
+complex ostream
+complex print
+complex queue
+complex ratio
+complex sstream
+complex stack
+complex stdexcept
+complex streambuf
+complex string
+complex string_view
+complex system_error
+complex tuple
+complex type_traits
+complex typeinfo
+complex unordered_map
+complex utility
+complex variant
+complex vector
+complex version
+concepts cstddef
+concepts cstdint
+concepts type_traits
+concepts version
+condition_variable algorithm
+condition_variable atomic
+condition_variable bit
+condition_variable cctype
+condition_variable cerrno
+condition_variable climits
+condition_variable cmath
+condition_variable compare
+condition_variable concepts
+condition_variable cstddef
+condition_variable cstdint
+condition_variable cstdio
+condition_variable cstdlib
+condition_variable cstring
+condition_variable ctime
+condition_variable cwchar
+condition_variable cwctype
+condition_variable exception
+condition_variable initializer_list
+condition_variable iosfwd
+condition_variable iterator
+condition_variable limits
+condition_variable memory
+condition_variable new
+condition_variable optional
+condition_variable ratio
+condition_variable stdexcept
+condition_variable string
+condition_variable string_view
+condition_variable system_error
+condition_variable tuple
+condition_variable type_traits
+condition_variable typeinfo
+condition_variable utility
+condition_variable variant
+condition_variable version
+coroutine cmath
+coroutine compare
+coroutine cstddef
+coroutine cstdint
+coroutine iosfwd
+coroutine limits
+coroutine type_traits
+coroutine version
+cstddef version
+ctgmath algorithm
+ctgmath array
+ctgmath atomic
+ctgmath bit
+ctgmath bitset
+ctgmath ccomplex
+ctgmath cctype
+ctgmath cerrno
+ctgmath climits
+ctgmath clocale
+ctgmath cmath
+ctgmath compare
+ctgmath complex
+ctgmath concepts
+ctgmath cstdarg
+ctgmath cstddef
+ctgmath cstdint
+ctgmath cstdio
+ctgmath cstdlib
+ctgmath cstring
+ctgmath ctime
+ctgmath cwchar
+ctgmath cwctype
+ctgmath deque
+ctgmath exception
+ctgmath format
+ctgmath functional
+ctgmath initializer_list
+ctgmath ios
+ctgmath iosfwd
+ctgmath istream
+ctgmath iterator
+ctgmath limits
+ctgmath locale
+ctgmath memory
+ctgmath mutex
+ctgmath new
+ctgmath optional
+ctgmath ostream
+ctgmath print
+ctgmath queue
+ctgmath ratio
+ctgmath sstream
+ctgmath stack
+ctgmath stdexcept
+ctgmath streambuf
+ctgmath string
+ctgmath string_view
+ctgmath system_error
+ctgmath tuple
+ctgmath type_traits
+ctgmath typeinfo
+ctgmath unordered_map
+ctgmath utility
+ctgmath variant
+ctgmath vector
+ctgmath version
+cwchar cctype
+cwchar cstddef
+cwchar cwctype
+cwchar version
+cwctype cctype
+deque algorithm
+deque array
+deque atomic
+deque bit
+deque cctype
+deque cerrno
+deque climits
+deque clocale
+deque cmath
+deque compare
+deque concepts
+deque cstdarg
+deque cstddef
+deque cstdint
+deque cstdio
+deque cstdlib
+deque cstring
+deque ctime
+deque cwchar
+deque cwctype
+deque exception
+deque functional
+deque initializer_list
+deque ios
+deque iosfwd
+deque iterator
+deque limits
+deque locale
+deque memory
+deque mutex
+deque new
+deque optional
+deque ratio
+deque stdexcept
+deque streambuf
+deque string
+deque string_view
+deque system_error
+deque tuple
+deque type_traits
+deque typeinfo
+deque unordered_map
+deque utility
+deque variant
+deque vector
+deque version
+exception cstddef
+exception cstdint
+exception cstdlib
+exception new
+exception type_traits
+exception typeinfo
+exception version
+execution cstddef
+execution version
+expected cstddef
+expected cstdint
+expected cstdlib
+expected initializer_list
+expected new
+expected type_traits
+expected version
+experimental/iterator algorithm
+experimental/iterator atomic
+experimental/iterator bit
+experimental/iterator bitset
+experimental/iterator cctype
+experimental/iterator cerrno
+experimental/iterator climits
+experimental/iterator clocale
+experimental/iterator cmath
+experimental/iterator compare
+experimental/iterator concepts
+experimental/iterator cstdarg
+experimental/iterator cstddef
+experimental/iterator cstdint
+experimental/iterator cstdio
+experimental/iterator cstdlib
+experimental/iterator cstring
+experimental/iterator ctime
+experimental/iterator cwchar
+experimental/iterator cwctype
+experimental/iterator exception
+experimental/iterator initializer_list
+experimental/iterator ios
+experimental/iterator iosfwd
+experimental/iterator iterator
+experimental/iterator limits
+experimental/iterator locale
+experimental/iterator memory
+experimental/iterator mutex
+experimental/iterator new
+experimental/iterator optional
+experimental/iterator ratio
+experimental/iterator stdexcept
+experimental/iterator streambuf
+experimental/iterator string
+experimental/iterator string_view
+experimental/iterator system_error
+experimental/iterator tuple
+experimental/iterator type_traits
+experimental/iterator typeinfo
+experimental/iterator utility
+experimental/iterator variant
+experimental/iterator version
+experimental/memory cstddef
+experimental/memory cstdint
+experimental/memory cstring
+experimental/memory limits
+experimental/memory type_traits
+experimental/memory version
+experimental/propagate_const cstddef
+experimental/propagate_const cstdint
+experimental/propagate_const type_traits
+experimental/propagate_const version
+experimental/simd cstddef
+experimental/simd cstdint
+experimental/simd limits
+experimental/simd type_traits
+experimental/simd version
+experimental/utility cmath
+experimental/utility compare
+experimental/utility cstddef
+experimental/utility cstdint
+experimental/utility cstdlib
+experimental/utility initializer_list
+experimental/utility iosfwd
+experimental/utility limits
+experimental/utility type_traits
+experimental/utility utility
+experimental/utility version
+filesystem algorithm
+filesystem atomic
+filesystem bit
+filesystem cctype
+filesystem cerrno
+filesystem climits
+filesystem cmath
+filesystem compare
+filesystem concepts
+filesystem cstddef
+filesystem cstdint
+filesystem cstdio
+filesystem cstdlib
+filesystem cstring
+filesystem ctime
+filesystem cwchar
+filesystem cwctype
+filesystem exception
+filesystem initializer_list
+filesystem iosfwd
+filesystem iterator
+filesystem limits
+filesystem memory
+filesystem new
+filesystem optional
+filesystem ratio
+filesystem stdexcept
+filesystem string
+filesystem string_view
+filesystem system_error
+filesystem tuple
+filesystem type_traits
+filesystem typeinfo
+filesystem utility
+filesystem variant
+filesystem version
+format algorithm
+format array
+format atomic
+format bit
+format cctype
+format cerrno
+format climits
+format clocale
+format cmath
+format compare
+format concepts
+format cstdarg
+format cstddef
+format cstdint
+format cstdio
+format cstdlib
+format cstring
+format ctime
+format cwchar
+format cwctype
+format deque
+format exception
+format functional
+format initializer_list
+format ios
+format iosfwd
+format iterator
+format limits
+format locale
+format memory
+format mutex
+format new
+format optional
+format queue
+format ratio
+format stack
+format stdexcept
+format streambuf
+format string
+format string_view
+format system_error
+format tuple
+format type_traits
+format typeinfo
+format unordered_map
+format utility
+format variant
+format vector
+format version
+forward_list algorithm
+forward_list array
+forward_list atomic
+forward_list bit
+forward_list cctype
+forward_list cerrno
+forward_list climits
+forward_list clocale
+forward_list cmath
+forward_list compare
+forward_list concepts
+forward_list cstdarg
+forward_list cstddef
+forward_list cstdint
+forward_list cstdio
+forward_list cstdlib
+forward_list cstring
+forward_list ctime
+forward_list cwchar
+forward_list cwctype
+forward_list exception
+forward_list functional
+forward_list initializer_list
+forward_list ios
+forward_list iosfwd
+forward_list iterator
+forward_list limits
+forward_list locale
+forward_list memory
+forward_list mutex
+forward_list new
+forward_list optional
+forward_list ratio
+forward_list stdexcept
+forward_list streambuf
+forward_list string
+forward_list string_view
+forward_list system_error
+forward_list tuple
+forward_list type_traits
+forward_list typeinfo
+forward_list unordered_map
+forward_list utility
+forward_list variant
+forward_list vector
+forward_list version
+fstream algorithm
+fstream array
+fstream atomic
+fstream bit
+fstream bitset
+fstream cctype
+fstream cerrno
+fstream climits
+fstream clocale
+fstream cmath
+fstream compare
+fstream concepts
+fstream cstdarg
+fstream cstddef
+fstream cstdint
+fstream cstdio
+fstream cstdlib
+fstream cstring
+fstream ctime
+fstream cwchar
+fstream cwctype
+fstream deque
+fstream exception
+fstream filesystem
+fstream format
+fstream functional
+fstream initializer_list
+fstream iomanip
+fstream ios
+fstream iosfwd
+fstream istream
+fstream iterator
+fstream limits
+fstream locale
+fstream memory
+fstream mutex
+fstream new
+fstream optional
+fstream ostream
+fstream print
+fstream queue
+fstream ratio
+fstream stack
+fstream stdexcept
+fstream streambuf
+fstream string
+fstream string_view
+fstream system_error
+fstream tuple
+fstream type_traits
+fstream typeinfo
+fstream unordered_map
+fstream utility
+fstream variant
+fstream vector
+fstream version
+functional algorithm
+functional array
+functional atomic
+functional bit
+functional cctype
+functional cerrno
+functional climits
+functional clocale
+functional cmath
+functional compare
+functional concepts
+functional cstdarg
+functional cstddef
+functional cstdint
+functional cstdio
+functional cstdlib
+functional cstring
+functional ctime
+functional cwchar
+functional cwctype
+functional exception
+functional initializer_list
+functional ios
+functional iosfwd
+functional iterator
+functional limits
+functional locale
+functional memory
+functional mutex
+functional new
+functional optional
+functional ratio
+functional stdexcept
+functional streambuf
+functional string
+functional string_view
+functional system_error
+functional tuple
+functional type_traits
+functional typeinfo
+functional unordered_map
+functional utility
+functional variant
+functional vector
+functional version
+future algorithm
+future array
+future atomic
+future bit
+future bitset
+future cctype
+future cerrno
+future chrono
+future climits
+future clocale
+future cmath
+future compare
+future concepts
+future cstdarg
+future cstddef
+future cstdint
+future cstdio
+future cstdlib
+future cstring
+future ctime
+future cwchar
+future cwctype
+future deque
+future exception
+future format
+future forward_list
+future functional
+future initializer_list
+future ios
+future iosfwd
+future istream
+future iterator
+future limits
+future locale
+future memory
+future mutex
+future new
+future optional
+future ostream
+future print
+future queue
+future ratio
+future sstream
+future stack
+future stdexcept
+future streambuf
+future string
+future string_view
+future system_error
+future thread
+future tuple
+future type_traits
+future typeinfo
+future unordered_map
+future utility
+future variant
+future vector
+future version
+initializer_list cstddef
+initializer_list version
+iomanip algorithm
+iomanip array
+iomanip atomic
+iomanip bit
+iomanip bitset
+iomanip cctype
+iomanip cerrno
+iomanip climits
+iomanip clocale
+iomanip cmath
+iomanip compare
+iomanip concepts
+iomanip cstdarg
+iomanip cstddef
+iomanip cstdint
+iomanip cstdio
+iomanip cstdlib
+iomanip cstring
+iomanip ctime
+iomanip cwchar
+iomanip cwctype
+iomanip deque
+iomanip exception
+iomanip format
+iomanip functional
+iomanip initializer_list
+iomanip ios
+iomanip iosfwd
+iomanip istream
+iomanip iterator
+iomanip limits
+iomanip locale
+iomanip memory
+iomanip mutex
+iomanip new
+iomanip optional
+iomanip ostream
+iomanip print
+iomanip queue
+iomanip ratio
+iomanip stack
+iomanip stdexcept
+iomanip streambuf
+iomanip string
+iomanip string_view
+iomanip system_error
+iomanip tuple
+iomanip type_traits
+iomanip typeinfo
+iomanip unordered_map
+iomanip utility
+iomanip variant
+iomanip vector
+iomanip version
+ios algorithm
+ios atomic
+ios bit
+ios cctype
+ios cerrno
+ios climits
+ios clocale
+ios cmath
+ios compare
+ios concepts
+ios cstddef
+ios cstdint
+ios cstdio
+ios cstdlib
+ios cstring
+ios ctime
+ios cwchar
+ios cwctype
+ios exception
+ios initializer_list
+ios iosfwd
+ios iterator
+ios limits
+ios memory
+ios mutex
+ios new
+ios optional
+ios ratio
+ios stdexcept
+ios string
+ios string_view
+ios system_error
+ios tuple
+ios type_traits
+ios typeinfo
+ios utility
+ios variant
+ios version
+iosfwd version
+iostream algorithm
+iostream array
+iostream atomic
+iostream bit
+iostream bitset
+iostream cctype
+iostream cerrno
+iostream climits
+iostream clocale
+iostream cmath
+iostream compare
+iostream concepts
+iostream cstdarg
+iostream cstddef
+iostream cstdint
+iostream cstdio
+iostream cstdlib
+iostream cstring
+iostream ctime
+iostream cwchar
+iostream cwctype
+iostream deque
+iostream exception
+iostream format
+iostream functional
+iostream initializer_list
+iostream ios
+iostream iosfwd
+iostream istream
+iostream iterator
+iostream limits
+iostream locale
+iostream memory
+iostream mutex
+iostream new
+iostream optional
+iostream ostream
+iostream print
+iostream queue
+iostream ratio
+iostream stack
+iostream stdexcept
+iostream streambuf
+iostream string
+iostream string_view
+iostream system_error
+iostream tuple
+iostream type_traits
+iostream typeinfo
+iostream unordered_map
+iostream utility
+iostream variant
+iostream vector
+iostream version
+istream algorithm
+istream array
+istream atomic
+istream bit
+istream bitset
+istream cctype
+istream cerrno
+istream climits
+istream clocale
+istream cmath
+istream compare
+istream concepts
+istream cstdarg
+istream cstddef
+istream cstdint
+istream cstdio
+istream cstdlib
+istream cstring
+istream ctime
+istream cwchar
+istream cwctype
+istream deque
+istream exception
+istream format
+istream functional
+istream initializer_list
+istream ios
+istream iosfwd
+istream iterator
+istream limits
+istream locale
+istream memory
+istream mutex
+istream new
+istream optional
+istream ostream
+istream print
+istream queue
+istream ratio
+istream stack
+istream stdexcept
+istream streambuf
+istream string
+istream string_view
+istream system_error
+istream tuple
+istream type_traits
+istream typeinfo
+istream unordered_map
+istream utility
+istream variant
+istream vector
+istream version
+iterator cmath
+iterator compare
+iterator concepts
+iterator cstddef
+iterator cstdint
+iterator cstdlib
+iterator cstring
+iterator exception
+iterator initializer_list
+iterator iosfwd
+iterator limits
+iterator new
+iterator tuple
+iterator type_traits
+iterator typeinfo
+iterator utility
+iterator variant
+iterator version
+latch atomic
+latch climits
+latch cmath
+latch compare
+latch cstddef
+latch cstdint
+latch cstdlib
+latch cstring
+latch ctime
+latch limits
+latch ratio
+latch type_traits
+latch version
+limits cstdint
+limits type_traits
+limits version
+list algorithm
+list array
+list atomic
+list bit
+list cctype
+list cerrno
+list climits
+list clocale
+list cmath
+list compare
+list concepts
+list cstdarg
+list cstddef
+list cstdint
+list cstdio
+list cstdlib
+list cstring
+list ctime
+list cwchar
+list cwctype
+list exception
+list functional
+list initializer_list
+list ios
+list iosfwd
+list iterator
+list limits
+list locale
+list memory
+list mutex
+list new
+list optional
+list ratio
+list stdexcept
+list streambuf
+list string
+list string_view
+list system_error
+list tuple
+list type_traits
+list typeinfo
+list unordered_map
+list utility
+list variant
+list vector
+list version
+locale algorithm
+locale atomic
+locale bit
+locale cctype
+locale cerrno
+locale climits
+locale clocale
+locale cmath
+locale compare
+locale concepts
+locale cstdarg
+locale cstddef
+locale cstdint
+locale cstdio
+locale cstdlib
+locale cstring
+locale ctime
+locale cwchar
+locale cwctype
+locale exception
+locale initializer_list
+locale ios
+locale iosfwd
+locale iterator
+locale limits
+locale memory
+locale mutex
+locale new
+locale optional
+locale ratio
+locale stdexcept
+locale streambuf
+locale string
+locale string_view
+locale system_error
+locale tuple
+locale type_traits
+locale typeinfo
+locale utility
+locale variant
+locale version
+map algorithm
+map array
+map atomic
+map bit
+map cctype
+map cerrno
+map climits
+map clocale
+map cmath
+map compare
+map concepts
+map cstdarg
+map cstddef
+map cstdint
+map cstdio
+map cstdlib
+map cstring
+map ctime
+map cwchar
+map cwctype
+map exception
+map functional
+map initializer_list
+map ios
+map iosfwd
+map iterator
+map limits
+map locale
+map memory
+map mutex
+map new
+map optional
+map ratio
+map stdexcept
+map streambuf
+map string
+map string_view
+map system_error
+map tuple
+map type_traits
+map typeinfo
+map unordered_map
+map utility
+map variant
+map vector
+map version
+mdspan algorithm
+mdspan array
+mdspan atomic
+mdspan bit
+mdspan cctype
+mdspan cerrno
+mdspan cinttypes
+mdspan climits
+mdspan clocale
+mdspan cmath
+mdspan compare
+mdspan concepts
+mdspan cstdarg
+mdspan cstddef
+mdspan cstdint
+mdspan cstdio
+mdspan cstdlib
+mdspan cstring
+mdspan ctime
+mdspan cwchar
+mdspan cwctype
+mdspan exception
+mdspan functional
+mdspan initializer_list
+mdspan ios
+mdspan iosfwd
+mdspan iterator
+mdspan limits
+mdspan locale
+mdspan memory
+mdspan mutex
+mdspan new
+mdspan optional
+mdspan ratio
+mdspan span
+mdspan stdexcept
+mdspan streambuf
+mdspan string
+mdspan string_view
+mdspan system_error
+mdspan tuple
+mdspan type_traits
+mdspan typeinfo
+mdspan unordered_map
+mdspan utility
+mdspan variant
+mdspan vector
+mdspan version
+memory atomic
+memory climits
+memory cmath
+memory compare
+memory concepts
+memory cstddef
+memory cstdint
+memory cstdlib
+memory cstring
+memory ctime
+memory exception
+memory initializer_list
+memory iosfwd
+memory iterator
+memory limits
+memory new
+memory ratio
+memory stdexcept
+memory tuple
+memory type_traits
+memory typeinfo
+memory utility
+memory variant
+memory version
+memory_resource algorithm
+memory_resource atomic
+memory_resource bit
+memory_resource cctype
+memory_resource cerrno
+memory_resource climits
+memory_resource cmath
+memory_resource compare
+memory_resource concepts
+memory_resource cstddef
+memory_resource cstdint
+memory_resource cstdio
+memory_resource cstdlib
+memory_resource cstring
+memory_resource ctime
+memory_resource cwchar
+memory_resource cwctype
+memory_resource exception
+memory_resource initializer_list
+memory_resource iosfwd
+memory_resource iterator
+memory_resource limits
+memory_resource memory
+memory_resource mutex
+memory_resource new
+memory_resource optional
+memory_resource ratio
+memory_resource stdexcept
+memory_resource string
+memory_resource string_view
+memory_resource system_error
+memory_resource tuple
+memory_resource type_traits
+memory_resource typeinfo
+memory_resource utility
+memory_resource variant
+memory_resource version
+mutex algorithm
+mutex atomic
+mutex bit
+mutex cctype
+mutex cerrno
+mutex climits
+mutex cmath
+mutex compare
+mutex concepts
+mutex cstddef
+mutex cstdint
+mutex cstdio
+mutex cstdlib
+mutex cstring
+mutex ctime
+mutex cwchar
+mutex cwctype
+mutex exception
+mutex initializer_list
+mutex iosfwd
+mutex iterator
+mutex limits
+mutex memory
+mutex new
+mutex optional
+mutex ratio
+mutex stdexcept
+mutex string
+mutex string_view
+mutex system_error
+mutex tuple
+mutex type_traits
+mutex typeinfo
+mutex utility
+mutex variant
+mutex version
+new cstddef
+new cstdint
+new cstdlib
+new type_traits
+new version
+numbers concepts
+numbers cstddef
+numbers cstdint
+numbers type_traits
+numbers version
+numeric algorithm
+numeric array
+numeric atomic
+numeric bit
+numeric cctype
+numeric cerrno
+numeric climits
+numeric clocale
+numeric cmath
+numeric compare
+numeric concepts
+numeric cstdarg
+numeric cstddef
+numeric cstdint
+numeric cstdio
+numeric cstdlib
+numeric cstring
+numeric ctime
+numeric cwchar
+numeric cwctype
+numeric exception
+numeric execution
+numeric functional
+numeric initializer_list
+numeric ios
+numeric iosfwd
+numeric iterator
+numeric limits
+numeric locale
+numeric memory
+numeric mutex
+numeric new
+numeric optional
+numeric ratio
+numeric stdexcept
+numeric streambuf
+numeric string
+numeric string_view
+numeric system_error
+numeric tuple
+numeric type_traits
+numeric typeinfo
+numeric unordered_map
+numeric utility
+numeric variant
+numeric vector
+numeric version
+optional atomic
+optional climits
+optional cmath
+optional compare
+optional concepts
+optional cstddef
+optional cstdint
+optional cstdlib
+optional cstring
+optional ctime
+optional exception
+optional initializer_list
+optional iosfwd
+optional iterator
+optional limits
+optional memory
+optional new
+optional ratio
+optional stdexcept
+optional tuple
+optional type_traits
+optional typeinfo
+optional utility
+optional variant
+optional version
+ostream algorithm
+ostream array
+ostream atomic
+ostream bit
+ostream bitset
+ostream cctype
+ostream cerrno
+ostream climits
+ostream clocale
+ostream cmath
+ostream compare
+ostream concepts
+ostream cstdarg
+ostream cstddef
+ostream cstdint
+ostream cstdio
+ostream cstdlib
+ostream cstring
+ostream ctime
+ostream cwchar
+ostream cwctype
+ostream deque
+ostream exception
+ostream format
+ostream functional
+ostream initializer_list
+ostream ios
+ostream iosfwd
+ostream iterator
+ostream limits
+ostream locale
+ostream memory
+ostream mutex
+ostream new
+ostream optional
+ostream print
+ostream queue
+ostream ratio
+ostream stack
+ostream stdexcept
+ostream streambuf
+ostream string
+ostream string_view
+ostream system_error
+ostream tuple
+ostream type_traits
+ostream typeinfo
+ostream unordered_map
+ostream utility
+ostream variant
+ostream vector
+ostream version
+print algorithm
+print array
+print atomic
+print bit
+print cctype
+print cerrno
+print climits
+print clocale
+print cmath
+print compare
+print concepts
+print cstdarg
+print cstddef
+print cstdint
+print cstdio
+print cstdlib
+print cstring
+print ctime
+print cwchar
+print cwctype
+print deque
+print exception
+print format
+print functional
+print initializer_list
+print ios
+print iosfwd
+print iterator
+print limits
+print locale
+print memory
+print mutex
+print new
+print optional
+print queue
+print ratio
+print stack
+print stdexcept
+print streambuf
+print string
+print string_view
+print system_error
+print tuple
+print type_traits
+print typeinfo
+print unordered_map
+print utility
+print variant
+print vector
+print version
+queue algorithm
+queue array
+queue atomic
+queue bit
+queue cctype
+queue cerrno
+queue climits
+queue clocale
+queue cmath
+queue compare
+queue concepts
+queue cstdarg
+queue cstddef
+queue cstdint
+queue cstdio
+queue cstdlib
+queue cstring
+queue ctime
+queue cwchar
+queue cwctype
+queue deque
+queue exception
+queue functional
+queue initializer_list
+queue ios
+queue iosfwd
+queue iterator
+queue limits
+queue locale
+queue memory
+queue mutex
+queue new
+queue optional
+queue ratio
+queue stdexcept
+queue streambuf
+queue string
+queue string_view
+queue system_error
+queue tuple
+queue type_traits
+queue typeinfo
+queue unordered_map
+queue utility
+queue variant
+queue vector
+queue version
+random algorithm
+random array
+random atomic
+random bit
+random cctype
+random cerrno
+random climits
+random clocale
+random cmath
+random compare
+random concepts
+random cstdarg
+random cstddef
+random cstdint
+random cstdio
+random cstdlib
+random cstring
+random ctime
+random cwchar
+random cwctype
+random exception
+random execution
+random functional
+random initializer_list
+random ios
+random iosfwd
+random iterator
+random limits
+random locale
+random memory
+random mutex
+random new
+random numeric
+random optional
+random ratio
+random stdexcept
+random streambuf
+random string
+random string_view
+random system_error
+random tuple
+random type_traits
+random typeinfo
+random unordered_map
+random utility
+random variant
+random vector
+random version
+ranges algorithm
+ranges array
+ranges atomic
+ranges bit
+ranges cctype
+ranges cerrno
+ranges climits
+ranges clocale
+ranges cmath
+ranges compare
+ranges concepts
+ranges cstdarg
+ranges cstddef
+ranges cstdint
+ranges cstdio
+ranges cstdlib
+ranges cstring
+ranges ctime
+ranges cwchar
+ranges cwctype
+ranges exception
+ranges functional
+ranges initializer_list
+ranges ios
+ranges iosfwd
+ranges iterator
+ranges limits
+ranges locale
+ranges memory
+ranges mutex
+ranges new
+ranges optional
+ranges ratio
+ranges span
+ranges stdexcept
+ranges streambuf
+ranges string
+ranges string_view
+ranges system_error
+ranges tuple
+ranges type_traits
+ranges typeinfo
+ranges unordered_map
+ranges utility
+ranges variant
+ranges vector
+ranges version
+ratio climits
+ratio cstdint
+ratio type_traits
+ratio version
+regex algorithm
+regex array
+regex atomic
+regex bit
+regex cctype
+regex cerrno
+regex climits
+regex clocale
+regex cmath
+regex compare
+regex concepts
+regex cstdarg
+regex cstddef
+regex cstdint
+regex cstdio
+regex cstdlib
+regex cstring
+regex ctime
+regex cwchar
+regex cwctype
+regex deque
+regex exception
+regex functional
+regex initializer_list
+regex ios
+regex iosfwd
+regex iterator
+regex limits
+regex locale
+regex memory
+regex mutex
+regex new
+regex optional
+regex ratio
+regex stdexcept
+regex streambuf
+regex string
+regex string_view
+regex system_error
+regex tuple
+regex type_traits
+regex typeinfo
+regex unordered_map
+regex utility
+regex variant
+regex vector
+regex version
+scoped_allocator atomic
+scoped_allocator climits
+scoped_allocator cmath
+scoped_allocator compare
+scoped_allocator concepts
+scoped_allocator cstddef
+scoped_allocator cstdint
+scoped_allocator cstdlib
+scoped_allocator cstring
+scoped_allocator ctime
+scoped_allocator exception
+scoped_allocator initializer_list
+scoped_allocator iosfwd
+scoped_allocator iterator
+scoped_allocator limits
+scoped_allocator memory
+scoped_allocator new
+scoped_allocator ratio
+scoped_allocator stdexcept
+scoped_allocator tuple
+scoped_allocator type_traits
+scoped_allocator typeinfo
+scoped_allocator utility
+scoped_allocator variant
+scoped_allocator version
+semaphore atomic
+semaphore climits
+semaphore cmath
+semaphore compare
+semaphore cstddef
+semaphore cstdint
+semaphore cstdlib
+semaphore cstring
+semaphore ctime
+semaphore limits
+semaphore ratio
+semaphore type_traits
+semaphore version
+set algorithm
+set array
+set atomic
+set bit
+set cctype
+set cerrno
+set climits
+set clocale
+set cmath
+set compare
+set concepts
+set cstdarg
+set cstddef
+set cstdint
+set cstdio
+set cstdlib
+set cstring
+set ctime
+set cwchar
+set cwctype
+set exception
+set functional
+set initializer_list
+set ios
+set iosfwd
+set iterator
+set limits
+set locale
+set memory
+set mutex
+set new
+set optional
+set ratio
+set stdexcept
+set streambuf
+set string
+set string_view
+set system_error
+set tuple
+set type_traits
+set typeinfo
+set unordered_map
+set utility
+set variant
+set vector
+set version
+shared_mutex algorithm
+shared_mutex atomic
+shared_mutex bit
+shared_mutex cctype
+shared_mutex cerrno
+shared_mutex climits
+shared_mutex cmath
+shared_mutex compare
+shared_mutex concepts
+shared_mutex cstddef
+shared_mutex cstdint
+shared_mutex cstdio
+shared_mutex cstdlib
+shared_mutex cstring
+shared_mutex ctime
+shared_mutex cwchar
+shared_mutex cwctype
+shared_mutex exception
+shared_mutex initializer_list
+shared_mutex iosfwd
+shared_mutex iterator
+shared_mutex limits
+shared_mutex memory
+shared_mutex new
+shared_mutex optional
+shared_mutex ratio
+shared_mutex stdexcept
+shared_mutex string
+shared_mutex string_view
+shared_mutex system_error
+shared_mutex tuple
+shared_mutex type_traits
+shared_mutex typeinfo
+shared_mutex utility
+shared_mutex variant
+shared_mutex version
+source_location cstdint
+source_location version
+span algorithm
+span array
+span atomic
+span bit
+span cctype
+span cerrno
+span climits
+span clocale
+span cmath
+span compare
+span concepts
+span cstdarg
+span cstddef
+span cstdint
+span cstdio
+span cstdlib
+span cstring
+span ctime
+span cwchar
+span cwctype
+span exception
+span functional
+span initializer_list
+span ios
+span iosfwd
+span iterator
+span limits
+span locale
+span memory
+span mutex
+span new
+span optional
+span ratio
+span stdexcept
+span streambuf
+span string
+span string_view
+span system_error
+span tuple
+span type_traits
+span typeinfo
+span unordered_map
+span utility
+span variant
+span vector
+span version
+sstream algorithm
+sstream array
+sstream atomic
+sstream bit
+sstream bitset
+sstream cctype
+sstream cerrno
+sstream climits
+sstream clocale
+sstream cmath
+sstream compare
+sstream concepts
+sstream cstdarg
+sstream cstddef
+sstream cstdint
+sstream cstdio
+sstream cstdlib
+sstream cstring
+sstream ctime
+sstream cwchar
+sstream cwctype
+sstream deque
+sstream exception
+sstream format
+sstream functional
+sstream initializer_list
+sstream ios
+sstream iosfwd
+sstream istream
+sstream iterator
+sstream limits
+sstream locale
+sstream memory
+sstream mutex
+sstream new
+sstream optional
+sstream ostream
+sstream print
+sstream queue
+sstream ratio
+sstream stack
+sstream stdexcept
+sstream streambuf
+sstream string
+sstream string_view
+sstream system_error
+sstream tuple
+sstream type_traits
+sstream typeinfo
+sstream unordered_map
+sstream utility
+sstream variant
+sstream vector
+sstream version
+stack algorithm
+stack array
+stack atomic
+stack bit
+stack cctype
+stack cerrno
+stack climits
+stack clocale
+stack cmath
+stack compare
+stack concepts
+stack cstdarg
+stack cstddef
+stack cstdint
+stack cstdio
+stack cstdlib
+stack cstring
+stack ctime
+stack cwchar
+stack cwctype
+stack deque
+stack exception
+stack functional
+stack initializer_list
+stack ios
+stack iosfwd
+stack iterator
+stack limits
+stack locale
+stack memory
+stack mutex
+stack new
+stack optional
+stack ratio
+stack stdexcept
+stack streambuf
+stack string
+stack string_view
+stack system_error
+stack tuple
+stack type_traits
+stack typeinfo
+stack unordered_map
+stack utility
+stack variant
+stack vector
+stack version
+stdexcept cstddef
+stdexcept cstdint
+stdexcept cstdlib
+stdexcept exception
+stdexcept iosfwd
+stdexcept new
+stdexcept type_traits
+stdexcept typeinfo
+stdexcept version
+stop_token iosfwd
+stop_token version
+streambuf algorithm
+streambuf atomic
+streambuf bit
+streambuf cctype
+streambuf cerrno
+streambuf climits
+streambuf clocale
+streambuf cmath
+streambuf compare
+streambuf concepts
+streambuf cstddef
+streambuf cstdint
+streambuf cstdio
+streambuf cstdlib
+streambuf cstring
+streambuf ctime
+streambuf cwchar
+streambuf cwctype
+streambuf exception
+streambuf initializer_list
+streambuf ios
+streambuf iosfwd
+streambuf iterator
+streambuf limits
+streambuf memory
+streambuf mutex
+streambuf new
+streambuf optional
+streambuf ratio
+streambuf stdexcept
+streambuf string
+streambuf string_view
+streambuf system_error
+streambuf tuple
+streambuf type_traits
+streambuf typeinfo
+streambuf utility
+streambuf variant
+streambuf version
+string algorithm
+string atomic
+string bit
+string cctype
+string climits
+string cmath
+string compare
+string concepts
+string cstddef
+string cstdint
+string cstdio
+string cstdlib
+string cstring
+string ctime
+string cwchar
+string cwctype
+string exception
+string initializer_list
+string iosfwd
+string iterator
+string limits
+string memory
+string new
+string optional
+string ratio
+string stdexcept
+string string_view
+string tuple
+string type_traits
+string typeinfo
+string utility
+string variant
+string version
+string_view algorithm
+string_view atomic
+string_view bit
+string_view cctype
+string_view climits
+string_view cmath
+string_view compare
+string_view concepts
+string_view cstddef
+string_view cstdint
+string_view cstdio
+string_view cstdlib
+string_view cstring
+string_view ctime
+string_view cwchar
+string_view cwctype
+string_view exception
+string_view initializer_list
+string_view iosfwd
+string_view iterator
+string_view limits
+string_view memory
+string_view new
+string_view optional
+string_view ratio
+string_view stdexcept
+string_view tuple
+string_view type_traits
+string_view typeinfo
+string_view utility
+string_view variant
+string_view version
+strstream algorithm
+strstream array
+strstream atomic
+strstream bit
+strstream bitset
+strstream cctype
+strstream cerrno
+strstream climits
+strstream clocale
+strstream cmath
+strstream compare
+strstream concepts
+strstream cstdarg
+strstream cstddef
+strstream cstdint
+strstream cstdio
+strstream cstdlib
+strstream cstring
+strstream ctime
+strstream cwchar
+strstream cwctype
+strstream deque
+strstream exception
+strstream format
+strstream functional
+strstream initializer_list
+strstream ios
+strstream iosfwd
+strstream istream
+strstream iterator
+strstream limits
+strstream locale
+strstream memory
+strstream mutex
+strstream new
+strstream optional
+strstream ostream
+strstream print
+strstream queue
+strstream ratio
+strstream stack
+strstream stdexcept
+strstream streambuf
+strstream string
+strstream string_view
+strstream system_error
+strstream tuple
+strstream type_traits
+strstream typeinfo
+strstream unordered_map
+strstream utility
+strstream variant
+strstream vector
+strstream version
+syncstream algorithm
+syncstream array
+syncstream atomic
+syncstream bit
+syncstream bitset
+syncstream cctype
+syncstream cerrno
+syncstream climits
+syncstream clocale
+syncstream cmath
+syncstream compare
+syncstream concepts
+syncstream cstdarg
+syncstream cstddef
+syncstream cstdint
+syncstream cstdio
+syncstream cstdlib
+syncstream cstring
+syncstream ctime
+syncstream cwchar
+syncstream cwctype
+syncstream deque
+syncstream exception
+syncstream format
+syncstream functional
+syncstream initializer_list
+syncstream ios
+syncstream iosfwd
+syncstream iterator
+syncstream limits
+syncstream locale
+syncstream map
+syncstream memory
+syncstream mutex
+syncstream new
+syncstream optional
+syncstream ostream
+syncstream print
+syncstream queue
+syncstream ratio
+syncstream shared_mutex
+syncstream stack
+syncstream stdexcept
+syncstream streambuf
+syncstream string
+syncstream string_view
+syncstream system_error
+syncstream tuple
+syncstream type_traits
+syncstream typeinfo
+syncstream unordered_map
+syncstream utility
+syncstream variant
+syncstream vector
+syncstream version
+system_error algorithm
+system_error atomic
+system_error bit
+system_error cctype
+system_error cerrno
+system_error climits
+system_error cmath
+system_error compare
+system_error concepts
+system_error cstddef
+system_error cstdint
+system_error cstdio
+system_error cstdlib
+system_error cstring
+system_error ctime
+system_error cwchar
+system_error cwctype
+system_error exception
+system_error initializer_list
+system_error iosfwd
+system_error iterator
+system_error limits
+system_error memory
+system_error new
+system_error optional
+system_error ratio
+system_error stdexcept
+system_error string
+system_error string_view
+system_error tuple
+system_error type_traits
+system_error typeinfo
+system_error utility
+system_error variant
+system_error version
+thread algorithm
+thread array
+thread atomic
+thread bit
+thread bitset
+thread cctype
+thread cerrno
+thread chrono
+thread climits
+thread clocale
+thread cmath
+thread compare
+thread concepts
+thread cstdarg
+thread cstddef
+thread cstdint
+thread cstdio
+thread cstdlib
+thread cstring
+thread ctime
+thread cwchar
+thread cwctype
+thread deque
+thread exception
+thread format
+thread forward_list
+thread functional
+thread initializer_list
+thread ios
+thread iosfwd
+thread istream
+thread iterator
+thread limits
+thread locale
+thread memory
+thread mutex
+thread new
+thread optional
+thread ostream
+thread print
+thread queue
+thread ratio
+thread sstream
+thread stack
+thread stdexcept
+thread streambuf
+thread string
+thread string_view
+thread system_error
+thread tuple
+thread type_traits
+thread typeinfo
+thread unordered_map
+thread utility
+thread variant
+thread vector
+thread version
+tuple cmath
+tuple compare
+tuple cstddef
+tuple cstdint
+tuple cstdlib
+tuple exception
+tuple initializer_list
+tuple iosfwd
+tuple limits
+tuple new
+tuple type_traits
+tuple typeinfo
+tuple utility
+tuple version
+type_traits cstdint
+type_traits version
+typeindex cmath
+typeindex compare
+typeindex cstddef
+typeindex cstdint
+typeindex cstdlib
+typeindex initializer_list
+typeindex iosfwd
+typeindex limits
+typeindex new
+typeindex type_traits
+typeindex typeinfo
+typeindex utility
+typeindex version
+typeinfo cstddef
+typeinfo cstdint
+typeinfo cstdlib
+typeinfo type_traits
+typeinfo version
+unordered_map algorithm
+unordered_map atomic
+unordered_map bit
+unordered_map cctype
+unordered_map climits
+unordered_map cmath
+unordered_map compare
+unordered_map concepts
+unordered_map cstddef
+unordered_map cstdint
+unordered_map cstdlib
+unordered_map cstring
+unordered_map ctime
+unordered_map cwchar
+unordered_map cwctype
+unordered_map exception
+unordered_map initializer_list
+unordered_map iosfwd
+unordered_map iterator
+unordered_map limits
+unordered_map memory
+unordered_map new
+unordered_map optional
+unordered_map ratio
+unordered_map stdexcept
+unordered_map tuple
+unordered_map type_traits
+unordered_map typeinfo
+unordered_map utility
+unordered_map variant
+unordered_map version
+unordered_set algorithm
+unordered_set array
+unordered_set atomic
+unordered_set bit
+unordered_set cctype
+unordered_set cerrno
+unordered_set climits
+unordered_set clocale
+unordered_set cmath
+unordered_set compare
+unordered_set concepts
+unordered_set cstdarg
+unordered_set cstddef
+unordered_set cstdint
+unordered_set cstdio
+unordered_set cstdlib
+unordered_set cstring
+unordered_set ctime
+unordered_set cwchar
+unordered_set cwctype
+unordered_set exception
+unordered_set functional
+unordered_set initializer_list
+unordered_set ios
+unordered_set iosfwd
+unordered_set iterator
+unordered_set limits
+unordered_set locale
+unordered_set memory
+unordered_set mutex
+unordered_set new
+unordered_set optional
+unordered_set ratio
+unordered_set stdexcept
+unordered_set streambuf
+unordered_set string
+unordered_set string_view
+unordered_set system_error
+unordered_set tuple
+unordered_set type_traits
+unordered_set typeinfo
+unordered_set unordered_map
+unordered_set utility
+unordered_set variant
+unordered_set vector
+unordered_set version
+utility cmath
+utility compare
+utility cstddef
+utility cstdint
+utility cstdlib
+utility initializer_list
+utility iosfwd
+utility limits
+utility type_traits
+utility version
+valarray algorithm
+valarray array
+valarray atomic
+valarray bit
+valarray cctype
+valarray cerrno
+valarray climits
+valarray clocale
+valarray cmath
+valarray compare
+valarray concepts
+valarray cstdarg
+valarray cstddef
+valarray cstdint
+valarray cstdio
+valarray cstdlib
+valarray cstring
+valarray ctime
+valarray cwchar
+valarray cwctype
+valarray exception
+valarray functional
+valarray initializer_list
+valarray ios
+valarray iosfwd
+valarray iterator
+valarray limits
+valarray locale
+valarray memory
+valarray mutex
+valarray new
+valarray optional
+valarray ratio
+valarray stdexcept
+valarray streambuf
+valarray string
+valarray string_view
+valarray system_error
+valarray tuple
+valarray type_traits
+valarray typeinfo
+valarray unordered_map
+valarray utility
+valarray variant
+valarray vector
+valarray version
+variant cmath
+variant compare
+variant cstddef
+variant cstdint
+variant cstdlib
+variant cstring
+variant exception
+variant initializer_list
+variant iosfwd
+variant limits
+variant new
+variant tuple
+variant type_traits
+variant typeinfo
+variant utility
+variant version
+vector algorithm
+vector array
+vector atomic
+vector bit
+vector cctype
+vector cerrno
+vector climits
+vector clocale
+vector cmath
+vector compare
+vector concepts
+vector cstdarg
+vector cstddef
+vector cstdint
+vector cstdio
+vector cstdlib
+vector cstring
+vector ctime
+vector cwchar
+vector cwctype
+vector exception
+vector initializer_list
+vector ios
+vector iosfwd
+vector iterator
+vector limits
+vector locale
+vector memory
+vector mutex
+vector new
+vector optional
+vector ratio
+vector stdexcept
+vector streambuf
+vector string
+vector string_view
+vector system_error
+vector tuple
+vector type_traits
+vector typeinfo
+vector utility
+vector variant
+vector version
+"""
+}
 
 if __name__ == "__main__":
     parser = argparse.ArgumentParser(
@@ -27,9 +2672,13 @@
     )
     args = parser.parse_args()
 
-    CSV_ROOT = os.path.dirname(__file__)
-    filename = os.path.join(CSV_ROOT, f"{args.standard}.csv")
-    with open(filename, 'r') as f:
-        for line in f.readlines():
-            if line.startswith(args.header + ' '):
-                print(line, end='') # lines already end in newline
+    for line in files[args.standard].splitlines():
+        if line.startswith(args.header + ' '):
+            print(line)
+
+    # CSV_ROOT = os.path.dirname(__file__)
+    # filename = os.path.join(CSV_ROOT, f"{args.standard}.csv")
+    # with open(filename, 'r') as f:
+    #     for line in f.readlines():
+    #         if line.startswith(args.header + ' '):
+    #             print(line, end='') # lines already end in newline
diff --git a/libcxx/utils/ci/run-buildbot b/libcxx/utils/ci/run-buildbot
index b0533cb9a49c93..793b1fa85e81f9 100755
--- a/libcxx/utils/ci/run-buildbot
+++ b/libcxx/utils/ci/run-buildbot
@@ -267,6 +267,7 @@ check-generated-output)
 generic-cxx03)
     clean
     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx03.cmake"
+    ${MONOREPO_ROOT}/libcxx/utils/libcxx-lit "${BUILD_DIR}" -v libcxx/test/libcxx/transitive_includes.gen.py
     check-runtimes
     check-abi-list
 ;;

>From fc0b820eefeb1285095c00ef1e63d19a8fc7f2ef Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Mon, 30 Sep 2024 15:30:53 -0400
Subject: [PATCH 4/9] Try mkdir -p

---
 libcxx/test/libcxx/transitive_includes.gen.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libcxx/test/libcxx/transitive_includes.gen.py b/libcxx/test/libcxx/transitive_includes.gen.py
index f9a868128c6c83..b6d9d7b29384b8 100644
--- a/libcxx/test/libcxx/transitive_includes.gen.py
+++ b/libcxx/test/libcxx/transitive_includes.gen.py
@@ -87,7 +87,7 @@
 // TODO: Figure out why <stdatomic.h> doesn't work on FreeBSD
 // UNSUPPORTED: LIBCXX-FREEBSD-FIXME
 
-// RUN: mkdir %t
+// RUN: mkdir -p %t
 // RUN: %{{cxx}} %s %{{flags}} %{{compile_flags}} --trace-includes -fshow-skipped-includes --preprocess > /dev/null 2> %t/trace-includes.txt
 // RUN: %{{python}} %{{libcxx-dir}}/test/libcxx/transitive_includes/to_csv.py %t/trace-includes.txt > %t/actual_transitive_includes.csv
 // RUN: %{{python}} %{{libcxx-dir}}/test/libcxx/transitive_includes/expected.py %{{cxx_std}} "{header}" > %t/expected_transitive_includes.csv

>From 51b99aa39a088a5dd2abd507dc10f8acb950dd70 Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Mon, 30 Sep 2024 15:39:26 -0400
Subject: [PATCH 5/9] More diagnostics

---
 libcxx/test/libcxx/transitive_includes.gen.py      |  2 +-
 libcxx/test/libcxx/transitive_includes/expected.py | 14 +++++++++++---
 libcxx/utils/ci/run-buildbot                       |  2 +-
 3 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/libcxx/test/libcxx/transitive_includes.gen.py b/libcxx/test/libcxx/transitive_includes.gen.py
index b6d9d7b29384b8..a5fe6cff220ef1 100644
--- a/libcxx/test/libcxx/transitive_includes.gen.py
+++ b/libcxx/test/libcxx/transitive_includes.gen.py
@@ -90,7 +90,7 @@
 // RUN: mkdir -p %t
 // RUN: %{{cxx}} %s %{{flags}} %{{compile_flags}} --trace-includes -fshow-skipped-includes --preprocess > /dev/null 2> %t/trace-includes.txt
 // RUN: %{{python}} %{{libcxx-dir}}/test/libcxx/transitive_includes/to_csv.py %t/trace-includes.txt > %t/actual_transitive_includes.csv
-// RUN: %{{python}} %{{libcxx-dir}}/test/libcxx/transitive_includes/expected.py %{{cxx_std}} "{header}" > %t/expected_transitive_includes.csv
+// RUN: %{{python}} %{{libcxx-dir}}/test/libcxx/transitive_includes/expected.py %{{cxx_std}} "{header}" %t/expected_transitive_includes.csv
 // RUN: diff -w %t/expected_transitive_includes.csv %t/actual_transitive_includes.csv
 #include <{header}>
 """
diff --git a/libcxx/test/libcxx/transitive_includes/expected.py b/libcxx/test/libcxx/transitive_includes/expected.py
index 126be27e97577f..76f4e0c0ecf801 100755
--- a/libcxx/test/libcxx/transitive_includes/expected.py
+++ b/libcxx/test/libcxx/transitive_includes/expected.py
@@ -2670,11 +2670,19 @@
         default=None,
         help="The header to extract the expected transitive includes for."
     )
+    parser.add_argument(
+        "out",
+        default=None,
+        help="output file."
+    )
     args = parser.parse_args()
 
-    for line in files[args.standard].splitlines():
-        if line.startswith(args.header + ' '):
-            print(line)
+    with open(args.out, 'w') as output:
+        for line in files[args.standard].splitlines():
+            print(f"READING LINE: {line}")
+            if line.startswith(args.header + ' '):
+                print(f"LINE STARTS WITH {args.header}")
+                output.write(line + '\n')
 
     # CSV_ROOT = os.path.dirname(__file__)
     # filename = os.path.join(CSV_ROOT, f"{args.standard}.csv")
diff --git a/libcxx/utils/ci/run-buildbot b/libcxx/utils/ci/run-buildbot
index 793b1fa85e81f9..fee9b6d5946ea8 100755
--- a/libcxx/utils/ci/run-buildbot
+++ b/libcxx/utils/ci/run-buildbot
@@ -267,7 +267,7 @@ check-generated-output)
 generic-cxx03)
     clean
     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx03.cmake"
-    ${MONOREPO_ROOT}/libcxx/utils/libcxx-lit "${BUILD_DIR}" -v libcxx/test/libcxx/transitive_includes.gen.py
+    ${MONOREPO_ROOT}/libcxx/utils/libcxx-lit "${BUILD_DIR}" --show-all libcxx/test/libcxx/transitive_includes.gen.py
     check-runtimes
     check-abi-list
 ;;

>From 292ed0ac21697d9c5b0b51738eac51e926e4d18a Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Mon, 30 Sep 2024 15:50:36 -0400
Subject: [PATCH 6/9] More debug

---
 libcxx/test/libcxx/transitive_includes/expected.py | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/libcxx/test/libcxx/transitive_includes/expected.py b/libcxx/test/libcxx/transitive_includes/expected.py
index 76f4e0c0ecf801..747ea1548e0010 100755
--- a/libcxx/test/libcxx/transitive_includes/expected.py
+++ b/libcxx/test/libcxx/transitive_includes/expected.py
@@ -2679,11 +2679,15 @@
 
     with open(args.out, 'w') as output:
         for line in files[args.standard].splitlines():
-            print(f"READING LINE: {line}")
+            # print(f"READING LINE: {line}")
             if line.startswith(args.header + ' '):
-                print(f"LINE STARTS WITH {args.header}")
+                print(f"WRITING THIS TO OUTPUT: {line + '\n'}")
                 output.write(line + '\n')
 
+    with open(args.out, 'r') as output:
+        print("WRITTEN OUTPUT IS:")
+        print(output.read())
+
     # CSV_ROOT = os.path.dirname(__file__)
     # filename = os.path.join(CSV_ROOT, f"{args.standard}.csv")
     # with open(filename, 'r') as f:

>From 711aa2ad8c6c7eedd54d3f04786a32b152c3d63b Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Mon, 30 Sep 2024 16:09:16 -0400
Subject: [PATCH 7/9] Fix backslash

---
 libcxx/test/libcxx/transitive_includes/expected.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libcxx/test/libcxx/transitive_includes/expected.py b/libcxx/test/libcxx/transitive_includes/expected.py
index 747ea1548e0010..483cbf7e4d20be 100755
--- a/libcxx/test/libcxx/transitive_includes/expected.py
+++ b/libcxx/test/libcxx/transitive_includes/expected.py
@@ -2681,7 +2681,7 @@
         for line in files[args.standard].splitlines():
             # print(f"READING LINE: {line}")
             if line.startswith(args.header + ' '):
-                print(f"WRITING THIS TO OUTPUT: {line + '\n'}")
+                print(f"WRITING THIS TO OUTPUT: {line}\n")
                 output.write(line + '\n')
 
     with open(args.out, 'r') as output:

>From 8ffef49d24f94e7f287a8be6e90b046bad5827e6 Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Mon, 30 Sep 2024 16:15:56 -0400
Subject: [PATCH 8/9] Diff without -w

---
 libcxx/test/libcxx/transitive_includes.gen.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libcxx/test/libcxx/transitive_includes.gen.py b/libcxx/test/libcxx/transitive_includes.gen.py
index a5fe6cff220ef1..22fde8e72c3a2c 100644
--- a/libcxx/test/libcxx/transitive_includes.gen.py
+++ b/libcxx/test/libcxx/transitive_includes.gen.py
@@ -91,7 +91,7 @@
 // RUN: %{{cxx}} %s %{{flags}} %{{compile_flags}} --trace-includes -fshow-skipped-includes --preprocess > /dev/null 2> %t/trace-includes.txt
 // RUN: %{{python}} %{{libcxx-dir}}/test/libcxx/transitive_includes/to_csv.py %t/trace-includes.txt > %t/actual_transitive_includes.csv
 // RUN: %{{python}} %{{libcxx-dir}}/test/libcxx/transitive_includes/expected.py %{{cxx_std}} "{header}" %t/expected_transitive_includes.csv
-// RUN: diff -w %t/expected_transitive_includes.csv %t/actual_transitive_includes.csv
+// RUN: diff %t/expected_transitive_includes.csv %t/actual_transitive_includes.csv
 #include <{header}>
 """
         )

>From 5fb01b17cbce7f676fcc171a97cb2bbd491a5f63 Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Mon, 30 Sep 2024 16:42:31 -0400
Subject: [PATCH 9/9] Manual diff

---
 libcxx/test/libcxx/transitive_includes.gen.py |  2 +-
 .../test/libcxx/transitive_includes/diff.py   | 36 +++++++++++++++++++
 .../libcxx/transitive_includes/expected.py    |  4 +--
 3 files changed, 39 insertions(+), 3 deletions(-)
 create mode 100755 libcxx/test/libcxx/transitive_includes/diff.py

diff --git a/libcxx/test/libcxx/transitive_includes.gen.py b/libcxx/test/libcxx/transitive_includes.gen.py
index 22fde8e72c3a2c..c1f5b55a9a75cc 100644
--- a/libcxx/test/libcxx/transitive_includes.gen.py
+++ b/libcxx/test/libcxx/transitive_includes.gen.py
@@ -91,7 +91,7 @@
 // RUN: %{{cxx}} %s %{{flags}} %{{compile_flags}} --trace-includes -fshow-skipped-includes --preprocess > /dev/null 2> %t/trace-includes.txt
 // RUN: %{{python}} %{{libcxx-dir}}/test/libcxx/transitive_includes/to_csv.py %t/trace-includes.txt > %t/actual_transitive_includes.csv
 // RUN: %{{python}} %{{libcxx-dir}}/test/libcxx/transitive_includes/expected.py %{{cxx_std}} "{header}" %t/expected_transitive_includes.csv
-// RUN: diff %t/expected_transitive_includes.csv %t/actual_transitive_includes.csv
+// RUN: %{{python}} %{{libcxx-dir}}/test/libcxx/transitive_includes/diff.py %t/expected_transitive_includes.csv %t/actual_transitive_includes.csv
 #include <{header}>
 """
         )
diff --git a/libcxx/test/libcxx/transitive_includes/diff.py b/libcxx/test/libcxx/transitive_includes/diff.py
new file mode 100755
index 00000000000000..c30a6a9841a31b
--- /dev/null
+++ b/libcxx/test/libcxx/transitive_includes/diff.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python
+# ===----------------------------------------------------------------------===##
+#
+# 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
+#
+# ===----------------------------------------------------------------------===##
+
+import argparse
+import os
+import sys
+
+if __name__ == "__main__":
+    parser = argparse.ArgumentParser(
+        description="""Diff two files.""",
+    )
+    parser.add_argument("file1", default=None)
+    parser.add_argument("file2", default=None)
+    args = parser.parse_args()
+
+    def doread(f):
+        with open(f, 'r') as file:
+            content = file.read()
+        lines = [l.strip() for l in content.splitlines()]
+        return list(filter(None, lines))
+
+    content1 = doread(args.file1)
+    content2 = doread(args.file2)
+
+    for l1, l2 in zip(content1, content2):
+        if l1 != l2:
+            print("line not equal")
+            print(l1)
+            print(l2)
+            sys.exit(1)
diff --git a/libcxx/test/libcxx/transitive_includes/expected.py b/libcxx/test/libcxx/transitive_includes/expected.py
index 483cbf7e4d20be..3fc0a728c41dc8 100755
--- a/libcxx/test/libcxx/transitive_includes/expected.py
+++ b/libcxx/test/libcxx/transitive_includes/expected.py
@@ -2681,11 +2681,11 @@
         for line in files[args.standard].splitlines():
             # print(f"READING LINE: {line}")
             if line.startswith(args.header + ' '):
-                print(f"WRITING THIS TO OUTPUT: {line}\n")
+                # print(f"WRITING THIS TO OUTPUT: {line}\n")
                 output.write(line + '\n')
 
     with open(args.out, 'r') as output:
-        print("WRITTEN OUTPUT IS:")
+        # print("WRITTEN OUTPUT IS:")
         print(output.read())
 
     # CSV_ROOT = os.path.dirname(__file__)



More information about the libcxx-commits mailing list