[PATCH] D92012: [clangd][query-driver] Extract target
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Nov 26 03:48:57 PST 2020
sammccall accepted this revision.
sammccall added a comment.
Still LG, thanks!
================
Comment at: clang-tools-extra/clangd/QueryDriverDatabase.cpp:344
+ }
+ return Cmd;
}
----------------
kadircet wrote:
> kadircet wrote:
> > ofc we don't need it. but the thing is we are returning an `Optional<tooling::Command>` hence the return statement needs to invoke a constructor for `Optional` and without `std::move` it would invoke a copy constructor rather than a move-based one.
> >
> > And even though rest of the calculations are cached per driver&language name, this copy is going to happen for every translation unit. So in theory it would be nice to prevent that.
> oh actually never mind, `Cmd` itself is also an `Optional<tooling::Command>`, i thought it was a naked `tooling::Command`
It's moot here, but this isn't the case anymore, `return x` can call a converting move constructor: http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1579
This is part of C++14, and so we should be able to rely on it in LLVM. It wasn't true in the original C++11 spec, but since it was a defect report, reasonably-modern compilers allow the optimization even in C++11 mode.
Buggy compilers certainly exist, but I don't think we need to work around them for small performance issues. (If the code fails to compile on old-gcc without std::move, that's another story...)
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D92012/new/
https://reviews.llvm.org/D92012
More information about the cfe-commits
mailing list