[clang-tools-extra] [clangd][HLSL] Prevent RootSignature internal identifier leak on hover (PR #214955)
Maria Fernanda GuimarĂ£es via cfe-commits
cfe-commits at lists.llvm.org
Sat Aug 8 04:23:32 PDT 2026
https://github.com/mafeguimaraes updated https://github.com/llvm/llvm-project/pull/214955
>From 18797844e4ecb765fc11c3e2a711893105f00d02 Mon Sep 17 00:00:00 2001
From: Maria Fernanda Guimaraes <mariafefe201 at gmail.com>
Date: Sat, 8 Aug 2026 10:55:44 +0000
Subject: [PATCH 1/2] Prevent RootSignature internal identifier leak on hover
---
clang-tools-extra/clangd/Hover.cpp | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/clang-tools-extra/clangd/Hover.cpp b/clang-tools-extra/clangd/Hover.cpp
index a2f8b6418833d..0d6aa8cea9d17 100644
--- a/clang-tools-extra/clangd/Hover.cpp
+++ b/clang-tools-extra/clangd/Hover.cpp
@@ -1013,6 +1013,13 @@ std::optional<HoverInfo> getHoverContents(const SelectionTree::Node *N,
// Generates hover info for attributes.
std::optional<HoverInfo> getHoverContents(const Attr *A, ParsedAST &AST) {
HoverInfo HI;
+
+ if (const auto *RS = llvm::dyn_cast<RootSignatureAttr>(A)) {
+ HI.Name = "RootSignature";
+ HI.Documentation = Attr::getDocumentation(A->getKind()).str();
+ return HI;
+ }
+
HI.Name = A->getSpelling();
if (A->hasScope())
HI.LocalScope = A->getScopeName()->getName().str();
>From 7c13a79f60fe42ce0a6c697a78521e5b9ca4676d Mon Sep 17 00:00:00 2001
From: Maria Fernanda Guimaraes <mariafefe201 at gmail.com>
Date: Sat, 8 Aug 2026 11:13:05 +0000
Subject: [PATCH 2/2] Add hover test for RootSignature attribute
---
clang-tools-extra/clangd/Hover.cpp | 2 +-
.../clangd/unittests/HoverTests.cpp | 16 ++++++++++++++++
2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/clang-tools-extra/clangd/Hover.cpp b/clang-tools-extra/clangd/Hover.cpp
index 0d6aa8cea9d17..3f96bffff298d 100644
--- a/clang-tools-extra/clangd/Hover.cpp
+++ b/clang-tools-extra/clangd/Hover.cpp
@@ -1014,7 +1014,7 @@ std::optional<HoverInfo> getHoverContents(const SelectionTree::Node *N,
std::optional<HoverInfo> getHoverContents(const Attr *A, ParsedAST &AST) {
HoverInfo HI;
- if (const auto *RS = llvm::dyn_cast<RootSignatureAttr>(A)) {
+ if (llvm::isa<RootSignatureAttr>(A)) {
HI.Name = "RootSignature";
HI.Documentation = Attr::getDocumentation(A->getKind()).str();
return HI;
diff --git a/clang-tools-extra/clangd/unittests/HoverTests.cpp b/clang-tools-extra/clangd/unittests/HoverTests.cpp
index 02ce48c6dca95..3ae86a4b039f4 100644
--- a/clang-tools-extra/clangd/unittests/HoverTests.cpp
+++ b/clang-tools-extra/clangd/unittests/HoverTests.cpp
@@ -5431,6 +5431,22 @@ TEST(Hover, HLSLRegisterAttributeRange) {
}
}
+TEST(Hover, HLSLRootSignature) {
+ Annotations T(R"hlsl(
+ #define RS_CBV "CBV(b0)"
+ [^RootSignature(RS_CBV)]
+ void CS_ValidCBV() {}
+ )hlsl");
+
+ TestTU TU = TestTU::withCode(T.code());
+ configureHLSL(TU);
+ auto AST = TU.build();
+ auto H = getHover(AST, T.point(), format::getLLVMStyle(), nullptr);
+ ASSERT_TRUE(H) << "Hover should have been returned for RootSignature!";
+ EXPECT_EQ(H->Name, "RootSignature");
+ EXPECT_EQ(H->Definition, "");
+}
+
} // namespace
} // namespace clangd
} // namespace clang
More information about the cfe-commits
mailing list