[clang-tools-extra] [clang-doc] Improve performance by adding a short circuit (PR #96809)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Jul 11 04:08:21 PDT 2024
PeterChou1 wrote:
Ok nevermind, disregard the above comment I was wrong about the mechanism of the bug.
the source of this bug comes from the way clang-doc handles C code, particularly anonymous typedef in C. When clang-doc encounters an anonymous typedef in C it incorrectly serializes its a name as a simple example running clang-doc on this file
test.c
```
/**
* Foo anon typedef
*/
typedef struct {} Foo;
```
running this file with clang-doc will interpret Foo as @nonymous_record_XXXXXXX.
The reason why that is because when checking anonymous typedef name we're explicitly casting it to a CXXDecl see code [here](https://github.com/llvm/llvm-project/blob/main/clang-tools-extra/clang-doc/Serialize.cpp#L664).
This becomes a problem when we run the LLVM compilation database. As an example a record that we were not properly serializing before was LLVMOrcCDependenceMapPair. When clang-doc runs the compilation database of LLVM it encounters code running under example code OrcV2CBindingsRemovableCode.c. This file causes recursiveASTVisitor to visit LLVMOrcCDependenceMapPair but because its c code its name is not found and it is incorrectly serialized into @nonymous_record_XXXXX.
Normally this is not an issue for clang-doc since we'll visit the record multiple times and the next time we visit it clang-doc will correctly fill in the name of the declaration.
But this patch changes that behaviour since we're only visiting the a typedef declaration at most once
we now incorrectly serialized what was LLVMOrcCDependenceMapPair to @nonymous_record_XXXXX
https://github.com/llvm/llvm-project/pull/96809
More information about the cfe-commits
mailing list