From f56dfb78aa3fcc96bf7e5b6c3bdff8fa620aefd1 Mon Sep 17 00:00:00 2001 From: Arthur O'Dwyer Date: Sun, 31 Jul 2022 12:25:05 -0400 Subject: [PATCH] [libc++] Fix modules issues on OS X First, fix a collision with the Point type from MacTypes.h, which was reported on Slack, 2022-07-31: https://cpplang.slack.com/archives/C2X659D1B/p1659284691275889 Second, rename the meta:: namespace to types::. OSX's "/usr/include/ncurses.h" defines a `meta` function, and is (for some reason) included in "/usr/include/module.modulemap", so that identifier is off-limits for us to use in anything that compiles with -fmodules: libcxx/test/support/type_algorithms.h:16:11: error: redefinition of 'meta' as different kind of symbol namespace meta { ^ /usr/include/ncurses.h:603:28: note: previous definition is here extern NCURSES_EXPORT(int) meta (WINDOW *,bool); /* implemented */ ^ Finally, add a CI configuration for modules on OS X to make sure it does not regress. Differential Revision: https://reviews.llvm.org/D144915 --- .../is_always_bitcastable.compile.pass.cpp | 92 +++++++++++----------- .../alg.copy/ranges.copy.pass.cpp | 4 +- .../alg.copy/ranges.copy.segmented.pass.cpp | 2 +- .../alg.nonmodifying/alg.equal/equal.pass.cpp | 20 ++--- .../test/std/depr/depr.c.headers/math_h.pass.cpp | 24 +++--- .../support.limits/limits/is_specialized.pass.cpp | 2 +- libcxx/test/std/numerics/c.math/isfinite.pass.cpp | 4 +- libcxx/test/std/numerics/c.math/isinf.pass.cpp | 4 +- libcxx/test/std/numerics/c.math/isnan.pass.cpp | 4 +- libcxx/test/std/numerics/c.math/isnormal.pass.cpp | 4 +- .../range.adaptors/range.as.rvalue/begin.pass.cpp | 4 +- .../range.adaptors/range.as.rvalue/end.pass.cpp | 2 +- .../range.filter/iterator/arrow.pass.cpp | 46 +++++------ .../strings/basic.string/string.access/at.pass.cpp | 2 +- .../support/test.support/type_algorithms.pass.cpp | 12 +-- libcxx/test/support/test_iterators.h | 4 +- libcxx/test/support/type_algorithms.h | 4 +- libcxx/utils/ci/buildkite-pipeline.yml | 14 ++++ 18 files changed, 131 insertions(+), 117 deletions(-) diff --git a/libcxx/test/libcxx/type_traits/is_always_bitcastable.compile.pass.cpp b/libcxx/test/libcxx/type_traits/is_always_bitcastable.compile.pass.cpp index 4e78fa1..3dc2da8 100644 --- a/libcxx/test/libcxx/type_traits/is_always_bitcastable.compile.pass.cpp +++ b/libcxx/test/libcxx/type_traits/is_always_bitcastable.compile.pass.cpp @@ -52,8 +52,8 @@ constexpr void check_with_cv() { template constexpr void check() { - meta::for_each(Types1{}, []() { - meta::for_each(Types2{}, []() { + types::for_each(Types1{}, []() { + types::for_each(Types2{}, []() { check_with_cv(); }); }); @@ -71,91 +71,91 @@ constexpr void test() { // Bit-castable arithmetic types. // 8-bit types. - using integral_8 = meta::type_list; - using chars = meta::type_list; + using integral_8 = types::type_list; + using chars = types::type_list; #if CHAR_BIT == 8 - check>(); + check>(); #else check(); check(); #endif // 16-bit types. - using integral_16 = meta::type_list; + using integral_16 = types::type_list; #if !defined(TEST_HAS_NO_WIDE_CHARACTERS) && __WCHAR_WIDTH__ == 16 - check>>(); + check>>(); #else check(); #endif // 32-bit types. - using integral_32 = meta::type_list; + using integral_32 = types::type_list; #if !defined(TEST_HAS_NO_WIDE_CHARACTERS) && __WCHAR_WIDTH__ == 32 - check>>(); + check>>(); #else check(); #endif // 64-bit types. - using integral_64 = meta::type_list; + using integral_64 = types::type_list; check(); // 128-bit types. #ifndef TEST_HAS_NO_INT128 - check>(); + check>(); #endif // Bool. - check, meta::concatenate_t, integral_8>>(); + check, types::concatenate_t, integral_8>>(); // Non-bit-castable arithmetic types. // Floating-point. - check_both_ways(); - check_both_ways, meta::type_list>(); - check_both_ways, meta::type_list>(); - check_both_ways, meta::type_list>(); + check_both_ways(); + check_both_ways, types::type_list>(); + check_both_ways, types::type_list>(); + check_both_ways, types::type_list>(); // Different sizes. - check_both_ways>(); - check_both_ways>(); - check_both_ways>(); - check_both_ways>(); + check_both_ways>(); + check_both_ways>(); + check_both_ways>(); + check_both_ways>(); // Different representations -- can convert from bool to other integral types, but not vice versa. - check, integral_8>(); - using larger_than_bool = meta::concatenate_t< + check, integral_8>(); + using larger_than_bool = types::concatenate_t< integral_16, integral_32, integral_64, - meta::floating_point_types>; - check, larger_than_bool>(); - check, meta::type_list>(); + types::floating_point_types>; + check, larger_than_bool>(); + check, types::type_list>(); // Different representations -- floating point vs. integral. - check_both_ways(); + check_both_ways(); } // Enumerations. { enum E1 { Value1 }; enum E2 { Value2 }; - check>(); - check_both_ways, meta::type_list>(); + check>(); + check_both_ways, types::type_list>(); enum class ScopedE1 { Value1 }; enum class ScopedE2 { Value1 }; - check>(); - check_both_ways, meta::type_list>(); + check>(); + check_both_ways, types::type_list>(); } // Pointers. { - check>(); - check_both_ways, meta::type_list>(); + check>(); + check_both_ways, types::type_list>(); - check>(); - check_both_ways, meta::type_list>(); + check>(); + check_both_ways, types::type_list>(); } // Pointers to members. @@ -171,49 +171,49 @@ constexpr void test() { using MemFuncPtr1 = decltype(&S::MemFunc1); using MemFuncPtr2 = decltype(&S::MemFunc2); - check>(); - check>(); - check_both_ways, meta::type_list>(); - check_both_ways, meta::type_list>(); + check>(); + check>(); + check_both_ways, types::type_list>(); + check_both_ways, types::type_list>(); } // Trivial classes. { struct S1 {}; - check>(); + check>(); struct S2 {}; - check_both_ways, meta::type_list>(); + check_both_ways, types::type_list>(); // Having a `volatile` member doesn't prevent a class type from being considered trivially copyable. This is // unfortunate behavior but it is consistent with the Standard. struct VolatileMembersS { volatile int x; }; - check>(); + check>(); } // Trivial unions. { union U1 {}; - check>(); + check>(); union U2 {}; - check_both_ways, meta::type_list>(); + check_both_ways, types::type_list>(); union VolatileMembersU { volatile int x; }; - check>(); + check>(); } // References are not objects, and thus are not bit-castable. { - check_both_ways, meta::type_list>(); + check_both_ways, types::type_list>(); } // Arrays. { - check>(); + check>(); } } diff --git a/libcxx/test/std/algorithms/alg.modifying.operations/alg.copy/ranges.copy.pass.cpp b/libcxx/test/std/algorithms/alg.modifying.operations/alg.copy/ranges.copy.pass.cpp index 7a5c0a7..bc9c278 100644 --- a/libcxx/test/std/algorithms/alg.modifying.operations/alg.copy/ranges.copy.pass.cpp +++ b/libcxx/test/std/algorithms/alg.modifying.operations/alg.copy/ranges.copy.pass.cpp @@ -100,13 +100,13 @@ constexpr void test_iterators() { // clang-format on constexpr bool test() { - meta::for_each(meta::forward_iterator_list{}, []() { + types::for_each(types::forward_iterator_list{}, []() { test_iterators, Out, sentinel_wrapper>>(); test_iterators>, ProxyIterator, sentinel_wrapper>>>(); - meta::for_each(meta::forward_iterator_list{}, []() { + types::for_each(types::forward_iterator_list{}, []() { test_iterators(); test_iterators>(); test_iterators>(); diff --git a/libcxx/test/std/algorithms/alg.modifying.operations/alg.copy/ranges.copy.segmented.pass.cpp b/libcxx/test/std/algorithms/alg.modifying.operations/alg.copy/ranges.copy.segmented.pass.cpp index cf1f926..9291c0a 100644 --- a/libcxx/test/std/algorithms/alg.modifying.operations/alg.copy/ranges.copy.segmented.pass.cpp +++ b/libcxx/test/std/algorithms/alg.modifying.operations/alg.copy/ranges.copy.segmented.pass.cpp @@ -100,7 +100,7 @@ int main(int, char**) { test_containers, std::vector>(); } - meta::for_each(meta::forward_iterator_list{}, [] { + types::for_each(types::forward_iterator_list{}, [] { test_join_view(); test_join_view>(); test_join_view>(); diff --git a/libcxx/test/std/algorithms/alg.nonmodifying/alg.equal/equal.pass.cpp b/libcxx/test/std/algorithms/alg.nonmodifying/alg.equal/equal.pass.cpp index c182feb..e40f1ed 100644 --- a/libcxx/test/std/algorithms/alg.nonmodifying/alg.equal/equal.pass.cpp +++ b/libcxx/test/std/algorithms/alg.nonmodifying/alg.equal/equal.pass.cpp @@ -79,7 +79,7 @@ template struct TestIter2 { template TEST_CONSTEXPR_CXX20 void operator()() { - meta::for_each(TypeList(), Test()); + types::for_each(TypeList(), Test()); } }; @@ -99,12 +99,12 @@ struct AddressCompare { }; TEST_CONSTEXPR_CXX20 bool test() { - meta::for_each(meta::cpp17_input_iterator_list(), TestIter2 >()); - meta::for_each(meta::cpp17_input_iterator_list(), TestIter2 >()); - meta::for_each(meta::cpp17_input_iterator_list(), - TestIter2 >()); + types::for_each(types::cpp17_input_iterator_list(), TestIter2 >()); + types::for_each(types::cpp17_input_iterator_list(), TestIter2 >()); + types::for_each(types::cpp17_input_iterator_list(), + TestIter2 >()); - meta::for_each(meta::integral_types(), TestNarrowingEqualTo()); + types::for_each(types::integral_types(), TestNarrowingEqualTo()); return true; } @@ -118,10 +118,10 @@ int main(int, char**) { static_assert(test()); #endif - meta::for_each(meta::as_pointers >(), - TestIter2 > >()); - meta::for_each(meta::as_pointers >(), - TestIter2 > >()); + types::for_each(types::as_pointers >(), + TestIter2 > >()); + types::for_each(types::as_pointers >(), + TestIter2 > >()); { Derived d; diff --git a/libcxx/test/std/depr/depr.c.headers/math_h.pass.cpp b/libcxx/test/std/depr/depr.c.headers/math_h.pass.cpp index db815f9..8ce3b08 100644 --- a/libcxx/test/std/depr/depr.c.headers/math_h.pass.cpp +++ b/libcxx/test/std/depr/depr.c.headers/math_h.pass.cpp @@ -947,53 +947,53 @@ struct test_three_args { }; struct CallTwoArgs { - using integral_float_double = meta::concatenate_t >; + using integral_float_double = types::concatenate_t >; template void operator()() { - meta::for_each(integral_float_double(), test_two_args()); + types::for_each(integral_float_double(), test_two_args()); } }; template struct CallThreeArgs { - using integral_float_double = meta::concatenate_t >; + using integral_float_double = types::concatenate_t >; template struct Helper { template void operator()() { - meta::for_each(integral_float_double(), test_three_args()); + types::for_each(integral_float_double(), test_three_args()); } }; template void operator()() { - meta::for_each(integral_float_double(), Helper()); + types::for_each(integral_float_double(), Helper()); } }; int main(int, char**) { - meta::for_each(meta::integral_types(), test_single_arg()); + types::for_each(types::integral_types(), test_single_arg()); test_single_arg(); test_single_arg(); test_single_arg(); - meta::for_each(meta::integral_types(), CallTwoArgs()); + types::for_each(types::integral_types(), CallTwoArgs()); - meta::for_each( - meta::integral_types(), test_two_args()); + types::for_each( + types::integral_types(), test_two_args()); test_two_args(); test_two_args(); test_two_args(); test_two_args(); - meta::for_each(meta::integral_types(), CallThreeArgs()); - meta::for_each( - meta::integral_types(), test_three_args()); + types::for_each(types::integral_types(), CallThreeArgs()); + types::for_each( + types::integral_types(), test_three_args()); test_three_args(); test_three_args(); diff --git a/libcxx/test/std/language.support/support.limits/limits/is_specialized.pass.cpp b/libcxx/test/std/language.support/support.limits/limits/is_specialized.pass.cpp index 0c39f9f..f27c731 100644 --- a/libcxx/test/std/language.support/support.limits/limits/is_specialized.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/limits/is_specialized.pass.cpp @@ -44,7 +44,7 @@ struct Test { int main(int, char**) { - meta::for_each(meta::arithmetic_types(), Test()); + types::for_each(types::arithmetic_types(), Test()); static_assert(!std::numeric_limits >::is_specialized, "!std::numeric_limits >::is_specialized"); diff --git a/libcxx/test/std/numerics/c.math/isfinite.pass.cpp b/libcxx/test/std/numerics/c.math/isfinite.pass.cpp index fd2ad11..6bbc3aa 100644 --- a/libcxx/test/std/numerics/c.math/isfinite.pass.cpp +++ b/libcxx/test/std/numerics/c.math/isfinite.pass.cpp @@ -63,8 +63,8 @@ struct TestInt { }; int main(int, char**) { - meta::for_each(meta::floating_point_types(), TestFloat()); - meta::for_each(meta::integral_types(), TestInt()); + types::for_each(types::floating_point_types(), TestFloat()); + types::for_each(types::integral_types(), TestInt()); return 0; } diff --git a/libcxx/test/std/numerics/c.math/isinf.pass.cpp b/libcxx/test/std/numerics/c.math/isinf.pass.cpp index 3b1e54f..e935b53 100644 --- a/libcxx/test/std/numerics/c.math/isinf.pass.cpp +++ b/libcxx/test/std/numerics/c.math/isinf.pass.cpp @@ -63,8 +63,8 @@ struct TestInt { }; int main(int, char**) { - meta::for_each(meta::floating_point_types(), TestFloat()); - meta::for_each(meta::integral_types(), TestInt()); + types::for_each(types::floating_point_types(), TestFloat()); + types::for_each(types::integral_types(), TestInt()); return 0; } diff --git a/libcxx/test/std/numerics/c.math/isnan.pass.cpp b/libcxx/test/std/numerics/c.math/isnan.pass.cpp index c8ac055..fffb124 100644 --- a/libcxx/test/std/numerics/c.math/isnan.pass.cpp +++ b/libcxx/test/std/numerics/c.math/isnan.pass.cpp @@ -63,8 +63,8 @@ struct TestInt { }; int main(int, char**) { - meta::for_each(meta::floating_point_types(), TestFloat()); - meta::for_each(meta::integral_types(), TestInt()); + types::for_each(types::floating_point_types(), TestFloat()); + types::for_each(types::integral_types(), TestInt()); return 0; } diff --git a/libcxx/test/std/numerics/c.math/isnormal.pass.cpp b/libcxx/test/std/numerics/c.math/isnormal.pass.cpp index 681438e..c3b8f31 100644 --- a/libcxx/test/std/numerics/c.math/isnormal.pass.cpp +++ b/libcxx/test/std/numerics/c.math/isnormal.pass.cpp @@ -63,8 +63,8 @@ struct TestInt { }; int main(int, char**) { - meta::for_each(meta::floating_point_types(), TestFloat()); - meta::for_each(meta::integral_types(), TestInt()); + types::for_each(types::floating_point_types(), TestFloat()); + types::for_each(types::integral_types(), TestInt()); return 0; } diff --git a/libcxx/test/std/ranges/range.adaptors/range.as.rvalue/begin.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.as.rvalue/begin.pass.cpp index 684cdd8..db846b2 100644 --- a/libcxx/test/std/ranges/range.adaptors/range.as.rvalue/begin.pass.cpp +++ b/libcxx/test/std/ranges/range.adaptors/range.as.rvalue/begin.pass.cpp @@ -84,14 +84,14 @@ struct move_iterator_view : std::ranges::view_base { }; constexpr bool test() { - meta::for_each(meta::cpp20_input_iterator_list{}, [] { + types::for_each(types::cpp20_input_iterator_list{}, [] { if constexpr (std::sentinel_for) test_range(); test_range>(); test_range>(); }); - meta::for_each(meta::forward_iterator_list{}, [] { + types::for_each(types::forward_iterator_list{}, [] { test_const_range(); test_const_range>(); test_const_range>(); diff --git a/libcxx/test/std/ranges/range.adaptors/range.as.rvalue/end.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.as.rvalue/end.pass.cpp index eb79e14..529a609 100644 --- a/libcxx/test/std/ranges/range.adaptors/range.as.rvalue/end.pass.cpp +++ b/libcxx/test/std/ranges/range.adaptors/range.as.rvalue/end.pass.cpp @@ -118,7 +118,7 @@ constexpr bool test() { test_range, sentinel_wrapper>, false>(); test_range, sized_sentinel>, false>(); - meta::for_each(meta::forward_iterator_list{}, [] { + types::for_each(types::forward_iterator_list{}, [] { test_range(); test_range, false>(); test_range, false>(); diff --git a/libcxx/test/std/ranges/range.adaptors/range.filter/iterator/arrow.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.filter/iterator/arrow.pass.cpp index b9b1a4e..71d16e4 100644 --- a/libcxx/test/std/ranges/range.adaptors/range.filter/iterator/arrow.pass.cpp +++ b/libcxx/test/std/ranges/range.adaptors/range.filter/iterator/arrow.pass.cpp @@ -25,7 +25,7 @@ #include "test_macros.h" #include "../types.h" -struct Point { +struct XYPoint { int x; int y; }; @@ -34,21 +34,21 @@ template concept has_arrow = requires (T t) { { t->x }; }; -static_assert(has_arrow); // test the test +static_assert(has_arrow); // test the test struct WithArrowOperator { using iterator_category = std::input_iterator_tag; using difference_type = std::ptrdiff_t; - using value_type = Point; + using value_type = XYPoint; - constexpr explicit WithArrowOperator(Point* p) : p_(p) { } - constexpr Point& operator*() const { return *p_; } - constexpr Point* operator->() const { return p_; } // has arrow + constexpr explicit WithArrowOperator(XYPoint* p) : p_(p) { } + constexpr XYPoint& operator*() const { return *p_; } + constexpr XYPoint* operator->() const { return p_; } // has arrow constexpr WithArrowOperator& operator++() { ++p_; return *this; } constexpr WithArrowOperator operator++(int) { return WithArrowOperator(p_++); } - friend constexpr Point* base(WithArrowOperator const& i) { return i.p_; } - Point* p_; + friend constexpr XYPoint* base(WithArrowOperator const& i) { return i.p_; } + XYPoint* p_; }; static_assert(std::input_iterator); @@ -56,29 +56,29 @@ struct WithNonCopyableIterator : std::ranges::view_base { struct iterator { using iterator_category = std::input_iterator_tag; using difference_type = std::ptrdiff_t; - using value_type = Point; + using value_type = XYPoint; iterator(iterator const&) = delete; // not copyable iterator(iterator&&); iterator& operator=(iterator&&); - Point& operator*() const; + XYPoint& operator*() const; iterator operator->() const; iterator& operator++(); iterator operator++(int); - // We need this to use Point* as a sentinel type below. sentinel_wrapper + // We need this to use XYPoint* as a sentinel type below. sentinel_wrapper // can't be used because this iterator is not copyable. - friend bool operator==(iterator const&, Point*); + friend bool operator==(iterator const&, XYPoint*); }; iterator begin() const; - Point* end() const; + XYPoint* end() const; }; static_assert(std::ranges::input_range); template > constexpr void test() { - std::array array{{{0, 0}, {1, 1}, {2, 2}, {3, 3}, {4, 4}}}; + std::array array{{{0, 0}, {1, 1}, {2, 2}, {3, 3}, {4, 4}}}; using View = minimal_view; using FilterView = std::ranges::filter_view; using FilterIterator = std::ranges::iterator_t; @@ -100,10 +100,10 @@ constexpr void test() { constexpr bool tests() { test(); - test(); - test(); - test>(); - test>(); + test(); + test(); + test>(); + test>(); // Make sure filter_view::iterator doesn't have operator-> if the // underlying iterator doesn't have one. @@ -114,11 +114,11 @@ constexpr bool tests() { using FilterIterator = std::ranges::iterator_t; static_assert(!has_arrow); }; - check_no_arrow.operator()>(); - check_no_arrow.operator()>(); - check_no_arrow.operator()>(); - check_no_arrow.operator()>(); - check_no_arrow.operator()>(); + check_no_arrow.operator()>(); + check_no_arrow.operator()>(); + check_no_arrow.operator()>(); + check_no_arrow.operator()>(); + check_no_arrow.operator()>(); check_no_arrow.operator()(); } diff --git a/libcxx/test/std/strings/basic.string/string.access/at.pass.cpp b/libcxx/test/std/strings/basic.string/string.access/at.pass.cpp index 3e17d07..9530950 100644 --- a/libcxx/test/std/strings/basic.string/string.access/at.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.access/at.pass.cpp @@ -76,7 +76,7 @@ struct TestCaller { }; TEST_CONSTEXPR_CXX20 bool test() { - meta::for_each(meta::character_types(), TestCaller()); + types::for_each(types::character_types(), TestCaller()); return true; } diff --git a/libcxx/test/support/test.support/type_algorithms.pass.cpp b/libcxx/test/support/test.support/type_algorithms.pass.cpp index f94487d..cf6144d 100644 --- a/libcxx/test/support/test.support/type_algorithms.pass.cpp +++ b/libcxx/test/support/test.support/type_algorithms.pass.cpp @@ -14,14 +14,14 @@ #include "type_algorithms.h" // concatenate -static_assert(std::is_same >, meta::type_list<> >::value, ""); -static_assert(std::is_same >, meta::type_list >::value, ""); +static_assert(std::is_same >, types::type_list<> >::value, ""); +static_assert(std::is_same >, types::type_list >::value, ""); static_assert( - std::is_same, meta::type_list >, meta::type_list >::value, + std::is_same, types::type_list >, types::type_list >::value, ""); static_assert( - std::is_same, meta::type_list, meta::type_list >, - meta::type_list >::value, + std::is_same, types::type_list, types::type_list >, + types::type_list >::value, ""); // apply_all @@ -57,7 +57,7 @@ struct Identity { TEST_CONSTEXPR_CXX20 void test_for_each() { bool is_called_array[3] = {}; - meta::for_each(meta::type_list, NumT<1>, NumT<2> >(), ApplyAllTest(is_called_array)); + types::for_each(types::type_list, NumT<1>, NumT<2> >(), ApplyAllTest(is_called_array)); assert(std::all_of(is_called_array, is_called_array + 3, Identity())); } diff --git a/libcxx/test/support/test_iterators.h b/libcxx/test/support/test_iterators.h index ab64619..b036874 100644 --- a/libcxx/test/support/test_iterators.h +++ b/libcxx/test/support/test_iterators.h @@ -1420,7 +1420,7 @@ ProxyRange(R&&) -> ProxyRange>; #endif // TEST_STD_VER > 17 -namespace meta { +namespace types { template using random_access_iterator_list = type_list using cpp20_input_iterator_list = concatenate_t, type_list, cpp17_input_iterator>>; #endif -} // namespace meta +} // namespace types #endif // SUPPORT_TEST_ITERATORS_H diff --git a/libcxx/test/support/type_algorithms.h b/libcxx/test/support/type_algorithms.h index a066e54..95a282b 100644 --- a/libcxx/test/support/type_algorithms.h +++ b/libcxx/test/support/type_algorithms.h @@ -13,7 +13,7 @@ #include "test_macros.h" -namespace meta { +namespace types { template struct type_list {}; @@ -114,6 +114,6 @@ struct type_list_as_pointers > { template using as_pointers = typename type_list_as_pointers::type; -} // namespace meta +} // namespace types #endif // TEST_SUPPORT_TYPE_ALGORITHMS_H diff --git a/libcxx/utils/ci/buildkite-pipeline.yml b/libcxx/utils/ci/buildkite-pipeline.yml index f4ff83a..e80c536 100644 --- a/libcxx/utils/ci/buildkite-pipeline.yml +++ b/libcxx/utils/ci/buildkite-pipeline.yml @@ -812,6 +812,20 @@ steps: limit: 2 timeout_in_minutes: 120 + - label: "MacOS with Modules" + command: "libcxx/utils/ci/run-buildbot generic-modules" + artifact_paths: + - "**/test-results.xml" + - "**/*.abilist" + agents: + queue: "libcxx-builders" + os: "macos" + retry: + automatic: + - exit_status: -1 # Agent was lost + limit: 2 + timeout_in_minutes: 120 + # Build with the configuration we use to generate libc++.dylib on Apple platforms - label: "Apple system" command: "libcxx/utils/ci/run-buildbot apple-system" -- 2.7.4