diff --git a/clang-tools-extra/clangd/index/CanonicalIncludes.cpp b/clang-tools-extra/clangd/index/CanonicalIncludes.cpp index a3b13347f23e92..2822e359c0a50f 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 8b613f56c07be2..7969b638d3d3cb 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("", CI.mapHeader("path/stdio.h", "printf")); + // Suffix mapping isn't available for C, instead of mapping to ` we + // just leave the header as-is. + EXPECT_EQ("include/stdio.h", + CI.mapHeader("include/stdio.h", "unknown_symbol")); } TEST(CanonicalIncludesTest, CXXStandardLibrary) {