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 <[email protected]>
Date: Sat, 8 Aug 2026 10:55:44 +0000
Subject: [PATCH 1/3] 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 <[email protected]>
Date: Sat, 8 Aug 2026 11:13:05 +0000
Subject: [PATCH 2/3] 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

From 3166490173e170d22c2316930484b2a4c7069160 Mon Sep 17 00:00:00 2001
From: Maria Fernanda Guimaraes <[email protected]>
Date: Fri, 14 Aug 2026 18:06:14 +0000
Subject: [PATCH 3/3] Add HLSL language check and use custom test markers

---
 clang-tools-extra/clangd/Hover.cpp                |  4 +++-
 clang-tools-extra/clangd/unittests/HoverTests.cpp | 13 +++++++------
 2 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/clang-tools-extra/clangd/Hover.cpp 
b/clang-tools-extra/clangd/Hover.cpp
index 3f96bffff298d..32612ef6c5431 100644
--- a/clang-tools-extra/clangd/Hover.cpp
+++ b/clang-tools-extra/clangd/Hover.cpp
@@ -1014,7 +1014,9 @@ std::optional<HoverInfo> getHoverContents(const 
SelectionTree::Node *N,
 std::optional<HoverInfo> getHoverContents(const Attr *A, ParsedAST &AST) {
   HoverInfo HI;
 
-  if (llvm::isa<RootSignatureAttr>(A)) {
+  if (AST.getLangOpts().HLSL && llvm::isa<RootSignatureAttr>(A)) {
+    // We do not use pretty print here because it would expose the internal
+    // string/macro representation instead of the original source attribute.
     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 3ae86a4b039f4..797c06b2bf260 100644
--- a/clang-tools-extra/clangd/unittests/HoverTests.cpp
+++ b/clang-tools-extra/clangd/unittests/HoverTests.cpp
@@ -5432,11 +5432,13 @@ TEST(Hover, HLSLRegisterAttributeRange) {
 }
 
 TEST(Hover, HLSLRootSignature) {
-  Annotations T(R"hlsl(
-    #define RS_CBV "CBV(b0)"
-    [^RootSignature(RS_CBV)]
-    void CS_ValidCBV() {}
-  )hlsl");
+  Annotations T(
+      R"hlsl(
+        #define RS_CBV "CBV(b0)"
+        [^RootSignature(RS_CBV)]
+        void main() {}
+      )hlsl",
+      Annotations::Markers().setRangeBegin("{{").setRangeEnd("}}"));
 
   TestTU TU = TestTU::withCode(T.code());
   configureHLSL(TU);
@@ -5444,7 +5446,6 @@ TEST(Hover, HLSLRootSignature) {
   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

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to