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"; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits