@@ -61,7 +61,7 @@ bool RootSignatureParser::Parse() {
6161}
6262
6363bool RootSignatureParser::ParseRootElement () {
64- if (ConsumeExpectedToken (TokenKind::kw_DescriptorTable))
64+ if (ConsumeExpectedToken (TokenKind::kw_DescriptorTable, diag::err_hlsl_expected_param, /* Context= */ TokenKind::kw_RootSignature ))
6565 return true ;
6666
6767 // Dispatch onto the correct parse method
@@ -117,7 +117,9 @@ bool RootSignatureParser::ParseDescriptorTable() {
117117
118118bool RootSignatureParser::ParseDescriptorTableClause () {
119119 if (ConsumeExpectedToken ({TokenKind::kw_CBV, TokenKind::kw_SRV,
120- TokenKind::kw_UAV, TokenKind::kw_Sampler}))
120+ TokenKind::kw_UAV, TokenKind::kw_Sampler},
121+ diag::err_hlsl_expected_param,
122+ /* Context=*/ TokenKind::kw_DescriptorTable))
121123 return true ;
122124
123125 DescriptorTableClause Clause;
@@ -139,11 +141,14 @@ bool RootSignatureParser::ParseDescriptorTableClause() {
139141 }
140142 Clause.SetDefaultFlags ();
141143
144+ // Store context of clause token type we are parsing
145+ TokenKind Context = CurToken.Kind ;
146+
142147 if (ConsumeExpectedToken (TokenKind::pu_l_paren, diag::err_expected_after, CurToken.Kind ))
143148 return true ;
144149
145150 // Consume mandatory Register paramater
146- if (ParseRegister (&Clause.Register ))
151+ if (ParseRegister (&Clause.Register , Context ))
147152 return true ;
148153
149154 // Define optional paramaters
@@ -198,7 +203,7 @@ bool RootSignatureParser::ParseOptionalParams(
198203 llvm::SmallDenseSet<TokenKind> Seen;
199204
200205 while (TryConsumeExpectedToken (TokenKind::pu_comma)) {
201- if (ConsumeExpectedToken (ParamKeywords))
206+ if (ConsumeExpectedToken (ParamKeywords, diag::err_hlsl_expected_param, Context ))
202207 return true ;
203208
204209 TokenKind ParamKind = CurToken.Kind ;
@@ -239,9 +244,11 @@ bool RootSignatureParser::HandleUIntLiteral(uint32_t &X) {
239244 return false ;
240245}
241246
242- bool RootSignatureParser::ParseRegister (Register *Register) {
247+ bool RootSignatureParser::ParseRegister (Register *Register, TokenKind Context ) {
243248 if (ConsumeExpectedToken (
244- {TokenKind::bReg, TokenKind::tReg, TokenKind::uReg, TokenKind::sReg }))
249+ {TokenKind::bReg, TokenKind::tReg, TokenKind::uReg, TokenKind::sReg },
250+ diag::err_hlsl_expected_param,
251+ Context))
245252 return true ;
246253
247254 switch (CurToken.Kind ) {
@@ -411,6 +418,7 @@ bool RootSignatureParser::ConsumeExpectedToken(ArrayRef<TokenKind> AnyExpected,
411418 break ;
412419 case diag::err_expected_either:
413420 case diag::err_expected_after:
421+ case diag::err_hlsl_expected_param:
414422 DB << FormatTokenKinds (AnyExpected) << FormatTokenKinds ({Context});
415423 break ;
416424 default : break ;
0 commit comments