Bear icon indicating copy to clipboard operation
Bear copied to clipboard

Combining compile & link with Clang results in erroneous entry

Open roubert opened this issue 10 months ago • 3 comments

Create any trivial Hello, World! style program and combine compile & link on the command line like this:

$ g++-13 -o hello hello.cc
$ clang++-17 -o hello hello.cc

That's a perfectly normal thing to do and should work perfectly fine.

Then do that through Bear:

$ bear -- g++-13 -o hello hello.cc

That works fine and generates a compile_commands.json file with a single entry, which contains exactly that one single command line, just as expected.

Then do that with Clang instead:

$ bear -- clang++-17 -o hello hello.cc

That generates a compile_commands.json file with two different entries, one with that one single command line plus one for the underlying execution of the compile step, with a very long arguments list.

This is a problem because that internal command line for the internal compile step can't be executed directly from the command line and trying to use this compilation database with Clang-Tidy will therefore result in a compilation error:

$ clang-tidy-17 -checks='*' hello.cc
[…]
error: error reading 'pic': No such file or directory [clang-diagnostic-error]

That pic comes from the internal command line, which shouldn't have been included in the compile_commands.json file.

This happens both with the Bear 3.1.3 release and with Bear built from source at current HEAD.

roubert avatar Apr 22 '24 21:04 roubert