[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