[clang] [HLSL][RootSignature] Add bounded parameter validations of Root Elements for non-flag values (PR #145795)

Finn Plummer via cfe-commits cfe-commits at lists.llvm.org
Wed Jun 25 15:47:38 PDT 2025


https://github.com/inbelic updated https://github.com/llvm/llvm-project/pull/145795

>From 7e3f1398ae2ba147822f96dd262a2c6127f0ff68 Mon Sep 17 00:00:00 2001
From: Finn Plummer <canadienfinn at gmail.com>
Date: Wed, 25 Jun 2025 18:16:12 +0000
Subject: [PATCH 1/8] simple prototype first error

---
 .../clang/Basic/DiagnosticSemaKinds.td        |  2 ++
 clang/lib/Sema/SemaHLSL.cpp                   | 23 ++++++++++++++++++-
 clang/test/SemaHLSL/RootSignature-err.hlsl    |  3 +++
 3 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index 6eba0619883d3..f41c9f15e2585 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -13059,6 +13059,8 @@ def err_invalid_hlsl_resource_type: Error<
 def err_hlsl_spirv_only: Error<"%0 is only available for the SPIR-V target">;
 def err_hlsl_vk_literal_must_contain_constant: Error<"the argument to vk::Literal must be a vk::integral_constant">;
 
+def err_hlsl_invalid_parameter : Error<"finns error">;
+
 def subst_hlsl_format_ranges: TextSubstitution<
   "%select{t|u|b|s}0[%1;%select{%3]|unbounded)}2">;
 
diff --git a/clang/lib/Sema/SemaHLSL.cpp b/clang/lib/Sema/SemaHLSL.cpp
index 0974ccbf9267c..a643d2e02f304 100644
--- a/clang/lib/Sema/SemaHLSL.cpp
+++ b/clang/lib/Sema/SemaHLSL.cpp
@@ -1078,6 +1078,27 @@ void SemaHLSL::ActOnFinishRootSignatureDecl(
 
 bool SemaHLSL::handleRootSignatureDecl(HLSLRootSignatureDecl *D,
                                        SourceLocation Loc) {
+  // Define some common error handling functions
+
+  bool HadError = false;
+  auto ReportError = [this, Loc, &HadError]() {
+    HadError = true;
+    this->Diag(Loc, diag::err_hlsl_invalid_parameter);
+  };
+
+  auto VerifyRegister = [ReportError](uint32_t Register) {
+    if (Register == ~0u)
+      ReportError();
+  };
+
+  // Iterate through the elements and do basic validations
+  for (const llvm::hlsl::rootsig::RootElement &Elem : D->getRootElements()) {
+    if (const auto *Descriptor =
+            std::get_if<llvm::hlsl::rootsig::RootDescriptor>(&Elem)) {
+      VerifyRegister(Descriptor->Reg.Number);
+    }
+  }
+
   // The following conducts analysis on resource ranges to detect and report
   // any overlaps in resource ranges.
   //
@@ -1247,7 +1268,7 @@ bool SemaHLSL::handleRootSignatureDecl(HLSLRootSignatureDecl *D,
         ReportOverlap(&Info, Overlapping.value());
   }
 
-  return HadOverlap;
+  return HadError | HadOverlap;
 }
 
 void SemaHLSL::handleRootSignatureAttr(Decl *D, const ParsedAttr &AL) {
diff --git a/clang/test/SemaHLSL/RootSignature-err.hlsl b/clang/test/SemaHLSL/RootSignature-err.hlsl
index f544247f4db2a..023d5757040c0 100644
--- a/clang/test/SemaHLSL/RootSignature-err.hlsl
+++ b/clang/test/SemaHLSL/RootSignature-err.hlsl
@@ -18,3 +18,6 @@ void bad_root_signature_3() {}
 
 [RootSignature("DescriptorTable(), invalid")] // expected-error {{expected end of stream to denote end of parameters, or, another valid parameter of RootSignature}}
 void bad_root_signature_4() {}
+
+[RootSignature("CBV(b4294967295)")]  // expected-error {{finns error}}
+void bad_root_signature_5() {}

>From 08b76795eec849040071bac6aa3e79fc61def85e Mon Sep 17 00:00:00 2001
From: Finn Plummer <canadienfinn at gmail.com>
Date: Wed, 25 Jun 2025 18:22:02 +0000
Subject: [PATCH 2/8] expand for space

---
 clang/lib/Sema/SemaHLSL.cpp                | 8 +++++++-
 clang/test/SemaHLSL/RootSignature-err.hlsl | 3 +++
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Sema/SemaHLSL.cpp b/clang/lib/Sema/SemaHLSL.cpp
index a643d2e02f304..703005a044a0f 100644
--- a/clang/lib/Sema/SemaHLSL.cpp
+++ b/clang/lib/Sema/SemaHLSL.cpp
@@ -1079,7 +1079,6 @@ void SemaHLSL::ActOnFinishRootSignatureDecl(
 bool SemaHLSL::handleRootSignatureDecl(HLSLRootSignatureDecl *D,
                                        SourceLocation Loc) {
   // Define some common error handling functions
-
   bool HadError = false;
   auto ReportError = [this, Loc, &HadError]() {
     HadError = true;
@@ -1091,11 +1090,18 @@ bool SemaHLSL::handleRootSignatureDecl(HLSLRootSignatureDecl *D,
       ReportError();
   };
 
+  auto VerifySpace = [ReportError](uint32_t Space) {
+    // [0xfffffff0, 0xffffffff] is reserverd system namespace
+    if (0xfffffff0 <= Space)
+      ReportError();
+  };
+
   // Iterate through the elements and do basic validations
   for (const llvm::hlsl::rootsig::RootElement &Elem : D->getRootElements()) {
     if (const auto *Descriptor =
             std::get_if<llvm::hlsl::rootsig::RootDescriptor>(&Elem)) {
       VerifyRegister(Descriptor->Reg.Number);
+      VerifySpace(Descriptor->Space);
     }
   }
 
diff --git a/clang/test/SemaHLSL/RootSignature-err.hlsl b/clang/test/SemaHLSL/RootSignature-err.hlsl
index 023d5757040c0..1525bee5f672e 100644
--- a/clang/test/SemaHLSL/RootSignature-err.hlsl
+++ b/clang/test/SemaHLSL/RootSignature-err.hlsl
@@ -21,3 +21,6 @@ void bad_root_signature_4() {}
 
 [RootSignature("CBV(b4294967295)")]  // expected-error {{finns error}}
 void bad_root_signature_5() {}
+
+[RootSignature("CBV(b0, space = 4294967280)")]  // expected-error {{finns error}}
+void bad_root_signature_5() {}

>From 135242e0531e597a2a12830a45566b9440a4ae35 Mon Sep 17 00:00:00 2001
From: Finn Plummer <canadienfinn at gmail.com>
Date: Wed, 25 Jun 2025 18:28:56 +0000
Subject: [PATCH 3/8] expand basic validation to other element types

---
 clang/lib/Sema/SemaHLSL.cpp                | 13 +++++++++++++
 clang/test/SemaHLSL/RootSignature-err.hlsl | 22 +++++++++++++++++++---
 2 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/clang/lib/Sema/SemaHLSL.cpp b/clang/lib/Sema/SemaHLSL.cpp
index 703005a044a0f..4bcd6415e2b53 100644
--- a/clang/lib/Sema/SemaHLSL.cpp
+++ b/clang/lib/Sema/SemaHLSL.cpp
@@ -1102,6 +1102,19 @@ bool SemaHLSL::handleRootSignatureDecl(HLSLRootSignatureDecl *D,
             std::get_if<llvm::hlsl::rootsig::RootDescriptor>(&Elem)) {
       VerifyRegister(Descriptor->Reg.Number);
       VerifySpace(Descriptor->Space);
+    } else if (const auto *Constants =
+                 std::get_if<llvm::hlsl::rootsig::RootConstants>(&Elem)) {
+      VerifyRegister(Constants->Reg.Number);
+      VerifySpace(Constants->Space);
+    } else if (const auto *Sampler =
+                   std::get_if<llvm::hlsl::rootsig::StaticSampler>(&Elem)) {
+      VerifyRegister(Sampler->Reg.Number);
+      VerifySpace(Sampler->Space);
+    } else if (const auto *Clause =
+                   std::get_if<llvm::hlsl::rootsig::DescriptorTableClause>(
+                       &Elem)) {
+      VerifyRegister(Clause->Reg.Number);
+      VerifySpace(Clause->Space);
     }
   }
 
diff --git a/clang/test/SemaHLSL/RootSignature-err.hlsl b/clang/test/SemaHLSL/RootSignature-err.hlsl
index 1525bee5f672e..e893652480585 100644
--- a/clang/test/SemaHLSL/RootSignature-err.hlsl
+++ b/clang/test/SemaHLSL/RootSignature-err.hlsl
@@ -19,8 +19,24 @@ void bad_root_signature_3() {}
 [RootSignature("DescriptorTable(), invalid")] // expected-error {{expected end of stream to denote end of parameters, or, another valid parameter of RootSignature}}
 void bad_root_signature_4() {}
 
-[RootSignature("CBV(b4294967295)")]  // expected-error {{finns error}}
-void bad_root_signature_5() {}
+// Basic validation of register value and space
 
-[RootSignature("CBV(b0, space = 4294967280)")]  // expected-error {{finns error}}
+// expected-error at +2 {{finns error}}
+// expected-error at +1 {{finns error}}
+[RootSignature("CBV(b4294967295, space = 4294967280)")]
 void bad_root_signature_5() {}
+
+// expected-error at +2 {{finns error}}
+// expected-error at +1 {{finns error}}
+[RootSignature("RootConstants(b4294967295, space = 4294967280, num32BitConstants = 1)")]
+void bad_root_signature_6() {}
+
+// expected-error at +2 {{finns error}}
+// expected-error at +1 {{finns error}}
+[RootSignature("StaticSampler(s4294967295, space = 4294967280)")]
+void bad_root_signature_7() {}
+
+// expected-error at +2 {{finns error}}
+// expected-error at +1 {{finns error}}
+[RootSignature("DescriptorTable(SRV(t4294967295, space = 4294967280))")]
+void bad_root_signature_8() {}

>From 23503e151058da7dca1c616e9930a31b5f2e2a82 Mon Sep 17 00:00:00 2001
From: Finn Plummer <canadienfinn at gmail.com>
Date: Wed, 25 Jun 2025 18:35:16 +0000
Subject: [PATCH 4/8] add validation of numDescriptors

---
 clang/lib/Sema/SemaHLSL.cpp                | 8 +++++++-
 clang/test/SemaHLSL/RootSignature-err.hlsl | 5 +++++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Sema/SemaHLSL.cpp b/clang/lib/Sema/SemaHLSL.cpp
index 4bcd6415e2b53..5bd14cee41e99 100644
--- a/clang/lib/Sema/SemaHLSL.cpp
+++ b/clang/lib/Sema/SemaHLSL.cpp
@@ -1115,6 +1115,9 @@ bool SemaHLSL::handleRootSignatureDecl(HLSLRootSignatureDecl *D,
                        &Elem)) {
       VerifyRegister(Clause->Reg.Number);
       VerifySpace(Clause->Space);
+
+      if (Clause->NumDescriptors == 0)
+        ReportError();
     }
   }
 
@@ -1181,7 +1184,10 @@ bool SemaHLSL::handleRootSignatureDecl(HLSLRootSignatureDecl *D,
                        &Elem)) {
       RangeInfo Info;
       Info.LowerBound = Clause->Reg.Number;
-      assert(0 < Clause->NumDescriptors && "Verified as part of TODO(#129940)");
+      // Relevant error will have already been reported above and needs to be
+      // fixed before we can conduct range analysis, so shortcut error return
+      if (Clause->NumDescriptors == 0)
+        return true;
       Info.UpperBound = Clause->NumDescriptors == RangeInfo::Unbounded
                             ? RangeInfo::Unbounded
                             : Info.LowerBound + Clause->NumDescriptors -
diff --git a/clang/test/SemaHLSL/RootSignature-err.hlsl b/clang/test/SemaHLSL/RootSignature-err.hlsl
index e893652480585..82c47b329d2da 100644
--- a/clang/test/SemaHLSL/RootSignature-err.hlsl
+++ b/clang/test/SemaHLSL/RootSignature-err.hlsl
@@ -40,3 +40,8 @@ void bad_root_signature_7() {}
 // expected-error at +1 {{finns error}}
 [RootSignature("DescriptorTable(SRV(t4294967295, space = 4294967280))")]
 void bad_root_signature_8() {}
+
+// expected-error at +2 {{finns error}}
+// expected-error at +1 {{finns error}}
+[RootSignature("DescriptorTable(UAV(u0, numDescriptors = 0), Sampler(s0, numDescriptors = 0))")]
+void bad_root_signature_9() {}

>From 4d7d4660fc234c7fb80299fef5e8aec10e591d33 Mon Sep 17 00:00:00 2001
From: Finn Plummer <canadienfinn at gmail.com>
Date: Wed, 25 Jun 2025 18:53:40 +0000
Subject: [PATCH 5/8] add validation of StaticSamplers

---
 clang/lib/Sema/SemaHLSL.cpp                |  9 +++++++++
 clang/test/SemaHLSL/RootSignature-err.hlsl | 14 ++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/clang/lib/Sema/SemaHLSL.cpp b/clang/lib/Sema/SemaHLSL.cpp
index 5bd14cee41e99..95b3c73e06e48 100644
--- a/clang/lib/Sema/SemaHLSL.cpp
+++ b/clang/lib/Sema/SemaHLSL.cpp
@@ -45,6 +45,7 @@
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/TargetParser/Triple.h"
 #include <cstddef>
+#include <cmath>
 #include <iterator>
 #include <utility>
 
@@ -1110,6 +1111,14 @@ bool SemaHLSL::handleRootSignatureDecl(HLSLRootSignatureDecl *D,
                    std::get_if<llvm::hlsl::rootsig::StaticSampler>(&Elem)) {
       VerifyRegister(Sampler->Reg.Number);
       VerifySpace(Sampler->Space);
+
+      assert(!std::isnan(Sampler->MaxLOD) && !std::isnan(Sampler->MinLOD) &&
+             "By construction, parseFloatParam can't produce a NaN from a float_literal token");
+
+      if (16 < Sampler->MaxAnisotropy)
+        ReportError();
+      if (Sampler->MipLODBias < -16.f || 15.99 < Sampler->MipLODBias)
+        ReportError();
     } else if (const auto *Clause =
                    std::get_if<llvm::hlsl::rootsig::DescriptorTableClause>(
                        &Elem)) {
diff --git a/clang/test/SemaHLSL/RootSignature-err.hlsl b/clang/test/SemaHLSL/RootSignature-err.hlsl
index 82c47b329d2da..25fe7326e5e4c 100644
--- a/clang/test/SemaHLSL/RootSignature-err.hlsl
+++ b/clang/test/SemaHLSL/RootSignature-err.hlsl
@@ -45,3 +45,17 @@ void bad_root_signature_8() {}
 // expected-error at +1 {{finns error}}
 [RootSignature("DescriptorTable(UAV(u0, numDescriptors = 0), Sampler(s0, numDescriptors = 0))")]
 void bad_root_signature_9() {}
+
+#define ErroneousStaticSampler \
+  "StaticSampler(s0" \
+  "  maxAnisotropy = 17," \
+  ")"
+
+// expected-error at +2 {{finns error}}
+// expected-error at +1 {{finns error}}
+[RootSignature("StaticSampler(s0, maxAnisotropy = 17, mipLODBias = -16.000001)")]
+void bad_root_signature_10() {}
+
+// expected-error at +1 {{finns error}}
+[RootSignature("StaticSampler(s0, mipLODBias = 15.990001)")]
+void bad_root_signature_11() {}

>From b7bae3c2c35db25166940835357a2febff5687ec Mon Sep 17 00:00:00 2001
From: Finn Plummer <canadienfinn at gmail.com>
Date: Wed, 25 Jun 2025 21:31:08 +0000
Subject: [PATCH 6/8] add relevant error message

---
 .../clang/Basic/DiagnosticSemaKinds.td        |  2 +-
 clang/lib/Sema/SemaHLSL.cpp                   | 29 +++++++++++++------
 clang/test/SemaHLSL/RootSignature-err.hlsl    | 26 ++++++++---------
 3 files changed, 34 insertions(+), 23 deletions(-)

diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index f41c9f15e2585..294e33418fc33 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -13059,7 +13059,7 @@ def err_invalid_hlsl_resource_type: Error<
 def err_hlsl_spirv_only: Error<"%0 is only available for the SPIR-V target">;
 def err_hlsl_vk_literal_must_contain_constant: Error<"the argument to vk::Literal must be a vk::integral_constant">;
 
-def err_hlsl_invalid_parameter : Error<"finns error">;
+def err_hlsl_invalid_rootsig_parameter : Error<"parameter value must be in the range [%0, %1]">;
 
 def subst_hlsl_format_ranges: TextSubstitution<
   "%select{t|u|b|s}0[%1;%select{%3]|unbounded)}2">;
diff --git a/clang/lib/Sema/SemaHLSL.cpp b/clang/lib/Sema/SemaHLSL.cpp
index 95b3c73e06e48..53f39f29e2b27 100644
--- a/clang/lib/Sema/SemaHLSL.cpp
+++ b/clang/lib/Sema/SemaHLSL.cpp
@@ -1081,20 +1081,27 @@ bool SemaHLSL::handleRootSignatureDecl(HLSLRootSignatureDecl *D,
                                        SourceLocation Loc) {
   // Define some common error handling functions
   bool HadError = false;
-  auto ReportError = [this, Loc, &HadError]() {
+  auto ReportError = [this, Loc, &HadError](uint32_t LowerBound, uint32_t UpperBound) {
     HadError = true;
-    this->Diag(Loc, diag::err_hlsl_invalid_parameter);
+    this->Diag(Loc, diag::err_hlsl_invalid_rootsig_parameter)
+      << LowerBound << UpperBound;
+  };
+
+  auto ReportFloatError = [this, Loc, &HadError](float LowerBound, float UpperBound) {
+    HadError = true;
+    this->Diag(Loc, diag::err_hlsl_invalid_rootsig_parameter)
+      << std::to_string(LowerBound) << std::to_string(UpperBound);
   };
 
   auto VerifyRegister = [ReportError](uint32_t Register) {
     if (Register == ~0u)
-      ReportError();
+      ReportError(0, 0xfffffffe);
   };
 
   auto VerifySpace = [ReportError](uint32_t Space) {
-    // [0xfffffff0, 0xffffffff] is reserverd system namespace
+    // [0xfffffff0, 0xffffffff] is reserved system namespace
     if (0xfffffff0 <= Space)
-      ReportError();
+      ReportError(0, 0xffffffef);
   };
 
   // Iterate through the elements and do basic validations
@@ -1116,17 +1123,21 @@ bool SemaHLSL::handleRootSignatureDecl(HLSLRootSignatureDecl *D,
              "By construction, parseFloatParam can't produce a NaN from a float_literal token");
 
       if (16 < Sampler->MaxAnisotropy)
-        ReportError();
+        ReportError(0, 16);
       if (Sampler->MipLODBias < -16.f || 15.99 < Sampler->MipLODBias)
-        ReportError();
+        ReportFloatError(-16.f, 15.99);
     } else if (const auto *Clause =
                    std::get_if<llvm::hlsl::rootsig::DescriptorTableClause>(
                        &Elem)) {
       VerifyRegister(Clause->Reg.Number);
       VerifySpace(Clause->Space);
 
-      if (Clause->NumDescriptors == 0)
-        ReportError();
+      if (Clause->NumDescriptors == 0) {
+        // NumDescriptor could techincally be ~0u but that is reserved for
+        // unbounded, so the diagnostic will not report that as a valid int
+        // value
+        ReportError(1, 0xfffffffe);
+      }
     }
   }
 
diff --git a/clang/test/SemaHLSL/RootSignature-err.hlsl b/clang/test/SemaHLSL/RootSignature-err.hlsl
index 25fe7326e5e4c..61db61f6cceb4 100644
--- a/clang/test/SemaHLSL/RootSignature-err.hlsl
+++ b/clang/test/SemaHLSL/RootSignature-err.hlsl
@@ -21,28 +21,28 @@ void bad_root_signature_4() {}
 
 // Basic validation of register value and space
 
-// expected-error at +2 {{finns error}}
-// expected-error at +1 {{finns error}}
+// expected-error at +2 {{parameter value must be in the range [0, 4294967294]}}
+// expected-error at +1 {{parameter value must be in the range [0, 4294967279]}}
 [RootSignature("CBV(b4294967295, space = 4294967280)")]
 void bad_root_signature_5() {}
 
-// expected-error at +2 {{finns error}}
-// expected-error at +1 {{finns error}}
+// expected-error at +2 {{parameter value must be in the range [0, 4294967294]}}
+// expected-error at +1 {{parameter value must be in the range [0, 4294967279]}}
 [RootSignature("RootConstants(b4294967295, space = 4294967280, num32BitConstants = 1)")]
 void bad_root_signature_6() {}
 
-// expected-error at +2 {{finns error}}
-// expected-error at +1 {{finns error}}
+// expected-error at +2 {{parameter value must be in the range [0, 4294967294]}}
+// expected-error at +1 {{parameter value must be in the range [0, 4294967279]}}
 [RootSignature("StaticSampler(s4294967295, space = 4294967280)")]
 void bad_root_signature_7() {}
 
-// expected-error at +2 {{finns error}}
-// expected-error at +1 {{finns error}}
+// expected-error at +2 {{parameter value must be in the range [0, 4294967294]}}
+// expected-error at +1 {{parameter value must be in the range [0, 4294967279]}}
 [RootSignature("DescriptorTable(SRV(t4294967295, space = 4294967280))")]
 void bad_root_signature_8() {}
 
-// expected-error at +2 {{finns error}}
-// expected-error at +1 {{finns error}}
+// expected-error at +2 {{parameter value must be in the range [1, 4294967294]}}
+// expected-error at +1 {{parameter value must be in the range [1, 4294967294]}}
 [RootSignature("DescriptorTable(UAV(u0, numDescriptors = 0), Sampler(s0, numDescriptors = 0))")]
 void bad_root_signature_9() {}
 
@@ -51,11 +51,11 @@ void bad_root_signature_9() {}
   "  maxAnisotropy = 17," \
   ")"
 
-// expected-error at +2 {{finns error}}
-// expected-error at +1 {{finns error}}
+// expected-error at +2 {{parameter value must be in the range [0, 16]}}
+// expected-error at +1 {{parameter value must be in the range [-16.000000, 15.990000]}}
 [RootSignature("StaticSampler(s0, maxAnisotropy = 17, mipLODBias = -16.000001)")]
 void bad_root_signature_10() {}
 
-// expected-error at +1 {{finns error}}
+// expected-error at +1 {{parameter value must be in the range [-16.000000, 15.990000]}}
 [RootSignature("StaticSampler(s0, mipLODBias = 15.990001)")]
 void bad_root_signature_11() {}

>From e3d729841a7ff11ad1b541cf3156e09be3979cc0 Mon Sep 17 00:00:00 2001
From: Finn Plummer <canadienfinn at gmail.com>
Date: Wed, 25 Jun 2025 21:45:24 +0000
Subject: [PATCH 7/8] clang format

---
 clang/lib/Sema/SemaHLSL.cpp | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/clang/lib/Sema/SemaHLSL.cpp b/clang/lib/Sema/SemaHLSL.cpp
index 53f39f29e2b27..1132c0c28daa1 100644
--- a/clang/lib/Sema/SemaHLSL.cpp
+++ b/clang/lib/Sema/SemaHLSL.cpp
@@ -44,8 +44,8 @@
 #include "llvm/Support/DXILABI.h"
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/TargetParser/Triple.h"
-#include <cstddef>
 #include <cmath>
+#include <cstddef>
 #include <iterator>
 #include <utility>
 
@@ -1081,16 +1081,18 @@ bool SemaHLSL::handleRootSignatureDecl(HLSLRootSignatureDecl *D,
                                        SourceLocation Loc) {
   // Define some common error handling functions
   bool HadError = false;
-  auto ReportError = [this, Loc, &HadError](uint32_t LowerBound, uint32_t UpperBound) {
+  auto ReportError = [this, Loc, &HadError](uint32_t LowerBound,
+                                            uint32_t UpperBound) {
     HadError = true;
     this->Diag(Loc, diag::err_hlsl_invalid_rootsig_parameter)
-      << LowerBound << UpperBound;
+        << LowerBound << UpperBound;
   };
 
-  auto ReportFloatError = [this, Loc, &HadError](float LowerBound, float UpperBound) {
+  auto ReportFloatError = [this, Loc, &HadError](float LowerBound,
+                                                 float UpperBound) {
     HadError = true;
     this->Diag(Loc, diag::err_hlsl_invalid_rootsig_parameter)
-      << std::to_string(LowerBound) << std::to_string(UpperBound);
+        << std::to_string(LowerBound) << std::to_string(UpperBound);
   };
 
   auto VerifyRegister = [ReportError](uint32_t Register) {
@@ -1111,7 +1113,7 @@ bool SemaHLSL::handleRootSignatureDecl(HLSLRootSignatureDecl *D,
       VerifyRegister(Descriptor->Reg.Number);
       VerifySpace(Descriptor->Space);
     } else if (const auto *Constants =
-                 std::get_if<llvm::hlsl::rootsig::RootConstants>(&Elem)) {
+                   std::get_if<llvm::hlsl::rootsig::RootConstants>(&Elem)) {
       VerifyRegister(Constants->Reg.Number);
       VerifySpace(Constants->Space);
     } else if (const auto *Sampler =
@@ -1120,7 +1122,8 @@ bool SemaHLSL::handleRootSignatureDecl(HLSLRootSignatureDecl *D,
       VerifySpace(Sampler->Space);
 
       assert(!std::isnan(Sampler->MaxLOD) && !std::isnan(Sampler->MinLOD) &&
-             "By construction, parseFloatParam can't produce a NaN from a float_literal token");
+             "By construction, parseFloatParam can't produce a NaN from a "
+             "float_literal token");
 
       if (16 < Sampler->MaxAnisotropy)
         ReportError(0, 16);

>From 4505dfb8cc199434b2f545e064397c4dea7d4184 Mon Sep 17 00:00:00 2001
From: Finn Plummer <canadienfinn at gmail.com>
Date: Wed, 25 Jun 2025 22:47:20 +0000
Subject: [PATCH 8/8] self-review: fix invalid testcase

---
 clang/test/CodeGenHLSL/RootSignature.hlsl | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/clang/test/CodeGenHLSL/RootSignature.hlsl b/clang/test/CodeGenHLSL/RootSignature.hlsl
index 6618ca741aa9d..52f94dfaf52c7 100644
--- a/clang/test/CodeGenHLSL/RootSignature.hlsl
+++ b/clang/test/CodeGenHLSL/RootSignature.hlsl
@@ -76,7 +76,7 @@ void RootDescriptorsEntry() {}
 // CHECK-SAME: i32 2, i32 3, i32 5,
 
 // checking mipLODBias, maxAnisotropy, comparisonFunc, borderColor
-// CHECK-SAME: float 0x40403999A0000000, i32 9, i32 3, i32 2,
+// CHECK-SAME: float 0x4028E66660000000, i32 9, i32 3, i32 2,
 
 // checking minLOD, maxLOD
 // CHECK-SAME: float -1.280000e+02, float 1.280000e+02,
@@ -90,7 +90,7 @@ void RootDescriptorsEntry() {}
   " addressU = TEXTURE_ADDRESS_MIRROR, " \
   " addressV = TEXTURE_ADDRESS_CLAMP, " \
   " addressW = TEXTURE_ADDRESS_MIRRORONCE, " \
-  " mipLODBias = 32.45f, maxAnisotropy = 9, " \
+  " mipLODBias = 12.45f, maxAnisotropy = 9, " \
   " comparisonFunc = COMPARISON_EQUAL, " \
   " borderColor = STATIC_BORDER_COLOR_OPAQUE_WHITE, " \
   " minLOD = -128.f, maxLOD = 128.f, " \



More information about the cfe-commits mailing list