arphaman marked an inline comment as done.
arphaman added inline comments.

================
Comment at: 
clang/lib/Tooling/DependencyScanning/DependencyScanningFilesystem.cpp:76
+CachedFileSystemEntry
+CachedFileSystemEntry::createDirectoryEntry(llvm::vfs::Status Stat) {
+  assert(Stat.isDirectory() && "not a directory!");
----------------
aganea wrote:
> arphaman wrote:
> > aganea wrote:
> > > `llvm::vfs::Status &&Stat` to avoid a copy?
> > The copy should already be avoided, as I move the argument when passing in, 
> > and when it's assigned to the result.
> If `Stat` is not a rvalue reference, wouldn't the `std::move` in the call 
> site end up as a copy? See [[ https://godbolt.org/z/Rr7cdM | this ]]. If you 
> change `int test(A a)` to `int test(A &&a)` you can see the difference in the 
> asm output. However if the function is inlined, the extra copy will probably 
> be optimized out. Not a big deal - the OS calls like stat() will most likely 
> dominate here.
Isn't the difference in the output caused by the details of the calling 
convention (pass the structure on the stack by value)? The move constructor 
should still be called for the stat, it will not copy its members. We can 
optimize this though and pass by ref directly, I agree, so let me do that.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D63907/new/

https://reviews.llvm.org/D63907



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to