[PATCH] D50455: Continue emitting diagnostics after a fatal error
Dmitry via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Aug 8 09:17:58 PDT 2018
Dmitry.Kozhevnikov created this revision.
Dmitry.Kozhevnikov added reviewers: ilya-biryukov, sammccall.
Herald added subscribers: cfe-commits, arphaman, jkorous.
By default, diagnostics are suppressed after a fatal error. Some fatal errors (notably, "file not found" for include directive) are common for incomplete code and we probably want to have further diagnostics anyway.
Currently, this flag is optionally set by libclang (see CXTranslationUnit_KeepGoing option).
There are also a bunch of related problems when AST is not fully built in presence of fatal errors (templates are not instantiated and include directives are not processed), I'll address these in separate patches.
Repository:
rCTE Clang Tools Extra
https://reviews.llvm.org/D50455
Files:
clangd/ClangdUnit.cpp
clangd/Compiler.cpp
test/clangd/missing-includes.test
Index: test/clangd/missing-includes.test
===================================================================
--- test/clangd/missing-includes.test
+++ test/clangd/missing-includes.test
@@ -0,0 +1,13 @@
+# RUN: clangd -lit-test < %s | FileCheck %s
+{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
+---
+{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///foo.c","languageId":"c","version":1,"text":"#include <a>\n#include <b>\nint x;\n#include <c>\n#include <d>\n"}}}
+# CHECK: "method": "textDocument/publishDiagnostics",
+# CHECK: "message": "'a' file not found",
+# CHECK: "message": "'b' file not found",
+# CHECK: "message": "'c' file not found",
+# CHECK: "message": "'d' file not found",
+---
+{"jsonrpc":"2.0","id":5,"method":"shutdown"}
+---
+{"jsonrpc":"2.0","method":"exit"}
Index: clangd/Compiler.cpp
===================================================================
--- clangd/Compiler.cpp
+++ clangd/Compiler.cpp
@@ -63,6 +63,7 @@
auto Clang = llvm::make_unique<CompilerInstance>(PCHs);
Clang->setInvocation(std::move(CI));
Clang->createDiagnostics(&DiagsClient, false);
+ Clang->getDiagnostics().setSuppressAfterFatalError(false);
if (auto VFSWithRemapping = createVFSFromCompilerInvocation(
Clang->getInvocation(), Clang->getDiagnostics(), VFS))
Index: clangd/ClangdUnit.cpp
===================================================================
--- clangd/ClangdUnit.cpp
+++ clangd/ClangdUnit.cpp
@@ -328,6 +328,8 @@
// to read back. We rely on dynamic index for the comments instead.
CI.getPreprocessorOpts().WriteCommentListToPCH = false;
+ PreambleDiagsEngine->setSuppressAfterFatalError(false);
+
CppFilePreambleCallbacks SerializedDeclsCollector(FileName, PreambleCallback);
if (Inputs.FS->setCurrentWorkingDirectory(Inputs.CompileCommand.Directory)) {
log("Couldn't set working directory when building the preamble.");
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D50455.159736.patch
Type: text/x-patch
Size: 2007 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180808/f40c381d/attachment.bin>
More information about the cfe-commits
mailing list