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>>);

Reply via email to