[PATCH] D70863: [clangd] Try harder to find a plausible `clang` as argv0, particularly on Mac.

Kirill Bobyrev via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Dec 2 02:23:31 PST 2019


kbobyrev added a comment.

The current version of the patch fixes one of the related issues. When running on a simple file like this

  #include <iostream>
  
  int main() {
          std::cout << "Hello, world" << std::endl;
          return 0;
  }

Clangd would fail to find `iostream` header and produce errors for `std::cout` and `std::endl` which are also not found before the patch. After the patch, this is no longer an issue. Hence, I believe that standard library headers can be identified correctly now.

However, after the patch `wchar.h` from `#include_next` is not found and this produces another error. `wchar.h` there is AFAIK not a part of the standard library and should be found in the SDKROOT.

The following is a log of Clangd failing to find `wchar.h`:

  kbobyrev$ ./bin/clangd -sync < /tmp/mirror                                                                                                                                    
  clangd is a language server that provides IDE-like features to editors.
  
  It should be used via an editor plugin rather than invoked directly. For more information, see:
          https://clang.llvm.org/extra/clangd/
          https://microsoft.github.io/language-server-protocol/
  
  clangd accepts flags on the commandline, and in the CLANGD_FLAGS environment variable.
  
  I[11:18:01.774] clangd version 10.0.0 (https://github.com/llvm/llvm-project bd23859f390aa81ddb1bf0b16684cce50ad9d66d)                                                                                          
  I[11:18:01.775] PID: 92552
  I[11:18:01.775] Working directory: /Users/kbobyrev/dev/build/llvm-release
  I[11:18:01.775] argv[0]: ./bin/clangd
  I[11:18:01.775] argv[1]: -sync
  I[11:18:01.775] Starting LSP over stdin/stdout
  I[11:18:01.776] <-- initialize(0)
  I[11:18:01.776] --> reply:initialize(0) 0 ms
  Content-Length: 800
  
  {"id":0,"jsonrpc":"2.0","result":{"capabilities":{"codeActionProvider":{"codeActionKinds":["quickfix","refactor","info"]},"completionProvider":{"resolveProvider":false,"triggerCharacters":[".",">",":"]},"declarationProvider":true,"definitionProvider":true,"documentFormattingProvider":true,"documentHighlightProvider":true,"documentOnTypeFormattingProvider":{"firstTriggerCharacter":"\n","moreTriggerCharacter":[]},"documentRangeFormattingProvider":true,"documentSymbolProvider":true,"executeCommandProvider":{"commands":["clangd.applyFix","clangd.applyTweak"]},"hoverProvider":true,"referencesProvider":true,"renameProvider":true,"selectionRangeProvider":true,"signatureHelpProvider":{"triggerCharacters":["(",","]},"textDocumentSync":2,"typeHierarchyProvider":true,"workspaceSymbolProvider":true}}}I[11:18:01.776] <-- textDocument/didOpen
  I[11:18:01.789] Failed to find compilation database for /private/tmp/test.cpp
  I[11:18:01.789] Updating file /private/tmp/test.cpp with command clangd fallback
  [/private/tmp]
  /Library/Developer/CommandLineTools/usr/bin/clang /private/tmp/test.cpp -fsyntax-only -resource-dir=/Users/kbobyrev/dev/build/llvm-release/lib/clang/10.0.0                                                    
  I[11:18:02.155] --> textDocument/publishDiagnostics
  Content-Length: 819
  
  {"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"diagnostics":[{"code":"pp_file_not_found","message":"In included file: 'wchar.h' file not found","range":{"end":{"character":10,"line":0},"start":{"character":9,"line":0}},"relatedInformation":[{"location":{"range":{"end":{"character":23,"line":118},"start":{"character":14,"line":118}},"uri":"file:///Library/Developer/CommandLineTools/usr/include/c%2B%2B/v1/wchar.h"},"message":"Error occurred here"}],"severity":1,"source":"clang"},{"code":"typecheck_invalid_operands","message":"Invalid operands to binary expression ('std::__1::ostream' (aka 'int') and 'const char [13]')","range":{"end":{"character":13,"line":3},"start":{"character":11,"line":3}},"relatedInformation":[],"severity":1,"source":"clang"}],"uri":"file:///private/tmp/test.cpp"}}I[11:18:02.155] Warning: Missing Content-Length header, or zero-length message.
  E[11:18:02.155] Transport error: Input/output error
  I[11:18:02.155] LSP finished, exiting with status 1

This can be fixed manually by appending `env SDKROOT=$(xcrun --show-sdk-path)` to the clangd invocation (or simply defining the environment variable for all invocations), but I believe we might want to deal with it on the Clangd side, too.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D70863/new/

https://reviews.llvm.org/D70863





More information about the cfe-commits mailing list