Index: clang-tools-extra/clangd/test/modules-options-compatablity-test/A.h =================================================================== --- /dev/null +++ clang-tools-extra/clangd/test/modules-options-compatablity-test/A.h @@ -0,0 +1,2 @@ +// Comment for void a() +void a() {} Index: clang-tools-extra/clangd/test/modules-options-compatablity-test/B.h =================================================================== --- /dev/null +++ clang-tools-extra/clangd/test/modules-options-compatablity-test/B.h @@ -0,0 +1,3 @@ +// Comment for B +// ORDINARY COMMENT +#include "A.h" Index: clang-tools-extra/clangd/test/modules-options-compatablity-test/compile_commands.json =================================================================== --- /dev/null +++ clang-tools-extra/clangd/test/modules-options-compatablity-test/compile_commands.json @@ -0,0 +1,8 @@ +[{ + "directory" : ".", + "command" : "clang -emit-obj DIRECTORY/use.c -fno-modules-global -fmodules " + "-fmodules-cache-path=/DOES/NOT/EXIST -fno-builtin-module-map " + "-fno-implicit-modules -fimplicit-module-maps " + "-fprebuilt-module-path=DIRECTORY/prebuilt", + "file" : "DIRECTORY/use.c" +}] Index: clang-tools-extra/clangd/test/modules-options-compatablity-test/definition.jsonrpc =================================================================== --- /dev/null +++ clang-tools-extra/clangd/test/modules-options-compatablity-test/definition.jsonrpc @@ -0,0 +1,28 @@ +{ + "jsonrpc": "2.0", + "id": 0, + "method": "initialize", + "params": { + "processId": 123, + "rootPath": "clangd", + "capabilities": { "window": { "workDoneProgress": true, "implicitWorkDoneProgressCreate": true} }, + "trace": "off" + } +} +--- +{ + "jsonrpc": "2.0", + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file://DIRECTORY/use.c", + "languageId": "cpp", + "version": 1, + "text": "#include \"B.h\"\nvoid use(){\na();\n}" + } + } +} +--- +{"jsonrpc":"2.0","id":3,"method":"shutdown"} +--- +{"jsonrpc":"2.0","method":"exit"} Index: clang-tools-extra/clangd/test/modules-options-compatablity-test/module.modulemap =================================================================== --- /dev/null +++ clang-tools-extra/clangd/test/modules-options-compatablity-test/module.modulemap @@ -0,0 +1,8 @@ +/* module.modulemap */ +module A { + header "A.h" +} +module B { + header "B.h" + export * +} Index: clang-tools-extra/clangd/test/modules-options-compatablity-test/use.c =================================================================== --- /dev/null +++ clang-tools-extra/clangd/test/modules-options-compatablity-test/use.c @@ -0,0 +1,5 @@ +/* use */ +#include +#include + +void use() { a(); } Index: clang-tools-extra/clangd/test/modules-options-compatablity.test =================================================================== --- /dev/null +++ clang-tools-extra/clangd/test/modules-options-compatablity.test @@ -0,0 +1,10 @@ + +# RUN: rm -rf %t && mkdir -p %t +# RUN: cp -r %S/modules-options-compatablity-test/* %t +# RUN: mkdir -p %t/prebuilt +# RUN: sed -i -e "s|DIRECTORY|%t|g" %t/definition.jsonrpc +# RUN: sed -i -e "s|DIRECTORY|%t|g" %t/compile_commands.json +# RUN: %clang -cc1 -emit-module -o %t/prebuilt/A.pcm -fmodules %t/module.modulemap -fmodule-name=A +# RUN: %clang -cc1 -fretain-comments-from-system-headers -emit-module -o %t/prebuilt/B.pcm -fmodules %t/module.modulemap -fmodule-name=B -fprebuilt-module-path=%t/prebuilt +# RUN: rm %t/*.h +# RUN: clangd -background-index -lit-test < %t/definition.jsonrpc Index: clang/include/clang/Basic/LangOptions.def =================================================================== --- clang/include/clang/Basic/LangOptions.def +++ clang/include/clang/Basic/LangOptions.def @@ -387,7 +387,7 @@ LANGOPT(XLPragmaPack, 1, 0, "IBM XL #pragma pack handling") -LANGOPT(RetainCommentsFromSystemHeaders, 1, 0, "retain documentation comments from system headers in the AST") +COMPATIBLE_LANGOPT(RetainCommentsFromSystemHeaders, 1, 0, "retain documentation comments from system headers in the AST") LANGOPT(SanitizeAddressFieldPadding, 2, 0, "controls how aggressive is ASan " "field padding (0: none, 1:least " Index: clang/lib/Serialization/ASTReader.cpp =================================================================== --- clang/lib/Serialization/ASTReader.cpp +++ clang/lib/Serialization/ASTReader.cpp @@ -3077,6 +3077,10 @@ return Err; if (llvm::Error Err = ReadBlockAbbrevs(C, COMMENTS_BLOCK_ID)) return Err; + if (PP.getPreprocessorOpts().GeneratePreamble && + !PP.getPreprocessorOpts().WriteCommentListToPCH) { + break; + } CommentsCursors.push_back(std::make_pair(C, &F)); break; }