File tree Expand file tree Collapse file tree 3 files changed +50
-0
lines changed Expand file tree Collapse file tree 3 files changed +50
-0
lines changed Original file line number Diff line number Diff line change @@ -1025,6 +1025,8 @@ def warn_hlsl_effect_technique : Warning <
10251025def warn_hlsl_semantic_identifier_collision : Warning <
10261026 "'%0' interpreted as semantic; previous definition(s) ignored">,
10271027 InGroup< HLSLSemanticIdentifierCollision >;
1028+ def err_hlsl_expected_hlsl_attribute : Error <
1029+ "Unexpected '(' in semantic annotation. Did you mean 'packoffset()' or 'register()'?">;
10281030def err_hlsl_enum : Error<
10291031 "enum is unsupported in HLSL before 2017">;
10301032def warn_hlsl_new_feature : Warning <
Original file line number Diff line number Diff line change @@ -633,6 +633,16 @@ bool Parser::MaybeParseHLSLAttributes(std::vector<hlsl::UnusualAnnotation *> &ta
633633 Actions.DiagnoseSemanticDecl (pUA);
634634 ConsumeToken (); // consume semantic
635635
636+ // Likely a misspell of register(), packoffset() or a mismatching macro:
637+ // both registr() and packofset() would cause a crash without this fix.
638+
639+ if (Tok.is (tok::l_paren)) {
640+ Diag (Tok.getLocation (), diag::err_hlsl_expected_hlsl_attribute);
641+ ConsumeParen ();
642+ SkipUntil (tok::r_paren, StopAtSemi); // skip through )
643+ return true ;
644+ }
645+
636646 target.push_back (pUA);
637647 }
638648 else {
Original file line number Diff line number Diff line change 1+ // RUN: %dxc -T lib_6_3 -verify %s
2+
3+ // expected-error@+1 {{Unexpected '(' in semantic annotation. Did you mean 'packoffset()' or 'register()'?}}
4+ RWStructuredBuffer <float4 > uav1 : registers (u3);
5+
6+ // expected-error@+1 {{Unexpected '(' in semantic annotation. Did you mean 'packoffset()' or 'register()'?}}
7+ RWStructuredBuffer <float4 > uav2 : registers (outer_space);
8+
9+ // expected-error@+1 {{Unexpected '(' in semantic annotation. Did you mean 'packoffset()' or 'register()'?}}
10+ RWStructuredBuffer <float4 > uav3 : UNDEFINED_MACRO1 (u3);
11+
12+ // expected-error@+1 {{Unexpected '(' in semantic annotation. Did you mean 'packoffset()' or 'register()'?}}
13+ RWStructuredBuffer <float4 > uav4 : UNDEFINED_MACRO (something, more, complex);
14+
15+ cbuffer buf {
16+
17+ // expected-error@+1 {{Unexpected '(' in semantic annotation. Did you mean 'packoffset()' or 'register()'?}}
18+ float4 v0 : packoffsets (c0);
19+
20+ // expected-error@+1 {{Unexpected '(' in semantic annotation. Did you mean 'packoffset()' or 'register()'?}}
21+ float4 v1 : packoffsets (invalid_syntax);
22+
23+ // expected-error@+1 {{Unexpected '(' in semantic annotation. Did you mean 'packoffset()' or 'register()'?}}
24+ float v2 : UNDEFINED_MACRO2 (c0.w);
25+
26+ // expected-error@+1 {{Unexpected '(' in semantic annotation. Did you mean 'packoffset()' or 'register()'?}}
27+ float v3 : UNDEFINED_MACRO (something, more, complex);
28+ };
29+
30+ [shader ("pixel" )]
31+ float4 main (): SV_Target
32+ {
33+ uav1[0 ] = v0;
34+ uav2[0 ] = v1;
35+ uav3[0 ] = v2;
36+ uav4[0 ] = v3;
37+ return 0. xxxx;
38+ }
You can’t perform that action at this time.
0 commit comments