On 4/21/25 6:22 AM, Nathaniel Shead wrote:
This call is not necessary, as we don't access the bodies of any classes
that we instantiate here.
This turns out to break
20_util/function_objects/mem_fn/constexpr.cc
std/ranges/view.cc
when modified to use import std (as attached). For the former, I see
In file included from
/home/jason/s/gcc/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/stdc++.h:55,
from
/home/jason/s/gcc/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/std.cc:30,
of module std, imported at
/home/jason/gt/libstdc++-v3/testsuite/20_util/function_objects/mem_fn/constexpr.cc:21:
/home/jason/s/gcc/x86_64-pc-linux-gnu/libstdc++-v3/include/functional: In
instantiation of ‘class std::_Mem_fn_base<int F::*, false>’:
/home/jason/s/gcc/x86_64-pc-linux-gnu/libstdc++-v3/include/functional:211:12:
required from ‘struct std::_Mem_fn<int F::*>’
211 | struct _Mem_fn<_Res _Class::*>
| ^~~~~~~~~~~~~~~~~~~~~~~
/home/jason/gt/libstdc++-v3/testsuite/20_util/function_objects/mem_fn/constexpr.cc:36:21:
required from here
36 | return std::mem_fn(&F::i)(f);
| ~~~~~~~~~~~^~~~~~~
/home/jason/s/gcc/x86_64-pc-linux-gnu/libstdc++-v3/include/functional:190:23: error:
conflicting declaration of template ‘template<class _Func, class ...
_BoundArgs> struct std::_Bind_check_arity’
190 | friend struct _Bind_check_arity;
| ^~~~~~~~~~~~~~~~~
/home/jason/s/gcc/x86_64-pc-linux-gnu/libstdc++-v3/include/functional:834:12: note:
previous declaration ‘template<class _Func, class ... _BoundArgs> struct
std::_Bind_check_arity’
834 | struct _Bind_check_arity { };
| ^~~~~~~~~~~~~~~~~
lookup_imported_hidden_friend is failing without the lazy_load_pendings,
so we try and fail to push the instantiation. Reverting this patch
makes them pass.
Jason
diff --git a/libstdc++-v3/testsuite/20_util/function_objects/mem_fn/constexpr.cc b/libstdc++-v3/testsuite/20_util/function_objects/mem_fn/constexpr.cc
index dd1dcc9947a..59568d630c4 100644
--- a/libstdc++-v3/testsuite/20_util/function_objects/mem_fn/constexpr.cc
+++ b/libstdc++-v3/testsuite/20_util/function_objects/mem_fn/constexpr.cc
@@ -17,7 +17,11 @@
// { dg-do compile { target c++20 } }
+#if __cpp_modules
+import std;
+#else
#include <functional>
+#endif
struct F
{
diff --git a/libstdc++-v3/testsuite/std/ranges/view.cc b/libstdc++-v3/testsuite/std/ranges/view.cc
index 57cd6503f0c..52ea0e2e0ac 100644
--- a/libstdc++-v3/testsuite/std/ranges/view.cc
+++ b/libstdc++-v3/testsuite/std/ranges/view.cc
@@ -17,6 +17,10 @@
// { dg-do compile { target c++20 } }
+#include <testsuite_iterators.h>
+#if __cpp_modules
+import std;
+#else
#include <ranges>
#include <span>
#include <string_view>
@@ -26,13 +30,15 @@
#include <set>
#include <unordered_set>
#include <regex>
-#include <testsuite_iterators.h>
+#endif
static_assert(std::ranges::view<std::span<int>>);
static_assert(std::ranges::view<std::span<int, 0>>);
static_assert(std::ranges::view<std::span<int, 1>>); // Changed with P2325R3
static_assert(std::ranges::view<std::string_view>);
+#ifndef __cpp_modules
static_assert(std::ranges::view<std::experimental::string_view>);
+#endif
static_assert(!std::ranges::view<std::vector<int>>);
static_assert(!std::ranges::view<const std::vector<int>>);