[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