Skip to content

Commit

Permalink
diagnosticMain: Rebuild preamble for bounds change
Browse files Browse the repository at this point in the history
  • Loading branch information
MaskRay committed Dec 26, 2020
1 parent 4ff22e6 commit a2d2fd8
Showing 1 changed file with 17 additions and 4 deletions.
21 changes: 17 additions & 4 deletions src/sema_manager.cc
Original file line number Diff line number Diff line change
Expand Up @@ -556,6 +556,10 @@ void *diagnosticMain(void *manager_) {
std::shared_ptr<PreambleData> preamble = session->getPreamble();
IntrusiveRefCntPtr<llvm::vfs::FileSystem> fs =
preamble ? preamble->stat_cache->consumer(session->fs) : session->fs;
std::unique_ptr<CompilerInvocation> ci =
buildCompilerInvocation(task.path, session->file.args, fs);
if (!ci)
continue;
if (preamble) {
bool rebuild = false;
{
Expand All @@ -567,16 +571,25 @@ void *diagnosticMain(void *manager_) {
rebuild = true;
}
}
if (!rebuild) {
std::string content = manager->wfiles->getContent(task.path);
auto buf = llvm::MemoryBuffer::getMemBuffer(content);
#if LLVM_VERSION_MAJOR >= 12 // llvmorg-12-init-11522-g4c55c3b66de
PreambleBounds bounds =
ComputePreambleBounds(*ci->getLangOpts(), *buf, 0);
#else
PreambleBounds bounds =
ComputePreambleBounds(*ci->getLangOpts(), buf.get(), 0);
#endif
if (bounds.Size != preamble->preamble.getBounds().Size)
rebuild = true;
}
if (rebuild) {
manager->preamble_tasks.pushBack({task.path, nullptr, true}, true);
continue;
}
}

std::unique_ptr<CompilerInvocation> ci =
buildCompilerInvocation(task.path, session->file.args, fs);
if (!ci)
continue;
// If main file is a header, add -Wno-unused-function
if (lookupExtension(session->file.filename).second)
ci->getDiagnosticOpts().Warnings.push_back("no-unused-function");
Expand Down

0 comments on commit a2d2fd8

Please sign in to comment.