Revert "Revert "[libcxx][module-map] creates submodules for private headers""
authorChristopher Di Bella <cjdb@google.com>
Sat, 12 Jun 2021 06:13:44 +0000 (06:13 +0000)
committerChristopher Di Bella <cjdb@google.com>
Wed, 16 Jun 2021 16:36:41 +0000 (16:36 +0000)
This reverts commit d9633f229c36f292dab0e5f510ac635cfaf3a798 as a
workaround was discovered.

Differential Revision: https://reviews.llvm.org/D104170

libcxx/include/module.modulemap
libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.advance/iterator_count.pass.cpp
libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.advance/iterator_count_sentinel.pass.cpp
libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.advance/iterator_sentinel.pass.cpp
libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.advance/special_function.compile.pass.cpp
libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.next/special_function.compile.pass.cpp
libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.prev/special_function.compile.pass.cpp

index a6f10a0..b28cd0d 100644 (file)
@@ -295,6 +295,11 @@ module std [system] {
   module format {
     header "format"
     export *
+
+    module __format {
+      module format_error         { header "__format/format_error.h"         }
+      module format_parse_context { header "__format/format_parse_context.h" }
+    }
   }
   module forward_list {
     header "forward_list"
@@ -346,6 +351,19 @@ module std [system] {
   module iterator {
     header "iterator"
     export *
+
+    module __iterator {
+      module advance              { header "__iterator/advance.h"              }
+      module concepts             { header "__iterator/concepts.h"             }
+      module default_sentinel     { header "__iterator/default_sentinel.h"     }
+      module incrementable_traits { header "__iterator/incrementable_traits.h" }
+      module iter_move            { header "__iterator/iter_move.h"            }
+      module iterator_traits      { header "__iterator/iterator_traits.h"      }
+      module next                 { header "__iterator/next.h"                 }
+      module prev                 { header "__iterator/prev.h"                 }
+      module projected            { header "__iterator/projected.h"            }
+      module readable_traits      { header "__iterator/readable_traits.h"      }
+    }
   }
   module latch {
     requires cplusplus14
@@ -373,6 +391,23 @@ module std [system] {
   module memory {
     header "memory"
     export *
+
+    module __memory {
+      module addressof                { header "__memory/addressof.h"                }
+      module allocation_guard         { header "__memory/allocation_guard.h"         }
+      module allocator_traits         { header "__memory/allocator_traits.h"         }
+      module allocator                { header "__memory/allocator.h"                }
+      module auto_ptr                 { header "__memory/auto_ptr.h"                 }
+      module compressed_pair          { header "__memory/compressed_pair.h"          }
+      module construct_at             { header "__memory/construct_at.h"             }
+      module pointer_safety           { header "__memory/pointer_safety.h"           }
+      module pointer_traits           { header "__memory/pointer_traits.h"           }
+      module raw_storage_iterator     { header "__memory/raw_storage_iterator.h"     }
+      module shared_ptr               { header "__memory/shared_ptr.h"               }
+      module temporary_buffer         { header "__memory/temporary_buffer.h"         }
+      module uninitialized_algorithms { header "__memory/uninitialized_algorithms.h" }
+      module unique_ptr               { header "__memory/unique_ptr.h"               }
+    }
   }
   module mutex {
     header "mutex"
@@ -415,6 +450,17 @@ module std [system] {
     export initializer_list
     export iterator
     export *
+
+    module __ranges {
+      module access                 { header "__ranges/access.h"                 }
+      module concepts               { header "__ranges/concepts.h"               }
+      module data                   { header "__ranges/data.h"                   }
+      module empty                  { header "__ranges/empty.h"                  }
+      module enable_borrowed_range  { header "__ranges/enable_borrowed_range.h"  }
+      module enable_view            { header "__ranges/enable_view.h"            }
+      module size                   { header "__ranges/size.h"                   }
+      module view_interface         { header "__ranges/view_interface.h"         }
+    }
   }
   module ratio {
     header "ratio"
@@ -512,6 +558,12 @@ module std [system] {
     header "utility"
     export initializer_list
     export *
+
+    module __utility {
+      module to_underlying {
+        header "__utility/to_underlying.h"
+      }
+    }
   }
   module valarray {
     header "valarray"
@@ -532,23 +584,29 @@ module std [system] {
     export *
   }
 
+  // __config not modularised due to a bug in Clang
+  // __functional(_03)?_base not modularised since it's designed for textual inclusion
+  // libcpp_version not modularised since it's just a version number
   // FIXME: These should be private.
-  module __bit_reference { header "__bit_reference" export * }
-  module __bits { header "__bits" export * }
-  module __debug { header "__debug" export * }
-  module __errc { header "__errc" export * }
-  module __functional_base { header "__functional_base" export * }
-  module __hash_table { header "__hash_table" export * }
-  module __locale { header "__locale" export * }
-  module __mutex_base { header "__mutex_base" export * }
-  module __node_handle { header "__node_handle" export * }
-  module __split_buffer { header "__split_buffer" export * }
-  module __std_stream { header "__std_stream" export * }
-  module __string { header "__string" export * }
+  module __availability      { header "__availability"      export * }
+  module __bit_reference     { header "__bit_reference"     export * }
+  module __bits              { header "__bits"              export * }
+  module __debug             { header "__debug"             export * }
+  module __errc              { header "__errc"              export * }
+  module __function_like     { header "__function_like.h"   export * }
+  module __functional_base   { header "__functional_base"   export * }
+  module __hash_table        { header "__hash_table"        export * }
+  module __locale            { header "__locale"            export * }
+  module __mutex_base        { header "__mutex_base"        export * }
+  module __node_handle       { header "__node_handle"       export * }
+  module __nullptr           { header "__nullptr"           export * }
+  module __split_buffer      { header "__split_buffer"      export * }
+  module __std_stream        { header "__std_stream"        export * }
+  module __string            { header "__string"            export * }
   module __threading_support { header "__threading_support" export * }
-  module __tree { header "__tree" export * }
-  module __tuple { header "__tuple" export * }
-  module __undef_macros { header "__undef_macros" export * }
+  module __tree              { header "__tree"              export * }
+  module __tuple             { header "__tuple"             export * }
+  module __undef_macros      { header "__undef_macros"      export * }
 
   module experimental {
     requires cplusplus11
index be4d9b6..f26e95e 100644 (file)
 #include <array>
 #include <cassert>
 
-#include "test_standard_function.h"
 #include "test_iterators.h"
 
-static_assert(is_function_like<decltype(std::ranges::advance)>());
-
 using range_t = std::array<int, 10>;
 
 template <std::input_or_output_iterator It>
index 29af3a1..0a2d032 100644 (file)
 #include <array>
 #include <cassert>
 
-#include "test_standard_function.h"
 #include "test_iterators.h"
 
-static_assert(is_function_like<decltype(std::ranges::advance)>());
-
 using range_t = std::array<int, 10>;
 
 class distance_apriori_sentinel {
index 902e7d2..b70ae99 100644 (file)
 #include <array>
 #include <cassert>
 
-#include "test_standard_function.h"
 #include "test_iterators.h"
 
-static_assert(is_function_like<decltype(std::ranges::advance)>());
-
 using range_t = std::array<int, 10>;
 
 class distance_apriori_sentinel {
index d9aec3c..d1e5bb0 100644 (file)
@@ -9,11 +9,17 @@
 // UNSUPPORTED: c++03, c++11, c++14, c++17
 // UNSUPPORTED: libcpp-no-concepts
 // UNSUPPORTED: gcc-10
+// XFAIL: clang-11 && modules-build
+// XFAIL: clang-12 && modules-build
 
 // ranges::advance
 
 #include <iterator>
 
+#include "test_standard_function.h"
+
+static_assert(is_function_like<decltype(std::ranges::advance)>());
+
 // FIXME: We're bending the rules here by adding a new type to namespace std::ranges. Since this is
 // the standard library's test suite, this should be fine (we *are* the implementation), but it's
 // necessary at the time of writing since there aren't any iterators in std::ranges that we can