[clang-tools-extra] 64168c6 - [clangd] Disable suffix matching fallback for C during include insertion

Kadir Cetinkaya via cfe-commits cfe-commits at lists.llvm.org
Thu Sep 24 01:46:23 PDT 2020


Author: Kadir Cetinkaya
Date: 2020-09-24T10:46:10+02:00
New Revision: 64168c6d996b6fdd017488785e0e9ce5ce05be54

URL: https://github.com/llvm/llvm-project/commit/64168c6d996b6fdd017488785e0e9ce5ce05be54
DIFF: https://github.com/llvm/llvm-project/commit/64168c6d996b6fdd017488785e0e9ce5ce05be54.diff

LOG: [clangd] Disable suffix matching fallback for C during include insertion

Clangd currently doesn't respect language and breaks the builds with
include insertion for C. This patch aims to stop the bleeding by not mapping
back to CPP standard library headers.

Improves https://github.com/clangd/clangd/issues/376.

Differential Revision: https://reviews.llvm.org/D88144

Added: 
    

Modified: 
    clang-tools-extra/clangd/index/CanonicalIncludes.cpp
    clang-tools-extra/clangd/unittests/CanonicalIncludesTests.cpp

Removed: 
    


################################################################################
diff  --git a/clang-tools-extra/clangd/index/CanonicalIncludes.cpp b/clang-tools-extra/clangd/index/CanonicalIncludes.cpp
index a3b13347f23e..2822e359c0a5 100644
--- a/clang-tools-extra/clangd/index/CanonicalIncludes.cpp
+++ b/clang-tools-extra/clangd/index/CanonicalIncludes.cpp
@@ -772,7 +772,10 @@ void CanonicalIncludes::addSystemHeadersMapping(const LangOptions &Language) {
                   MaxSuffixComponents;
          }) != SystemHeaderMap->keys().end());
 
-  StdSuffixHeaderMapping = SystemHeaderMap;
+  // FIXME: Suffix mapping contains invalid entries for C, so only enable it for
+  // CPP.
+  if (Language.CPlusPlus)
+    StdSuffixHeaderMapping = SystemHeaderMap;
 }
 
 } // namespace clangd

diff  --git a/clang-tools-extra/clangd/unittests/CanonicalIncludesTests.cpp b/clang-tools-extra/clangd/unittests/CanonicalIncludesTests.cpp
index 8b613f56c07b..7969b638d3d3 100644
--- a/clang-tools-extra/clangd/unittests/CanonicalIncludesTests.cpp
+++ b/clang-tools-extra/clangd/unittests/CanonicalIncludesTests.cpp
@@ -21,6 +21,10 @@ TEST(CanonicalIncludesTest, CStandardLibrary) {
   CI.addSystemHeadersMapping(Language);
   // Usual standard library symbols are mapped correctly.
   EXPECT_EQ("<stdio.h>", CI.mapHeader("path/stdio.h", "printf"));
+  // Suffix mapping isn't available for C, instead of mapping to `<cstdio> we
+  // just leave the header as-is.
+  EXPECT_EQ("include/stdio.h",
+            CI.mapHeader("include/stdio.h", "unknown_symbol"));
 }
 
 TEST(CanonicalIncludesTest, CXXStandardLibrary) {


        


More information about the cfe-commits mailing list