Skip to content

Commit 24369b3

Browse files
committed
extend invalid_token diagnostic to flag parsing
1 parent 1d95cb6 commit 24369b3

File tree

3 files changed

+26
-6
lines changed

3 files changed

+26
-6
lines changed

clang/include/clang/Parse/ParseHLSLRootSignature.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,10 @@ class RootSignatureParser {
147147
parseComparisonFunc(RootSignatureToken::Kind Context);
148148
std::optional<llvm::dxbc::StaticBorderColor>
149149
parseStaticBorderColor(RootSignatureToken::Kind Context);
150-
std::optional<llvm::dxbc::RootDescriptorFlags> parseRootDescriptorFlags();
151-
std::optional<llvm::dxbc::DescriptorRangeFlags> parseDescriptorRangeFlags();
150+
std::optional<llvm::dxbc::RootDescriptorFlags>
151+
parseRootDescriptorFlags(RootSignatureToken::Kind Context);
152+
std::optional<llvm::dxbc::DescriptorRangeFlags>
153+
parseDescriptorRangeFlags(RootSignatureToken::Kind Context);
152154

153155
/// Use NumericLiteralParser to convert CurToken.NumSpelling into a unsigned
154156
/// 32-bit integer

clang/lib/Parse/ParseHLSLRootSignature.cpp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -555,7 +555,7 @@ RootSignatureParser::parseRootDescriptorParams(TokenKind DescKind,
555555
if (consumeExpectedToken(TokenKind::pu_equal))
556556
return std::nullopt;
557557

558-
auto Flags = parseRootDescriptorFlags();
558+
auto Flags = parseRootDescriptorFlags(TokenKind::kw_flags);
559559
if (!Flags.has_value())
560560
return std::nullopt;
561561
Params.Flags = Flags;
@@ -656,7 +656,7 @@ RootSignatureParser::parseDescriptorTableClauseParams(TokenKind ClauseKind,
656656
if (consumeExpectedToken(TokenKind::pu_equal))
657657
return std::nullopt;
658658

659-
auto Flags = parseDescriptorRangeFlags();
659+
auto Flags = parseDescriptorRangeFlags(TokenKind::kw_flags);
660660
if (!Flags.has_value())
661661
return std::nullopt;
662662
Params.Flags = Flags;
@@ -1102,7 +1102,7 @@ RootSignatureParser::parseStaticBorderColor(TokenKind Context) {
11021102
}
11031103

11041104
std::optional<llvm::dxbc::RootDescriptorFlags>
1105-
RootSignatureParser::parseRootDescriptorFlags() {
1105+
RootSignatureParser::parseRootDescriptorFlags(TokenKind Context) {
11061106
assert(CurToken.TokKind == TokenKind::pu_equal &&
11071107
"Expects to only be invoked starting at given keyword");
11081108

@@ -1134,14 +1134,19 @@ RootSignatureParser::parseRootDescriptorFlags() {
11341134
default:
11351135
llvm_unreachable("Switch for consumed enum token was not provided");
11361136
}
1137+
} else {
1138+
consumeNextToken(); // consume token to point at invalid token
1139+
reportDiag(diag::err_hlsl_invalid_token)
1140+
<< /*value=*/1 << /*value of*/ Context;
1141+
return std::nullopt;
11371142
}
11381143
} while (tryConsumeExpectedToken(TokenKind::pu_or));
11391144

11401145
return Flags;
11411146
}
11421147

11431148
std::optional<llvm::dxbc::DescriptorRangeFlags>
1144-
RootSignatureParser::parseDescriptorRangeFlags() {
1149+
RootSignatureParser::parseDescriptorRangeFlags(TokenKind Context) {
11451150
assert(CurToken.TokKind == TokenKind::pu_equal &&
11461151
"Expects to only be invoked starting at given keyword");
11471152

@@ -1173,6 +1178,11 @@ RootSignatureParser::parseDescriptorRangeFlags() {
11731178
default:
11741179
llvm_unreachable("Switch for consumed enum token was not provided");
11751180
}
1181+
} else {
1182+
consumeNextToken(); // consume token to point at invalid token
1183+
reportDiag(diag::err_hlsl_invalid_token)
1184+
<< /*value=*/1 << /*value of*/ Context;
1185+
return std::nullopt;
11761186
}
11771187
} while (tryConsumeExpectedToken(TokenKind::pu_or));
11781188

clang/test/SemaHLSL/RootSignature-err.hlsl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,3 +91,11 @@ void bad_root_signature_19() {}
9191
// expected-error@+1 {{invalid value of borderColor}}
9292
[RootSignature("StaticSampler(s0, borderColor = borderColor_typo)")]
9393
void bad_root_signature_20() {}
94+
95+
// expected-error@+1 {{invalid value of flags}}
96+
[RootSignature("CBV(b0, flags = DATA_VOLATILE | root_descriptor_flag_typo)")]
97+
void bad_root_signature_21() {}
98+
99+
// expected-error@+1 {{invalid value of flags}}
100+
[RootSignature("DescriptorTable(SRV(t0, flags = descriptor_range_flag_typo)")]
101+
void bad_root_signature_22() {}

0 commit comments

Comments
 (0)