[clang-tools-extra] [clang-doc] add namespace references to VarInfo (PR #146964)
Erick Velez via cfe-commits
cfe-commits at lists.llvm.org
Thu Jul 3 14:35:45 PDT 2025
https://github.com/evelez7 created https://github.com/llvm/llvm-project/pull/146964
VarInfo was missing its addReference specialization. This causes errors
when a VarInfo is inside a namespace that isn't the global namespace.
>From c686da5544239f10aa71c15f510d07a7268a629f Mon Sep 17 00:00:00 2001
From: Erick Velez <erickvelez7 at gmail.com>
Date: Wed, 2 Jul 2025 21:49:37 -0700
Subject: [PATCH] [clang-doc] add namespace references to VarInfo
VarInfo was missing its addReference specialization. This causes errors
when a VarInfo is inside a namespace that isn't the global namespace.
---
clang-tools-extra/clang-doc/BitcodeReader.cpp | 11 ++++++
.../test/clang-doc/json/nested-namespace.cpp | 36 +++++++++++++++++++
2 files changed, 47 insertions(+)
create mode 100644 clang-tools-extra/test/clang-doc/json/nested-namespace.cpp
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
More information about the cfe-commits
mailing list