kadircet created this revision. kadircet added a reviewer: sammccall. Herald added subscribers: cfe-commits, usaxena95, arphaman. Herald added a project: clang. kadircet requested review of this revision. Herald added subscribers: MaskRay, ilya-biryukov.
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. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D88144 Files: clang-tools-extra/clangd/index/CanonicalIncludes.cpp clang-tools-extra/clangd/unittests/CanonicalIncludesTests.cpp Index: clang-tools-extra/clangd/unittests/CanonicalIncludesTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/CanonicalIncludesTests.cpp +++ clang-tools-extra/clangd/unittests/CanonicalIncludesTests.cpp @@ -21,6 +21,10 @@ 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) { Index: clang-tools-extra/clangd/index/CanonicalIncludes.cpp =================================================================== --- clang-tools-extra/clangd/index/CanonicalIncludes.cpp +++ clang-tools-extra/clangd/index/CanonicalIncludes.cpp @@ -772,7 +772,10 @@ 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
Index: clang-tools-extra/clangd/unittests/CanonicalIncludesTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/CanonicalIncludesTests.cpp +++ clang-tools-extra/clangd/unittests/CanonicalIncludesTests.cpp @@ -21,6 +21,10 @@ 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) { Index: clang-tools-extra/clangd/index/CanonicalIncludes.cpp =================================================================== --- clang-tools-extra/clangd/index/CanonicalIncludes.cpp +++ clang-tools-extra/clangd/index/CanonicalIncludes.cpp @@ -772,7 +772,10 @@ 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
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits