libstdc++: Move new functions to separate files [PR119110]

The new test functions I added in r15-7765-g3866ca796d5281 are causing
those tests to FAIL on Solaris and arm-thumb due to the linker
complaining about undefined functions.  The new test functions are not
called, so it shouldn't matter that they call undefined member
functions, but it does.

Move those functions to separate { dg-do compile } files so the linker
isn't used and won't complain.

libstdc++-v3/ChangeLog:

	PR libstdc++/119110
	* testsuite/25_algorithms/move/constrained.cc: Move test06
	function to ...
	* testsuite/25_algorithms/move/105609.cc: New test.
	* testsuite/25_algorithms/move_backward/constrained.cc: Move
	test04 function to ...
	* testsuite/25_algorithms/move_backward/105609.cc: New test.
This commit is contained in:
Jonathan Wakely 2025-03-03 13:36:54 +00:00 committed by Jonathan Wakely
parent 3c02d195bf
commit c21d5a3591
No known key found for this signature in database
4 changed files with 66 additions and 58 deletions

View File

@ -0,0 +1,33 @@
// { dg-do compile { target c++20 } }
// PR libstdc++/105609
// ranges::move should use ranges::iter_move instead of std::move
#include <algorithm>
namespace pr105609
{
struct I {
using value_type = int;
using difference_type = std::ptrdiff_t;
int operator*() const;
I& operator++();
I operator++(int);
I& operator--();
I operator--(int);
bool operator==(I) const;
friend int& iter_move(const I&);
};
}
void
test(pr105609::I i)
{
struct O {
O(int&) { }
O(int&&) = delete;
};
O* o = nullptr;
std::ranges::move(i, i, o);
}

View File

@ -204,35 +204,6 @@ test05()
VERIFY( ranges::equal(v, (int[]){1,2,3,0}) );
}
namespace pr105609
{
struct I {
using value_type = int;
using difference_type = std::ptrdiff_t;
int operator*() const;
I& operator++();
I operator++(int);
I& operator--();
I operator--(int);
bool operator==(I) const;
friend int& iter_move(const I&);
};
}
void
test06(pr105609::I i)
{
// PR libstdc++/105609
// ranges::move should use ranges::iter_move instead of std::move
struct O {
O(int&) { }
O(int&&) = delete;
};
O* o = nullptr;
std::ranges::move(i, i, o);
}
int
main()
{

View File

@ -0,0 +1,33 @@
// { dg-do compile { target c++20 } }
// PR libstdc++/105609
// ranges::move should use ranges::iter_move instead of std::move
#include <algorithm>
namespace pr105609
{
struct I {
using value_type = int;
using difference_type = std::ptrdiff_t;
int operator*() const;
I& operator++();
I operator++(int);
I& operator--();
I operator--(int);
bool operator==(I) const;
friend int& iter_move(const I&);
};
}
void
test(pr105609::I i)
{
struct O {
O(int&) { }
O(int&&) = delete;
};
O* o = nullptr;
std::ranges::move_backward(i, i, o);
}

View File

@ -160,35 +160,6 @@ test03()
return ok;
}
namespace pr105609
{
struct I {
using value_type = int;
using difference_type = std::ptrdiff_t;
int operator*() const;
I& operator++();
I operator++(int);
I& operator--();
I operator--(int);
bool operator==(I) const;
friend int& iter_move(const I&);
};
}
void
test04(pr105609::I i)
{
// PR libstdc++/105609
// ranges::move should use ranges::iter_move instead of std::move
struct O {
O(int&) { }
O(int&&) = delete;
};
O* o = nullptr;
std::ranges::move_backward(i, i, o);
}
int
main()
{