llvm-project/libcxx
Dimitry Andric 251c629117 Fix warnings about pessimizing return moves for C++11 and higher
Summary:
Throughout the libc++ headers, there are a few instances where
_VSTD::move() is used to return a local variable.  Howard commented in
r189039 that these were there "for non-obvious reasons such as to help
things limp along in C++03 language mode".

However, when compiling these headers with warnings on, and in C++11 or
higher mode (like we do in FreeBSD), they cause the following complaints
about pessimizing moves:

    In file included from tests.cpp:26:
    In file included from tests.hpp:29:
    /usr/include/c++/v1/map:1368:12: error: moving a local object in a return statement prevents copy elision [-Werror,-Wpessimizing-move]
        return _VSTD::move(__h);  // explicitly moved for C++03
               ^
    /usr/include/c++/v1/__config:368:15: note: expanded from macro '_VSTD'
    #define _VSTD std::_LIBCPP_NAMESPACE
                  ^

Attempt to fix this by adding a _LIBCPP_EXPLICIT_MOVE() macro to
__config, which gets defined to _VSTD::move for pre-C++11, and to
nothing for C++11 and later.

I am not completely satisfied with the macro name (I also considered
_LIBCPP_COMPAT_MOVE and some other variants), so suggestions are
welcome. :)

Reviewers: mclow.lists, howard.hinnant, EricWF

Subscribers: arthur.j.odwyer, cfe-commits

Differential Revision: http://reviews.llvm.org/D11394

llvm-svn: 245421
2015-08-19 06:43:33 +00:00
..
cmake Fix CMake error whet llvm-config reports a non-existent source directory. 2015-08-12 06:36:19 +00:00
include Fix warnings about pessimizing return moves for C++11 and higher 2015-08-19 06:43:33 +00:00
lib Reapply working parts of CMake cleanup. 2015-07-30 22:30:34 +00:00
src Remove commented out TODOs. They defined unneeded methods. 2015-08-19 03:48:08 +00:00
test Use TestAtomic instead of std::atomic so the test can run in C++03 2015-08-19 05:00:36 +00:00
utils cleanup comments in sym_check 2015-03-27 06:04:37 +00:00
www Update some links so that they don't point at the (private) WG21 Wiki 2015-08-05 14:36:42 +00:00
.arcconfig Update Arcanist config to point to reviews.llvm.org 2014-06-10 18:29:36 +00:00
.gitignore [libc++] Refactor test components into modules. 2015-01-09 18:03:29 +00:00
CMakeLists.txt Update references to lists.llvm.org 2015-08-05 03:59:14 +00:00
CREDITS.TXT Add self to CREDITS.txt 2015-02-26 00:48:22 +00:00
LICENSE.TXT Update copyright year to 2015. 2015-03-12 20:13:11 +00:00
Makefile Revert "Fix installheaders target's permissions" 2014-12-16 05:28:07 +00:00
TODO.TXT Cleanup result_of tests and fix issues with the C++03 result_of. 2015-06-13 08:25:24 +00:00