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