These tests rely on inlining, so if -fno-inline is added to the compiler flags the tests fail. Use the predefined __NO_INLINE__ macro to detect that situation, and don't bother testing the move assignment.
* testsuite/21_strings/basic_string/modifiers/assign/char/ move_assign_optim.cc: Avoid spurious failure when -fno-inline added to test flags. * testsuite/21_strings/basic_string/modifiers/assign/wchar_t/ move_assign_optim.cc: Likewise. Tested x86_64-linux, committed to trunk.
commit 6b4a77f22e8d63755453bdae3ce1854fae2d2484 Author: redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Fri Jan 4 11:06:49 2019 +0000 Avoid spurious test failures when -fno-inline in test flags These tests rely on inlining, so if -fno-inline is added to the compiler flags the tests fail. Use the predefined __NO_INLINE__ macro to detect that situation, and don't bother testing the move assignment. * testsuite/21_strings/basic_string/modifiers/assign/char/ move_assign_optim.cc: Avoid spurious failure when -fno-inline added to test flags. * testsuite/21_strings/basic_string/modifiers/assign/wchar_t/ move_assign_optim.cc: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@267573 138bc75d-0d04-0410-961f-82ee72b054a4 diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/move_assign_optim.cc b/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/move_assign_optim.cc index 6ac54b509df..bbe60e578ca 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/move_assign_optim.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/move_assign_optim.cc @@ -30,6 +30,8 @@ test01(std::string& target, std::string&& source) // The move assignment operator should be simple enough that the compiler // can see that it never results in a length_error or bad_alloc exception // (which would be turned into std::terminate by the noexcept on the - // assignment operator). + // assignment operator). This is only true when inlining though. +#ifndef __NO_INLINE__ target = std::move(source); +#endif } diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/move_assign_optim.cc b/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/move_assign_optim.cc index 261c6641043..15f3a4bcbe1 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/move_assign_optim.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/move_assign_optim.cc @@ -30,6 +30,8 @@ test01(std::wstring& target, std::wstring&& source) // The move assignment operator should be simple enough that the compiler // can see that it never results in a length_error or bad_alloc exception // (which would be turned into std::terminate by the noexcept on the - // assignment operator). + // assignment operator). This is only true when inlining though. +#ifndef __NO_INLINE__ target = std::move(source); +#endif }