[clang-tools-extra] [clang-doc] add namespace references to VarInfo (PR #146964)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Jul 3 14:36:55 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-tools-extra
Author: Erick Velez (evelez7)
<details>
<summary>Changes</summary>
VarInfo was missing its addReference specialization. This causes errors
when a VarInfo is inside a namespace that isn't the global namespace.
---
Full diff: https://github.com/llvm/llvm-project/pull/146964.diff
2 Files Affected:
- (modified) clang-tools-extra/clang-doc/BitcodeReader.cpp (+11)
- (added) clang-tools-extra/test/clang-doc/json/nested-namespace.cpp (+36)
``````````diff
diff --git a/clang-tools-extra/clang-doc/BitcodeReader.cpp b/clang-tools-extra/clang-doc/BitcodeReader.cpp
index 2cbf8bf6b2879..f756ae6d897c8 100644
--- a/clang-tools-extra/clang-doc/BitcodeReader.cpp
+++ b/clang-tools-extra/clang-doc/BitcodeReader.cpp
@@ -569,6 +569,17 @@ static llvm::Error addReference(T I, Reference &&R, FieldId F) {
"invalid type cannot contain Reference");
}
+template <> llvm::Error addReference(VarInfo *I, Reference &&R, FieldId F) {
+ switch (F) {
+ case FieldId::F_namespace:
+ I->Namespace.emplace_back(std::move(R));
+ return llvm::Error::success();
+ default:
+ return llvm::createStringError(llvm::inconvertibleErrorCode(),
+ "VarInfo cannot contain this Reference");
+ }
+}
+
template <> llvm::Error addReference(TypeInfo *I, Reference &&R, FieldId F) {
switch (F) {
case FieldId::F_type:
diff --git a/clang-tools-extra/test/clang-doc/json/nested-namespace.cpp b/clang-tools-extra/test/clang-doc/json/nested-namespace.cpp
new file mode 100644
index 0000000000000..5edfb34f34a13
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/json/nested-namespace.cpp
@@ -0,0 +1,36 @@
+// RUN: rm -rf %t && mkdir -p %t
+// RUN: clang-doc --output=%t --format=json --executor=standalone %s
+// RUN: FileCheck %s < %t/nested/index.json --check-prefix=NESTED
+// RUN: FileCheck %s < %t/nested/inner/index.json --check-prefix=INNER
+
+namespace nested {
+ int Global;
+ namespace inner {
+ int InnerGlobal;
+ } // namespace inner
+} // namespace nested
+
+// NESTED: "Variables": [
+// NESTED-NEXT: {
+// NESTED-NEXT: "IsStatic": false,
+// NESTED-NEXT: "Location": {
+// NESTED-NEXT: "Filename": "{{.*}}nested-namespace.cpp",
+// NESTED-NEXT: "LineNumber": 7
+// NESTED-NEXT: },
+// NESTED-NEXT: "Name": "Global",
+// NESTED-NEXT: "Namespace": [
+// NESTED-NEXT: "nested"
+// NESTED-NEXT: ],
+
+// INNER: "Variables": [
+// INNER-NEXT: {
+// INNER-NEXT: "IsStatic": false,
+// INNER-NEXT: "Location": {
+// INNER-NEXT: "Filename": "{{.*}}nested-namespace.cpp",
+// INNER-NEXT: "LineNumber": 9
+// INNER-NEXT: },
+// INNER-NEXT: "Name": "InnerGlobal",
+// INNER-NEXT: "Namespace": [
+// INNER-NEXT: "inner",
+// INNER-NEXT: "nested"
+// INNER-NEXT: ],
\ No newline at end of file
``````````
</details>
https://github.com/llvm/llvm-project/pull/146964
More information about the cfe-commits
mailing list