@@ -263,7 +263,7 @@ std::optional<DescriptorTable> RootSignatureParser::parseDescriptorTable() {
263
263
if (consumeExpectedToken (TokenKind::pu_equal))
264
264
return std::nullopt;
265
265
266
- Visibility = parseShaderVisibility ();
266
+ Visibility = parseShaderVisibility (TokenKind::kw_visibility );
267
267
if (!Visibility.has_value ())
268
268
return std::nullopt;
269
269
} else {
@@ -480,7 +480,7 @@ RootSignatureParser::parseRootConstantParams() {
480
480
if (consumeExpectedToken (TokenKind::pu_equal))
481
481
return std::nullopt;
482
482
483
- auto Visibility = parseShaderVisibility ();
483
+ auto Visibility = parseShaderVisibility (TokenKind::kw_visibility );
484
484
if (!Visibility.has_value ())
485
485
return std::nullopt;
486
486
Params.Visibility = Visibility;
@@ -541,7 +541,7 @@ RootSignatureParser::parseRootDescriptorParams(TokenKind DescKind,
541
541
if (consumeExpectedToken (TokenKind::pu_equal))
542
542
return std::nullopt;
543
543
544
- auto Visibility = parseShaderVisibility ();
544
+ auto Visibility = parseShaderVisibility (TokenKind::kw_visibility );
545
545
if (!Visibility.has_value ())
546
546
return std::nullopt;
547
547
Params.Visibility = Visibility;
@@ -702,7 +702,7 @@ RootSignatureParser::parseStaticSamplerParams() {
702
702
if (consumeExpectedToken (TokenKind::pu_equal))
703
703
return std::nullopt;
704
704
705
- auto Filter = parseSamplerFilter ();
705
+ auto Filter = parseSamplerFilter (TokenKind::kw_filter );
706
706
if (!Filter.has_value ())
707
707
return std::nullopt;
708
708
Params.Filter = Filter;
@@ -716,7 +716,7 @@ RootSignatureParser::parseStaticSamplerParams() {
716
716
if (consumeExpectedToken (TokenKind::pu_equal))
717
717
return std::nullopt;
718
718
719
- auto AddressU = parseTextureAddressMode ();
719
+ auto AddressU = parseTextureAddressMode (TokenKind::kw_addressU );
720
720
if (!AddressU.has_value ())
721
721
return std::nullopt;
722
722
Params.AddressU = AddressU;
@@ -730,7 +730,7 @@ RootSignatureParser::parseStaticSamplerParams() {
730
730
if (consumeExpectedToken (TokenKind::pu_equal))
731
731
return std::nullopt;
732
732
733
- auto AddressV = parseTextureAddressMode ();
733
+ auto AddressV = parseTextureAddressMode (TokenKind::kw_addressV );
734
734
if (!AddressV.has_value ())
735
735
return std::nullopt;
736
736
Params.AddressV = AddressV;
@@ -744,7 +744,7 @@ RootSignatureParser::parseStaticSamplerParams() {
744
744
if (consumeExpectedToken (TokenKind::pu_equal))
745
745
return std::nullopt;
746
746
747
- auto AddressW = parseTextureAddressMode ();
747
+ auto AddressW = parseTextureAddressMode (TokenKind::kw_addressW );
748
748
if (!AddressW.has_value ())
749
749
return std::nullopt;
750
750
Params.AddressW = AddressW;
@@ -786,7 +786,7 @@ RootSignatureParser::parseStaticSamplerParams() {
786
786
if (consumeExpectedToken (TokenKind::pu_equal))
787
787
return std::nullopt;
788
788
789
- auto CompFunc = parseComparisonFunc ();
789
+ auto CompFunc = parseComparisonFunc (TokenKind::kw_comparisonFunc );
790
790
if (!CompFunc.has_value ())
791
791
return std::nullopt;
792
792
Params.CompFunc = CompFunc;
@@ -800,7 +800,7 @@ RootSignatureParser::parseStaticSamplerParams() {
800
800
if (consumeExpectedToken (TokenKind::pu_equal))
801
801
return std::nullopt;
802
802
803
- auto BorderColor = parseStaticBorderColor ();
803
+ auto BorderColor = parseStaticBorderColor (TokenKind::kw_borderColor );
804
804
if (!BorderColor.has_value ())
805
805
return std::nullopt;
806
806
Params.BorderColor = BorderColor;
@@ -856,7 +856,7 @@ RootSignatureParser::parseStaticSamplerParams() {
856
856
if (consumeExpectedToken (TokenKind::pu_equal))
857
857
return std::nullopt;
858
858
859
- auto Visibility = parseShaderVisibility ();
859
+ auto Visibility = parseShaderVisibility (TokenKind::kw_visibility );
860
860
if (!Visibility.has_value ())
861
861
return std::nullopt;
862
862
Params.Visibility = Visibility;
@@ -952,7 +952,7 @@ std::optional<float> RootSignatureParser::parseFloatParam() {
952
952
}
953
953
954
954
std::optional<llvm::dxbc::ShaderVisibility>
955
- RootSignatureParser::parseShaderVisibility () {
955
+ RootSignatureParser::parseShaderVisibility (TokenKind Context ) {
956
956
assert (CurToken.TokKind == TokenKind::pu_equal &&
957
957
" Expects to only be invoked starting at given keyword" );
958
958
@@ -961,8 +961,12 @@ RootSignatureParser::parseShaderVisibility() {
961
961
#include " clang/Lex/HLSLRootSignatureTokenKinds.def"
962
962
};
963
963
964
- if (!tryConsumeExpectedToken (Expected))
964
+ if (!tryConsumeExpectedToken (Expected)) {
965
+ consumeNextToken (); // consume token to point at invalid token
966
+ reportDiag (diag::err_hlsl_invalid_token)
967
+ << /* value=*/ 1 << /* value of*/ Context;
965
968
return std::nullopt;
969
+ }
966
970
967
971
switch (CurToken.TokKind ) {
968
972
#define SHADER_VISIBILITY_ENUM (NAME, LIT ) \
@@ -978,7 +982,7 @@ RootSignatureParser::parseShaderVisibility() {
978
982
}
979
983
980
984
std::optional<llvm::dxbc::SamplerFilter>
981
- RootSignatureParser::parseSamplerFilter () {
985
+ RootSignatureParser::parseSamplerFilter (TokenKind Context ) {
982
986
assert (CurToken.TokKind == TokenKind::pu_equal &&
983
987
" Expects to only be invoked starting at given keyword" );
984
988
@@ -987,8 +991,12 @@ RootSignatureParser::parseSamplerFilter() {
987
991
#include " clang/Lex/HLSLRootSignatureTokenKinds.def"
988
992
};
989
993
990
- if (!tryConsumeExpectedToken (Expected))
994
+ if (!tryConsumeExpectedToken (Expected)) {
995
+ consumeNextToken (); // consume token to point at invalid token
996
+ reportDiag (diag::err_hlsl_invalid_token)
997
+ << /* value=*/ 1 << /* value of*/ Context;
991
998
return std::nullopt;
999
+ }
992
1000
993
1001
switch (CurToken.TokKind ) {
994
1002
#define FILTER_ENUM (NAME, LIT ) \
@@ -1004,7 +1012,7 @@ RootSignatureParser::parseSamplerFilter() {
1004
1012
}
1005
1013
1006
1014
std::optional<llvm::dxbc::TextureAddressMode>
1007
- RootSignatureParser::parseTextureAddressMode () {
1015
+ RootSignatureParser::parseTextureAddressMode (TokenKind Context ) {
1008
1016
assert (CurToken.TokKind == TokenKind::pu_equal &&
1009
1017
" Expects to only be invoked starting at given keyword" );
1010
1018
@@ -1013,8 +1021,12 @@ RootSignatureParser::parseTextureAddressMode() {
1013
1021
#include " clang/Lex/HLSLRootSignatureTokenKinds.def"
1014
1022
};
1015
1023
1016
- if (!tryConsumeExpectedToken (Expected))
1024
+ if (!tryConsumeExpectedToken (Expected)) {
1025
+ consumeNextToken (); // consume token to point at invalid token
1026
+ reportDiag (diag::err_hlsl_invalid_token)
1027
+ << /* value=*/ 1 << /* value of*/ Context;
1017
1028
return std::nullopt;
1029
+ }
1018
1030
1019
1031
switch (CurToken.TokKind ) {
1020
1032
#define TEXTURE_ADDRESS_MODE_ENUM (NAME, LIT ) \
@@ -1030,7 +1042,7 @@ RootSignatureParser::parseTextureAddressMode() {
1030
1042
}
1031
1043
1032
1044
std::optional<llvm::dxbc::ComparisonFunc>
1033
- RootSignatureParser::parseComparisonFunc () {
1045
+ RootSignatureParser::parseComparisonFunc (TokenKind Context ) {
1034
1046
assert (CurToken.TokKind == TokenKind::pu_equal &&
1035
1047
" Expects to only be invoked starting at given keyword" );
1036
1048
@@ -1039,8 +1051,12 @@ RootSignatureParser::parseComparisonFunc() {
1039
1051
#include " clang/Lex/HLSLRootSignatureTokenKinds.def"
1040
1052
};
1041
1053
1042
- if (!tryConsumeExpectedToken (Expected))
1054
+ if (!tryConsumeExpectedToken (Expected)) {
1055
+ consumeNextToken (); // consume token to point at invalid token
1056
+ reportDiag (diag::err_hlsl_invalid_token)
1057
+ << /* value=*/ 1 << /* value of*/ Context;
1043
1058
return std::nullopt;
1059
+ }
1044
1060
1045
1061
switch (CurToken.TokKind ) {
1046
1062
#define COMPARISON_FUNC_ENUM (NAME, LIT ) \
@@ -1056,7 +1072,7 @@ RootSignatureParser::parseComparisonFunc() {
1056
1072
}
1057
1073
1058
1074
std::optional<llvm::dxbc::StaticBorderColor>
1059
- RootSignatureParser::parseStaticBorderColor () {
1075
+ RootSignatureParser::parseStaticBorderColor (TokenKind Context ) {
1060
1076
assert (CurToken.TokKind == TokenKind::pu_equal &&
1061
1077
" Expects to only be invoked starting at given keyword" );
1062
1078
@@ -1065,8 +1081,12 @@ RootSignatureParser::parseStaticBorderColor() {
1065
1081
#include " clang/Lex/HLSLRootSignatureTokenKinds.def"
1066
1082
};
1067
1083
1068
- if (!tryConsumeExpectedToken (Expected))
1084
+ if (!tryConsumeExpectedToken (Expected)) {
1085
+ consumeNextToken (); // consume token to point at invalid token
1086
+ reportDiag (diag::err_hlsl_invalid_token)
1087
+ << /* value=*/ 1 << /* value of*/ Context;
1069
1088
return std::nullopt;
1089
+ }
1070
1090
1071
1091
switch (CurToken.TokKind ) {
1072
1092
#define STATIC_BORDER_COLOR_ENUM (NAME, LIT ) \
0 commit comments