hokein created this revision. hokein added a reviewer: ilya-biryukov. Empty preamble is valid for source file which doesn't have any preprocessor and #includes.
This patch makes clang treat an empty preamble as a normal preamble. Check: ninja check-clang A testcase is added in https://reviews.llvm.org/D50627. Repository: rC Clang https://reviews.llvm.org/D50628 Files: include/clang/Frontend/PrecompiledPreamble.h lib/Frontend/ASTUnit.cpp lib/Frontend/PrecompiledPreamble.cpp Index: lib/Frontend/PrecompiledPreamble.cpp =================================================================== --- lib/Frontend/PrecompiledPreamble.cpp +++ lib/Frontend/PrecompiledPreamble.cpp @@ -237,9 +237,6 @@ PreambleCallbacks &Callbacks) { assert(VFS && "VFS is null"); - if (!Bounds.Size) - return BuildPreambleError::PreambleIsEmpty; - auto PreambleInvocation = std::make_shared<CompilerInvocation>(Invocation); FrontendOptions &FrontendOpts = PreambleInvocation->getFrontendOpts(); PreprocessorOptions &PreprocessorOpts = @@ -423,9 +420,6 @@ PreprocessorOptions &PreprocessorOpts = PreambleInvocation->getPreprocessorOpts(); - if (!Bounds.Size) - return false; - // We've previously computed a preamble. Check whether we have the same // preamble now that we did before, and that there's enough space in // the main-file buffer within the precompiled preamble to fit the @@ -758,8 +752,6 @@ std::string BuildPreambleErrorCategory::message(int condition) const { switch (static_cast<BuildPreambleError>(condition)) { - case BuildPreambleError::PreambleIsEmpty: - return "Preamble is empty"; case BuildPreambleError::CouldntCreateTempFile: return "Could not create temporary file for PCH"; case BuildPreambleError::CouldntCreateTargetInfo: Index: lib/Frontend/ASTUnit.cpp =================================================================== --- lib/Frontend/ASTUnit.cpp +++ lib/Frontend/ASTUnit.cpp @@ -1363,7 +1363,6 @@ } else { switch (static_cast<BuildPreambleError>(NewPreamble.getError().value())) { case BuildPreambleError::CouldntCreateTempFile: - case BuildPreambleError::PreambleIsEmpty: // Try again next time. PreambleRebuildCounter = 1; return nullptr; Index: include/clang/Frontend/PrecompiledPreamble.h =================================================================== --- include/clang/Frontend/PrecompiledPreamble.h +++ include/clang/Frontend/PrecompiledPreamble.h @@ -286,8 +286,7 @@ }; enum class BuildPreambleError { - PreambleIsEmpty = 1, - CouldntCreateTempFile, + CouldntCreateTempFile = 1, CouldntCreateTargetInfo, BeginSourceFileFailed, CouldntEmitPCH
Index: lib/Frontend/PrecompiledPreamble.cpp =================================================================== --- lib/Frontend/PrecompiledPreamble.cpp +++ lib/Frontend/PrecompiledPreamble.cpp @@ -237,9 +237,6 @@ PreambleCallbacks &Callbacks) { assert(VFS && "VFS is null"); - if (!Bounds.Size) - return BuildPreambleError::PreambleIsEmpty; - auto PreambleInvocation = std::make_shared<CompilerInvocation>(Invocation); FrontendOptions &FrontendOpts = PreambleInvocation->getFrontendOpts(); PreprocessorOptions &PreprocessorOpts = @@ -423,9 +420,6 @@ PreprocessorOptions &PreprocessorOpts = PreambleInvocation->getPreprocessorOpts(); - if (!Bounds.Size) - return false; - // We've previously computed a preamble. Check whether we have the same // preamble now that we did before, and that there's enough space in // the main-file buffer within the precompiled preamble to fit the @@ -758,8 +752,6 @@ std::string BuildPreambleErrorCategory::message(int condition) const { switch (static_cast<BuildPreambleError>(condition)) { - case BuildPreambleError::PreambleIsEmpty: - return "Preamble is empty"; case BuildPreambleError::CouldntCreateTempFile: return "Could not create temporary file for PCH"; case BuildPreambleError::CouldntCreateTargetInfo: Index: lib/Frontend/ASTUnit.cpp =================================================================== --- lib/Frontend/ASTUnit.cpp +++ lib/Frontend/ASTUnit.cpp @@ -1363,7 +1363,6 @@ } else { switch (static_cast<BuildPreambleError>(NewPreamble.getError().value())) { case BuildPreambleError::CouldntCreateTempFile: - case BuildPreambleError::PreambleIsEmpty: // Try again next time. PreambleRebuildCounter = 1; return nullptr; Index: include/clang/Frontend/PrecompiledPreamble.h =================================================================== --- include/clang/Frontend/PrecompiledPreamble.h +++ include/clang/Frontend/PrecompiledPreamble.h @@ -286,8 +286,7 @@ }; enum class BuildPreambleError { - PreambleIsEmpty = 1, - CouldntCreateTempFile, + CouldntCreateTempFile = 1, CouldntCreateTargetInfo, BeginSourceFileFailed, CouldntEmitPCH
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits