diff options
author | Ilya Biryukov <ibiryukov@google.com> | 2017-12-21 14:04:39 +0000 |
---|---|---|
committer | Ilya Biryukov <ibiryukov@google.com> | 2017-12-21 14:04:39 +0000 |
commit | 923e3388be27c5552f0000b13b19e7552ef7de04 (patch) | |
tree | 718c3861b83b5494dbd15ae89766dae98899c202 /clang/lib/Frontend | |
parent | f8d22f9db8b5ce50e8deec8e94c7547a4a6b9cbc (diff) | |
download | bcm5719-llvm-923e3388be27c5552f0000b13b19e7552ef7de04.tar.gz bcm5719-llvm-923e3388be27c5552f0000b13b19e7552ef7de04.zip |
Added helper to get size of PrecompiledPreamble
llvm-svn: 321266
Diffstat (limited to 'clang/lib/Frontend')
-rw-r--r-- | clang/lib/Frontend/PrecompiledPreamble.cpp | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/clang/lib/Frontend/PrecompiledPreamble.cpp b/clang/lib/Frontend/PrecompiledPreamble.cpp index f933ba6cec0..7e1323fd83b 100644 --- a/clang/lib/Frontend/PrecompiledPreamble.cpp +++ b/clang/lib/Frontend/PrecompiledPreamble.cpp @@ -30,7 +30,7 @@ #include "llvm/Support/Mutex.h" #include "llvm/Support/MutexGuard.h" #include "llvm/Support/Process.h" - +#include <limits> #include <utility> using namespace clang; @@ -381,6 +381,27 @@ PreambleBounds PrecompiledPreamble::getBounds() const { return PreambleBounds(PreambleBytes.size(), PreambleEndsAtStartOfLine); } +std::size_t PrecompiledPreamble::getSize() const { + switch (Storage.getKind()) { + case PCHStorage::Kind::Empty: + assert(false && "Calling getSize() on invalid PrecompiledPreamble. " + "Was it std::moved?"); + return 0; + case PCHStorage::Kind::InMemory: + return Storage.asMemory().Data.size(); + case PCHStorage::Kind::TempFile: { + uint64_t Result; + if (llvm::sys::fs::file_size(Storage.asFile().getFilePath(), Result)) + return 0; + + assert(Result <= std::numeric_limits<std::size_t>::max() && + "file size did not fit into size_t"); + return Result; + } + } + llvm_unreachable("Unhandled storage kind"); +} + bool PrecompiledPreamble::CanReuse(const CompilerInvocation &Invocation, const llvm::MemoryBuffer *MainFileBuffer, PreambleBounds Bounds, @@ -506,8 +527,8 @@ PrecompiledPreamble::TempPCHFile::createInSystemTempDir(const Twine &Prefix, StringRef Suffix) { llvm::SmallString<64> File; // Using a version of createTemporaryFile with a file descriptor guarantees - // that we would never get a race condition in a multi-threaded setting (i.e., - // multiple threads getting the same temporary path). + // that we would never get a race condition in a multi-threaded setting + // (i.e., multiple threads getting the same temporary path). int FD; auto EC = llvm::sys::fs::createTemporaryFile(Prefix, Suffix, FD, File); if (EC) |