[cfe-dev] Some error in clangd

yus via cfe-dev cfe-dev at lists.llvm.org
Thu Apr 4 03:13:57 PDT 2019


Got it,
Thanks

Sam McCall <sammccall at google.com> 于2019年4月4日周四 下午5:22写道:

> Sorry, you'll need to raise that issue with CMake developers I think.
>
> On Thu, Apr 4, 2019 at 11:14 AM yus <suyu.nu at gmail.com> wrote:
>
>> HI,
>>
>> Sorry, another similar problem.
>> In the CDB generated by cmake,
>> all source file in the contracts, use wrong command.
>> for example
>> {
>>   "directory": "/root/workspace/eos4/build/contracts/eosio.system",
>>
>>            "command": "/usr/bin/clang++-4.0
>>  -I/root/workspace/eos4/contracts/eosio.system/..   -Wall
>> -Wno-invalid-partial-specialization -O3 -DNDEBUG   -std=gnu++14 -o
>> CMakeFiles/eosio.system.tmp.dir/eosio.system.cpp.o -c
>> /root/workspace/eos4/contracts/eosio.system/eosio.system.cpp",
>>   "file": "/root/workspace/eos4/contracts/eosio.system/eosio.system.cpp"
>> },
>> the right command should be :
>> /root/opt/wasm/bin/clang -emit-llvm -O3 --std=c++14 --target=wasm32
>> -ffreestanding -nostdlib -nostdlibinc -fno-threadsafe-statics -fno-rtti
>> -fno-exceptions -c
>> /root/workspace/eos4/contracts/eosio.system/eosio.system.cpp -o
>> eosio.system.cpp.bc -Weverything -Wno-c++98-compat -Wno-old-style-cast
>> -Wno-vla -Wno-vla-extension -Wno-c++98-compat-pedantic
>> -Wno-missing-prototypes -Wno-missing-variable-declarations -Wno-packed
>> -Wno-padded -Wno-c99-extensions -Wno-documentation-unknown-command -I
>> /root/workspace/eos4/contracts -I
>> /root/workspace/eos4/externals/magic_get/include -isystem
>> /root/workspace/eos4/contracts/libc++/upstream/include -isystem
>> /root/workspace/eos4/contracts/musl/upstream/include -isystem
>> /root/opt/boost/include -isystem
>> /root/workspace/eos4/contracts/libc++/upstream/include -isystem
>> /root/workspace/eos4/contracts/musl/upstream/include -isystem
>> /root/opt/boost/include
>>
>> I have modified some in the CDB, but there are too many file in
>> contracts. Is there any simple way to fix it.
>> Thanks.
>>
>> Brs,
>> Su Yu
>>
>> yus <suyu.nu at gmail.com> 于2019年4月3日周三 下午3:56写道:
>>
>>> HI,
>>>
>>> It works.
>>> Thank you very much.
>>>
>>> Brs,
>>> Su Yu
>>>
>>> Sam McCall <sammccall at google.com> 于2019年4月3日周三 下午3:17写道:
>>>
>>>> Add an entry to compile_commands.json:
>>>> {
>>>>   "file": ".../libraries/chain/include/eosio/chain/types.hpp",
>>>>   "directory": ".../build/libraries/chain",
>>>>   "command": "/usr/bin/clang++-4.0 ... -c
>>>> .../libraries/chain/include/eosio/chain/types.hpp"
>>>> }
>>>>
>>>> where the ... path is adjusted for your system, and the command is
>>>> taken from the entry from some other relevant file (e.g. abi_serializer.cpp)
>>>>
>>>> You'll also need to prevent your build system from overwriting this
>>>> change.
>>>>
>>>> ---
>>>>
>>>> Another thought on a proper fix: we know that types.hpp is a good match
>>>> for resource_limits.hpp in the same directory, which in turn is a good
>>>> match for resource_limits.cpp. This transitive connection might be a useful
>>>> signal. Unfortunately we don't know that resource_limits.hpp exists when
>>>> loading the interpolating CDB. Maybe listing the parent directory of
>>>> types.hpp is viable though.
>>>>
>>>> On Wed, Apr 3, 2019 at 4:30 AM yus <suyu.nu at gmail.com> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> Many thanks for your analysis and suggestion.
>>>>> For you suggestion, I know what to do but don't know how to do.
>>>>>
>>>>> Can you give some details about the option 1:
>>>>> - adding an explicit compile command for types.hpp, and avoid
>>>>> overwriting it,
>>>>> How to do it.
>>>>>
>>>>> Thanks.
>>>>>
>>>>> Brs,
>>>>> Su Yu
>>>>>
>>>>> Sam McCall <sammccall at google.com> 于2019年4月3日周三 上午12:24写道:
>>>>>
>>>>>> Indeed, the heuristics are valuing base filenames over directory
>>>>>> structure match in this case:
>>>>>>
>>>>>> sed -i s%/root/workspace/eos4%$PWD%g compile_commands.json
>>>>>> mkdir -p libraries/chain/include/eosio/chain
>>>>>> touch
>>>>>> libraries/chain/include/eosio/chain/{types,resource_limits,zzz}.hpp
>>>>>>
>>>>>> clang-check -debug-only=interpolate
>>>>>> libraries/chain/include/eosio/chain/types.hpp
>>>>>> interpolate: chose .../libraries/wasm-jit/Source/IR/*Types*.cpp as
>>>>>> proxy for .../libraries/chain/include/eosio/chain/*types*.hpp
>>>>>> preferring c++ score=2
>>>>>> (this is a bad result: prefer e.g.
>>>>>> .../libraries/chain/abi_serializer.cpp)
>>>>>>
>>>>>> clang-check -debug-only=interpolate
>>>>>> libraries/chain/include/eosio/chain/resource_limits.hpp
>>>>>> interpolate: chose .../libraries/*chain*/*resource_limits*.cpp as
>>>>>> proxy for .../libraries/chain/include/eosio/*chain*/*resource_limits*.hpp
>>>>>> preferring c++ score=3
>>>>>> (this is a good result)
>>>>>>
>>>>>> clang-check -debug-only=interpolate
>>>>>> libraries/chain/include/eosio/chain/zzz.hpp
>>>>>> interpolate: chose .../libraries/*chain*/abi_serializer.cpp as proxy
>>>>>> for .../libraries/chain/include/eosio/*chain*/zzz.hpp preferring c++
>>>>>> score=1
>>>>>> (this is a good result)
>>>>>>
>>>>>> --- details ---
>>>>>>
>>>>>> Points are awarded to entries in compile_commands:
>>>>>>  - 2 points for filename match without extension (1 for prefix match)
>>>>>>  - up to 3 points for directory structure match (1 for each of last 2
>>>>>> segments, 1 for the rest)
>>>>>>
>>>>>> For files in this directory, the relevant directory structure parts
>>>>>> are .../libraries/chain/include eosio chain.
>>>>>> So:
>>>>>>   - anything under ".../libraries/chain/include" would get 1 point
>>>>>> (there are no cpp files there)
>>>>>>   - anything with "eosio" in the last 4 directory segments gets 1
>>>>>> point (no matches)
>>>>>>   - anything with "chain" in the last 4 directory segments gets 1
>>>>>> point (*1 point for sources in "chain" subproject*)
>>>>>> With this directory structure, we do manage to pair headers/sources
>>>>>> in the same project, but we only give a 1 point bonus for doing so, and so
>>>>>> the 2 point bonus for matching basename can take precedence.
>>>>>>
>>>>>> --- how to fix in clang ---
>>>>>>
>>>>>> We only need to tweak the scores here by one point: a tie will be
>>>>>> broken in favor of the longest prefix match, which would be when sources
>>>>>> are in the same subproject with this directory structure.
>>>>>>
>>>>>> One option is to make the name match worth less: 0.5/1 rather than
>>>>>> 1/2 points, though I do worry this will break some cases in the other
>>>>>> direction.
>>>>>>
>>>>>> Another option is to recognize this directory structure match as
>>>>>> particularly good, and boost it more - 1 seems relatively low for e.g.
>>>>>> .../chain/abi_serializer.cpp matching .../chain/types.hpp where it's the
>>>>>> immediate parent directories that match.
>>>>>> This would be somewhat involved: the index data structure doesn't
>>>>>> currently capture where the word "chain" appeared within the cpp filename.
>>>>>>
>>>>>> I'll look into this...
>>>>>>
>>>>>> --- how to work around ---
>>>>>>
>>>>>> The only thing I can suggest is to change your compilation database,
>>>>>> either:
>>>>>>  - adding an explicit compile command for types.hpp, and avoid
>>>>>> overwriting it, or
>>>>>>  - only generate the CDB for a smaller subset of the project that
>>>>>> avoids Types.cpp
>>>>>>
>>>>>> On Mon, Apr 1, 2019 at 6:37 PM Sam McCall <sammccall at google.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Apologies, missed the attachment in the original email. Will look in
>>>>>>> the morning!
>>>>>>>
>>>>>>> On Mon, Apr 1, 2019 at 2:17 PM Sam McCall <sammccall at google.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Hi! Sorry the heuristics aren't working here.
>>>>>>>> The most likely thing is the bare name "types" is matching some
>>>>>>>> *.cpp file from a base library, and we're weighing that too heavily and the
>>>>>>>> directory not heavily enough. This is probably due to heuristics tuned for
>>>>>>>> the LLVM project itself, which has few dependencies and parallel
>>>>>>>> source/include trees.
>>>>>>>> Can you attach compile_commands.json please?
>>>>>>>>
>>>>>>>> On Mon, Apr 1, 2019 at 11:24 AM Ilya Biryukov <ibiryukov at google.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> I don't think there's any simple solution to this. You could try
>>>>>>>>> patching your 'compile_commands.json' to add the header files in there, but
>>>>>>>>> CMake won't do this automatically for you.
>>>>>>>>> I believe the following project on GitHub tries to do something
>>>>>>>>> similar, but I haven't tried it myself:
>>>>>>>>> https://github.com/Sarcasm/compdb
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> +Sam McCall <sammccall at google.com>, now that you're back from
>>>>>>>>> leave, any ideas for improving the heuristics to find proper matching .cpp
>>>>>>>>> files in more cases?
>>>>>>>>>
>>>>>>>>> On Mon, Apr 1, 2019 at 11:11 AM yus <suyu.nu at gmail.com> wrote:
>>>>>>>>>
>>>>>>>>>> Excuse me, is there any solution for my problem?
>>>>>>>>>> Thanks
>>>>>>>>>>
>>>>>>>>>> yus <suyu.nu at gmail.com> 于2019年3月23日周六 上午9:40写道:
>>>>>>>>>>
>>>>>>>>>>> HI,
>>>>>>>>>>>
>>>>>>>>>>> Got it.
>>>>>>>>>>> So my problem has no relationship with front-end
>>>>>>>>>>> vim-YoucompleteMe
>>>>>>>>>>> I just need to wait for your solution or workaround.
>>>>>>>>>>>
>>>>>>>>>>> Thanks for your help.
>>>>>>>>>>>
>>>>>>>>>>> Brs,
>>>>>>>>>>> Su Yu
>>>>>>>>>>>
>>>>>>>>>>> Ilya Biryukov <ibiryukov at google.com> 于2019年3月22日周五 下午8:43写道:
>>>>>>>>>>>
>>>>>>>>>>>> On Fri, Mar 22, 2019 at 12:41 PM yus <suyu.nu at gmail.com> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>
>>>>>>>>>>>>> By the way,
>>>>>>>>>>>>> If a header has no source file (*.cpp), how it been handled.
>>>>>>>>>>>>>
>>>>>>>>>>>> In that case we would fallback to something like `clang -xc++
>>>>>>>>>>>> test.hpp`.
>>>>>>>>>>>> But that almost never happens, our heuristics will always try
>>>>>>>>>>>> to pick some cpp file first.
>>>>>>>>>>>> E.g. in the extreme case when compile_commands.json has just a
>>>>>>>>>>>> single file, we will take the compile command from that file for
>>>>>>>>>>>> *all* headers we encounter.
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Brs,
>>>>>>>>>>>>> Su Yu
>>>>>>>>>>>>>
>>>>>>>>>>>>> yus <suyu.nu at gmail.com> 于2019年3月22日周五 下午7:37写道:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Many thanks for your prompt answer.
>>>>>>>>>>>>>> It's an open source project.
>>>>>>>>>>>>>> But it's a little difficult to build. It has many dependency
>>>>>>>>>>>>>> Hope it can help.
>>>>>>>>>>>>>> https://github.com/EOSIO/eos
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thanks.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Brs,
>>>>>>>>>>>>>> Su Yu
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Ilya Biryukov <ibiryukov at google.com> 于2019年3月22日周五 下午5:18写道:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Hi Su,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Since compile_commands.json only contains compile commands
>>>>>>>>>>>>>>> for .cpp files, we use a heuristics-based approach to infer compile
>>>>>>>>>>>>>>> commands for headers.
>>>>>>>>>>>>>>> More precisely, based on the path to the header file we try
>>>>>>>>>>>>>>> to guess the best .cpp file for a header (e.g. an implementation file) and
>>>>>>>>>>>>>>> pick the compile command from it.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> In your case, we fail to guess a good compile command. I
>>>>>>>>>>>>>>> don't know of a good workaround, unfortunately.
>>>>>>>>>>>>>>> +Sam McCall <sammccall at google.com> is the author of this
>>>>>>>>>>>>>>> approach, he might have ideas on how to fix this.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Is the project you're working on open-source? If so, could
>>>>>>>>>>>>>>> you provide a link to the source code? If not, compilation database should
>>>>>>>>>>>>>>> also be enough to reproduce.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Thu, Mar 21, 2019 at 10:41 PM yus via cfe-dev <
>>>>>>>>>>>>>>> cfe-dev at lists.llvm.org> wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>> I encounter an error in clangd
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> I[12:49:12.197] Updating file
>>>>>>>>>>>>>>>> /root/workspace/eos4/libraries/chain/include/eosio/chain/types.hpp with
>>>>>>>>>>>>>>>> command*
>>>>>>>>>>>>>>>> [/root/workspace/eos4/build/libraries/wasm-jit/Source/IR] */usr/bin/clang++-4.0
>>>>>>>>>>>>>>>> -D ENABLE_SIMD_PROTOTYPE=0 -D ENABLE_THREADING_PROTOTYPE=0 -D
>>>>>>>>>>>>>>>> IR_API=DLL_EXPORT -D PRETEND_32BIT_ADDRESS_SPACE=0 -D WAVM_METRICS_OUTPUT=0
>>>>>>>>>>>>>>>> -I /root/workspace/eos4/libraries/wasm-jit/Include -I
>>>>>>>>>>>>>>>> /root/workspace/eos4/libraries/wasm-jit/Include/IR -Wall
>>>>>>>>>>>>>>>> -Wno-invalid-partial-specialization -O3 -D NDEBUG -c -std=gnu++14
>>>>>>>>>>>>>>>> /root/workspace/eos4/libraries/chain/include/eosio/chain/types.hpp
>>>>>>>>>>>>>>>> -resource-dir=/root/.vim/bundle/YouCompleteMe/third_party/ycmd/third_party/clang/lib/clang/7.0.0
>>>>>>>>>>>>>>>> V[12:49:12.199] Preamble for file
>>>>>>>>>>>>>>>> /root/workspace/eos4/libraries/chain/include/eosio/chain/types.hpp cannot
>>>>>>>>>>>>>>>> be reused. Attempting to rebuild it.
>>>>>>>>>>>>>>>> V[12:49:12.238] Built preamble of size 213512 for file
>>>>>>>>>>>>>>>> /root/workspace/eos4/libraries/chain/include/eosio/chain/types.hpp
>>>>>>>>>>>>>>>> I[12:49:12.242] Dropped diagnostic outside main file: : too
>>>>>>>>>>>>>>>> many errors emitted, stopping now
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> some other file in same folder update correctly
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> I[12:49:03.898] Updating file
>>>>>>>>>>>>>>>> /root/workspace/eos4/libraries/chain/include/eosio/chain/resource_limits.hpp
>>>>>>>>>>>>>>>> with command *[/root/workspace/eos4/build/libraries/chain]
>>>>>>>>>>>>>>>> */usr/bin/clang++-4.0 -I
>>>>>>>>>>>>>>>> /root/workspace/eos4/libraries/chain/include -I
>>>>>>>>>>>>>>>> /root/workspace/eos4/build/libraries/chain/include -I
>>>>>>>>>>>>>>>> /root/workspace/eos4/libraries/chain/../wasm-jit/Include -I
>>>>>>>>>>>>>>>> /root/workspace/eos4/libraries/chain/../../externals/binaryen/src -I
>>>>>>>>>>>>>>>> /root/workspace/eos4/libraries/utilities/include -I
>>>>>>>>>>>>>>>> /root/workspace/eos4/libraries/utilities/../wasm-jit/Include -I
>>>>>>>>>>>>>>>> /root/workspace/eos4/libraries/fc/include -I /root/opt/boost/include -I
>>>>>>>>>>>>>>>> /usr/local/include -I /root/workspace/eos4/libraries/fc/vendor/websocketpp
>>>>>>>>>>>>>>>> -I /root/workspace/eos4/libraries/chainbase/include -I
>>>>>>>>>>>>>>>> /root/workspace/eos4/libraries/wasm-jit/Source/Runtime/../../../chain/include
>>>>>>>>>>>>>>>> -I /root/workspace/eos4/libraries/softfloat/source/include -I
>>>>>>>>>>>>>>>> /root/workspace/eos4/libraries/softfloat/source/8086-SSE -I
>>>>>>>>>>>>>>>> /root/workspace/eos4/libraries/softfloat/build/Linux-x86_64-GCC -I
>>>>>>>>>>>>>>>> /root/workspace/eos4/libraries/builtins -I
>>>>>>>>>>>>>>>> /root/workspace/eos4/libraries/builtins../softfloat/source/include -Wall
>>>>>>>>>>>>>>>> -Wno-invalid-partial-specialization -O3 -D NDEBUG -c -std=gnu++14
>>>>>>>>>>>>>>>> /root/workspace/eos4/libraries/chain/include/eosio/chain/resource_limits.hpp
>>>>>>>>>>>>>>>> -resource-dir=/root/.vim/bundle/YouCompleteMe/third_party/ycmd/third_party/clang/lib/clang/7.0.0
>>>>>>>>>>>>>>>> V[12:49:03.901] Preamble for file
>>>>>>>>>>>>>>>> /root/workspace/eos4/libraries/chain/include/eosio/chain/resource_limits.hpp
>>>>>>>>>>>>>>>> cannot be reused. Attempting to rebuild it.
>>>>>>>>>>>>>>>> V[12:49:10.676] <<<
>>>>>>>>>>>>>>>> {"id":"3","jsonrpc":"2.0","method":"textDocument/definition","params":{"position":{"character":51,"line":53},"textDocument":{"uri":"file:///root/workspace/eos4/libraries/chain/include/eosio/chain/resource_limits.hpp"}}}
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> I don't know why, and what's the difference. why the flags
>>>>>>>>>>>>>>>> are different.
>>>>>>>>>>>>>>>> How to fix the problem
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> root at 39470746ee31:~/workspace/eos4# /usr/bin/clang++-4.0
>>>>>>>>>>>>>>>> -D ENABLE_SIMD_PROTOTYPE=0 -D ENABLE_THREADING_PROTOTYPE=0 -D
>>>>>>>>>>>>>>>> IR_API=DLL_EXPORT -D PRETEND_32BIT_ADDRESS_SPACE=0 -D WAVM_METRICS_OUTPUT=0
>>>>>>>>>>>>>>>> -I /root/workspace/eos4/libraries/wasm-jit/Include -I
>>>>>>>>>>>>>>>> /root/workspace/eos4/libraries/wasm-jit/Include/IR -Wall
>>>>>>>>>>>>>>>> -Wno-invalid-partial-specialization -O3 -D NDEBUG -c -std=gnu++14
>>>>>>>>>>>>>>>> /root/workspace/eos4/libraries/chain/include/eosio/chain/types.hpp
>>>>>>>>>>>>>>>> -resource-dir=/root/.vim/bundle/YouCompleteMe/third_party/ycmd/third_party/clang/lib/clang/7.0.0
>>>>>>>>>>>>>>>> /root/workspace/eos4/libraries/chain/include/eosio/chain/types.hpp:6:10:
>>>>>>>>>>>>>>>> fatal error: 'eosio/chain/name.hpp' file not found
>>>>>>>>>>>>>>>> #include <eosio/chain/name.hpp>
>>>>>>>>>>>>>>>>          ^~~~~~~~~~~~~~~~~~~~~~
>>>>>>>>>>>>>>>> 1 error generated.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> attach the error and compilation database
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Thanks.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Brs
>>>>>>>>>>>>>>>> Su Yu
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>> cfe-dev mailing list
>>>>>>>>>>>>>>>> cfe-dev at lists.llvm.org
>>>>>>>>>>>>>>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>> Regards,
>>>>>>>>>>>>>>> Ilya Biryukov
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> Regards,
>>>>>>>>>>>> Ilya Biryukov
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Regards,
>>>>>>>>> Ilya Biryukov
>>>>>>>>>
>>>>>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20190404/1fd3feba/attachment-0001.html>


More information about the cfe-dev mailing list