diff options
| author | Dimitry Andric <dimitry@andric.com> | 2015-08-19 06:43:33 +0000 |
|---|---|---|
| committer | Dimitry Andric <dimitry@andric.com> | 2015-08-19 06:43:33 +0000 |
| commit | 251c6291170cf6c999655626a0e246c9f7117dab (patch) | |
| tree | 21b2ee81128f41388acf653dcdf341752db6a6f1 /llvm/tools/llvm-mcmarkup/llvm-mcmarkup.cpp | |
| parent | 1098e496e1bf32400ae59bfab135eeb70e930b41 (diff) | |
| download | bcm5719-llvm-251c6291170cf6c999655626a0e246c9f7117dab.tar.gz bcm5719-llvm-251c6291170cf6c999655626a0e246c9f7117dab.zip | |
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
Diffstat (limited to 'llvm/tools/llvm-mcmarkup/llvm-mcmarkup.cpp')
0 files changed, 0 insertions, 0 deletions

