This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On 09/01/17 10:47 +0000, Jonathan Wakely wrote:
On 09/01/17 10:39 +0000, Kyrill Tkachov wrote:Hi Jonathan, On 06/01/17 12:40, Jonathan Wakely wrote:This solves a problem when using libstdc++ with Clang, due to Clang more eagerly instantiating constexpr function templates during argument deduction. G++ has some shortcuts to avoid this problem, but Clang doesn't, and it's not clear that it's strictly speaking a bug in Clang or if it's following the standard. By making these constructors explicit we stop them being considered by overload resolution for copying these functors, which stops us ending up back in the std::function SFINAE checks. I'm also using _GLIBCXX_MOVE to turn some internal copies into moves, because otherwise using something like std::function with <algorithm> results in a number of potentially expensive copies. PR libstdc++/78991 * include/bits/predefined_ops.h (_Iter_comp_iter, _Iter_comp_val) (_Val_comp_iter, _Iter_equals_val, _Iter_pred, _Iter_comp_to_val) (_Iter_comp_to_iter, _Iter_negate): Make constructors explicit and move function objects. (__iter_comp_iter, __iter_comp_val, __val_comp_iter, __pred_iter) (__iter_comp_val, __iter_comp_iter, __negate): Move function objects. * testsuite/25_algorithms/sort/78991.cc: New test. Tested powerpc64le-linux, committed to trunk. I'll backport the 'explicit' constructors (but not the _GLIBCXX_MOVE changes) to the branches too.I see this test fail on the GCC 5 branch on arm and aarch64 (error message pasted below). Does the test need a gnu++11 guard or something on the branch?I thought I'd changed that before committing, I'll fix it.
Committed to gcc-5-branch.
commit 366c9e60ffa0536ab87de4e70ec807c2eb5fb66b Author: Jonathan Wakely <jwakely@redhat.com> Date: Mon Jan 9 10:54:44 2017 +0000 Add missing dg-options to C++14 test * testsuite/25_algorithms/sort/78991.cc: Compile with -std=gnu++14. diff --git a/libstdc++-v3/testsuite/25_algorithms/sort/78991.cc b/libstdc++-v3/testsuite/25_algorithms/sort/78991.cc index d947538..260878e 100644 --- a/libstdc++-v3/testsuite/25_algorithms/sort/78991.cc +++ b/libstdc++-v3/testsuite/25_algorithms/sort/78991.cc @@ -15,6 +15,7 @@ // with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. +// { dg-options "-std=gnu++14" } // { dg-do compile } // PR 78991
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |