[clang-tools-extra] r347574 - [clangd] Do not drop diagnostics from macros
Ilya Biryukov via cfe-commits
cfe-commits at lists.llvm.org
Mon Nov 26 09:05:13 PST 2018
Author: ibiryukov
Date: Mon Nov 26 09:05:13 2018
New Revision: 347574
URL: http://llvm.org/viewvc/llvm-project?rev=347574&view=rev
Log:
[clangd] Do not drop diagnostics from macros
if they still end up being in the main file.
Modified:
clang-tools-extra/trunk/clangd/Diagnostics.cpp
clang-tools-extra/trunk/unittests/clangd/ClangdUnitTests.cpp
Modified: clang-tools-extra/trunk/clangd/Diagnostics.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/Diagnostics.cpp?rev=347574&r1=347573&r2=347574&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/Diagnostics.cpp (original)
+++ clang-tools-extra/trunk/clangd/Diagnostics.cpp Mon Nov 26 09:05:13 2018
@@ -79,7 +79,7 @@ Range diagnosticRange(const clang::Diagn
}
bool isInsideMainFile(const SourceLocation Loc, const SourceManager &M) {
- return Loc.isValid() && M.isWrittenInMainFile(Loc);
+ return Loc.isValid() && M.isWrittenInMainFile(M.getFileLoc(Loc));
}
bool isInsideMainFile(const clang::Diagnostic &D) {
Modified: clang-tools-extra/trunk/unittests/clangd/ClangdUnitTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/ClangdUnitTests.cpp?rev=347574&r1=347573&r2=347574&view=diff
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/ClangdUnitTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/ClangdUnitTests.cpp Mon Nov 26 09:05:13 2018
@@ -159,7 +159,9 @@ TEST(DiagnosticsTest, ClangTidy) {
"macro expansion [bugprone-macro-repeated-side-effects]"),
WithNote(Diag(Test.range("macrodef"),
"macro 'SQUARE' defined here "
- "[bugprone-macro-repeated-side-effects]")))));
+ "[bugprone-macro-repeated-side-effects]"))),
+ Diag(Test.range("macroarg"),
+ "multiple unsequenced modifications to 'y'")));
}
TEST(DiagnosticsTest, Preprocessor) {
@@ -181,6 +183,27 @@ TEST(DiagnosticsTest, Preprocessor) {
ElementsAre(Diag(Test.range(), "use of undeclared identifier 'b'")));
}
+TEST(DiagnosticsTest, InsideMacros) {
+ Annotations Test(R"cpp(
+ #define TEN 10
+ #define RET(x) return x + 10
+
+ int* foo() {
+ RET($foo[[0]]);
+ }
+ int* bar() {
+ return $bar[[TEN]];
+ }
+ )cpp");
+ EXPECT_THAT(TestTU::withCode(Test.code()).build().getDiagnostics(),
+ ElementsAre(Diag(Test.range("foo"),
+ "cannot initialize return object of type "
+ "'int *' with an rvalue of type 'int'"),
+ Diag(Test.range("bar"),
+ "cannot initialize return object of type "
+ "'int *' with an rvalue of type 'int'")));
+}
+
TEST(DiagnosticsTest, ToLSP) {
clangd::Diag D;
D.Message = "something terrible happened";
More information about the cfe-commits
mailing list