@@ -48,94 +48,104 @@ struct TwoFloats {
4848// CHECK: HLSLResourceClassAttr {{.*}} Implicit CBuffer
4949// CHECK: HLSLResourceAttr {{.*}} Implicit CBuffer
5050cbuffer CB {
51- // CHECK: VarDecl {{.*}} col:9 used a1 'hlsl_constant float'
51+ // CHECK: VarDecl {{.*}} used a1 'hlsl_constant float'
5252 float a1;
53- // CHECK: CXXRecordDecl {{.*}} implicit referenced class __layout_CB definition
54- // CHECK: FieldDecl {{.*}} a1 'float'
53+ // CHECK: CXXRecordDecl {{.*}} implicit referenced struct __cblayout_CB definition
54+ // CHECK: PackedAttr
55+ // CHECK-NEXT: FieldDecl {{.*}} a1 'float'
5556}
56- _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (OneFloat, __layout_CB ), "" );
57+ _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (OneFloat, __cblayout_CB ), "" );
5758
5859// Check that buffer layout struct does not include resources or empty types
59- // CHECK: HLSLBufferDecl {{.*}} line:62 :9 cbuffer CB
60+ // CHECK: HLSLBufferDecl {{.*}} line:[[# @LINE + 3]] :9 cbuffer CB
6061// CHECK: HLSLResourceClassAttr {{.*}} Implicit CBuffer
6162// CHECK: HLSLResourceAttr {{.*}} Implicit CBuffer
6263cbuffer CB {
63- // CHECK: VarDecl {{.*}} col:9 used a2 'hlsl_constant float'
64+ // CHECK: VarDecl {{.*}} used a2 'hlsl_constant float'
6465 float a2;
65- // CHECK: VarDecl {{.*}} col:19 b2 'RWBuffer<float>':'hlsl::RWBuffer<float>'
66+ // CHECK: VarDecl {{.*}} b2 'RWBuffer<float>':'hlsl::RWBuffer<float>'
6667 RWBuffer <float > b2;
67- // CHECK: VarDecl {{.*}} col:15 c2 'EmptyStruct'
68+ // CHECK: VarDecl {{.*}} c2 'EmptyStruct'
6869 EmptyStruct c2;
69- // CHECK: VarDecl {{.*}} col:9 d2 'float[0]'
70+ // CHECK: VarDecl {{.*}} d2 'float[0]'
7071 float d2[0 ];
71- // CHECK: VarDecl {{.*}} col:9 e2 'hlsl_constant float'
72+ // CHECK: VarDecl {{.*}} f2 'RWBuffer<float>[2]'
73+ RWBuffer <float > f2[2 ];
74+ // CHECK: VarDecl {{.*}} e2 'hlsl_constant float'
7275 float e2;
73- // CHECK: CXXRecordDecl {{.*}} implicit referenced class __layout_CB_1 definition
74- // CHECK: FieldDecl {{.*}} a2 'float'
76+ // CHECK: CXXRecordDecl {{.*}} implicit referenced struct __cblayout_CB_1 definition
77+ // CHECK: PackedAttr
78+ // CHECK-NEXT: FieldDecl {{.*}} a2 'float'
7579 // CHECK-NEXT: FieldDecl {{.*}} e2 'float'
7680}
77- _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (TwoFloats, __layout_CB_1 ), "" );
81+ _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (TwoFloats, __cblayout_CB_1 ), "" );
7882
7983// Check that layout struct is created for B and the empty struct C is removed
80- // CHECK: HLSLBufferDecl {{.*}} line:83 :9 cbuffer CB
84+ // CHECK: HLSLBufferDecl {{.*}} line:[[# @LINE + 3]] :9 cbuffer CB
8185// CHECK: HLSLResourceClassAttr {{.*}} Implicit CBuffer
8286// CHECK: HLSLResourceAttr {{.*}} Implicit CBuffer
8387cbuffer CB {
84- // CHECK: VarDecl {{.*}} col:5 used s1 'hlsl_constant A'
88+ // CHECK: VarDecl {{.*}} used s1 'hlsl_constant A'
8589 A s1;
86- // CHECK: VarDecl {{.*}} col:5 s2 'hlsl_constant B'
90+ // CHECK: VarDecl {{.*}} s2 'hlsl_constant B'
8791 B s2;
88- // CHECK: VarDecl {{.*}} col:12 s3 'CTypedef':'C'
92+ // CHECK: VarDecl {{.*}} s3 'CTypedef':'C'
8993 CTypedef s3;
90- // CHECK: CXXRecordDecl {{.*}} implicit referenced class __layout_CB_2 definition
91- // CHECK: FieldDecl {{.*}} s1 'A'
92- // CHECK: FieldDecl {{.*}} s2 '__layout_B'
94+ // CHECK: CXXRecordDecl {{.*}} implicit referenced struct __cblayout_CB_2 definition
95+ // CHECK: PackedAttr
96+ // CHECK-NEXT: FieldDecl {{.*}} s1 'A'
97+ // CHECK-NEXT: FieldDecl {{.*}} s2 '__cblayout_B'
9398}
94- // CHECK: CXXRecordDecl {{.*}} implicit referenced class __layout_B definition
95- // CHECK: FieldDecl {{.*}} a 'float'
99+ // CHECK: CXXRecordDecl {{.*}} implicit referenced struct __cblayout_B definition
100+ // CHECK: PackedAttr
101+ // CHECK-NEXT: FieldDecl {{.*}} a 'float'
96102
97- _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (OneFloat, __layout_B ), "" );
98- _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (TwoFloats, __layout_CB_2 ), "" );
103+ _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (OneFloat, __cblayout_B ), "" );
104+ _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (TwoFloats, __cblayout_CB_2 ), "" );
99105
100106// check that layout struct is created for D because of its base struct
101- // CHECK: HLSLBufferDecl {{.*}} line:104 :9 cbuffer CB
107+ // CHECK: HLSLBufferDecl {{.*}} line:[[# @LINE + 3]] :9 cbuffer CB
102108// CHECK: HLSLResourceClassAttr {{.*}} Implicit CBuffer
103109// CHECK: HLSLResourceAttr {{.*}} Implicit CBuffer
104110cbuffer CB {
105111 // CHECK: VarDecl {{.*}} s4 'hlsl_constant D'
106112 D s4;
107- // CHECK: CXXRecordDecl {{.*}} implicit referenced class __layout_CB_3 definition
108- // CHECK: FieldDecl {{.*}} s4 '__layout_D'
113+ // CHECK: CXXRecordDecl {{.*}} implicit referenced struct __cblayout_CB_3 definition
114+ // CHECK: PackedAttr
115+ // CHECK-NEXT: FieldDecl {{.*}} s4 '__cblayout_D'
109116}
110- // CHECK: CXXRecordDecl {{.*}} implicit referenced class __layout_D definition
111- // CHECK: public '__layout_B'
112- // CHECK: FieldDecl {{.*}} b 'float'
113- _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (TwoFloats, __layout_D), "" );
114- _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (TwoFloats, __layout_CB_3), "" );
117+ // CHECK: CXXRecordDecl {{.*}} implicit referenced struct __cblayout_D definition
118+ // CHECK: public '__cblayout_B'
119+ // CHECK: PackedAttr
120+ // CHECK-NEXT: FieldDecl {{.*}} b 'float'
121+ _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (TwoFloats, __cblayout_D), "" );
122+ _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (TwoFloats, __cblayout_CB_3), "" );
115123
116124// check that layout struct is created for E because because its base struct
117125// is empty and should be eliminated, and BTypedef should reuse the previously
118- // defined '__layout_B '
119- // CHECK: HLSLBufferDecl {{.*}} line:122 :9 cbuffer CB
126+ // defined '__cblayout_B '
127+ // CHECK: HLSLBufferDecl {{.*}} line:[[# @LINE + 3]] :9 cbuffer CB
120128// CHECK: HLSLResourceClassAttr {{.*}} Implicit CBuffer
121129// CHECK: HLSLResourceAttr {{.*}} Implicit CBuffer
122130cbuffer CB {
123131 // CHECK: VarDecl {{.*}} s5 'hlsl_constant E'
124132 E s5;
125133 // CHECK: VarDecl {{.*}} s6 'hlsl_constant BTypedef':'hlsl_constant B'
126134 BTypedef s6;
127- // CHECK: CXXRecordDecl {{.*}} implicit referenced class __layout_CB_4 definition
128- // CHECK: FieldDecl {{.*}} s5 '__layout_E'
129- // CHECK: FieldDecl {{.*}} s6 '__layout_B'
135+ // CHECK: CXXRecordDecl {{.*}} implicit referenced struct __cblayout_CB_4 definition
136+ // CHECK: PackedAttr
137+ // CHECK-NEXT: FieldDecl {{.*}} s5 '__cblayout_E'
138+ // CHECK-NEXT: FieldDecl {{.*}} s6 '__cblayout_B'
130139}
131- // CHECK: CXXRecordDecl {{.*}} implicit referenced class __layout_E definition
132- // CHECK: FieldDecl {{.*}} c 'float'
133- // CHECK-NOT: CXXRecordDecl {{.*}} class __layout_B definition
134- _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (OneFloat, __layout_E), "" );
135- _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (TwoFloats, __layout_CB_4), "" );
140+ // CHECK: CXXRecordDecl {{.*}} implicit referenced struct __cblayout_E definition
141+ // CHECK: PackedAttr
142+ // CHECK-NEXT: FieldDecl {{.*}} c 'float'
143+ // CHECK-NOT: CXXRecordDecl {{.*}} struct __cblayout_B definition
144+ _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (OneFloat, __cblayout_E), "" );
145+ _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (TwoFloats, __cblayout_CB_4), "" );
136146
137147// check that this produces empty layout struct
138- // CHECK: HLSLBufferDecl {{.*}} line:141 :9 cbuffer CB
148+ // CHECK: HLSLBufferDecl {{.*}} line:[[# @LINE + 3]] :9 cbuffer CB
139149// CHECK: HLSLResourceClassAttr {{.*}} Implicit CBuffer
140150// CHECK: HLSLResourceAttr {{.*}} Implicit CBuffer
141151cbuffer CB {
@@ -149,27 +159,30 @@ cbuffer CB {
149159 RWBuffer <float > Buf;
150160 // CHECK: VarDecl {{.*}} ea 'EmptyArrayTypedef':'float[10][0]'
151161 EmptyArrayTypedef ea;
152- // CHECK: CXXRecordDecl {{.*}} implicit class __layout_CB_5 definition
162+ // CHECK: CXXRecordDecl {{.*}} implicit struct __cblayout_CB_5 definition
163+ // CHECK: PackedAttr
153164 // CHECK-NOT: FieldDecl
154165}
155166
156167// check host layout struct with compatible base struct
157- // CHECK: HLSLBufferDecl {{.*}} line:160 :9 cbuffer CB
168+ // CHECK: HLSLBufferDecl {{.*}} line:[[# @LINE + 3]] :9 cbuffer CB
158169// CHECK: HLSLResourceClassAttr {{.*}} Implicit CBuffer
159170// CHECK: HLSLResourceAttr {{.*}} Implicit CBuffer
160171cbuffer CB {
161172 // CHECK: VarDecl {{.*}} s8 'hlsl_constant F'
162173 F s8;
163- // CHECK: CXXRecordDecl {{.*}} implicit referenced class __layout_CB_6 definition
164- // CHECK: FieldDecl {{.*}} s8 '__layout_F'
174+ // CHECK: CXXRecordDecl {{.*}} implicit referenced struct __cblayout_CB_6 definition
175+ // CHECK: PackedAttr
176+ // CHECK-NEXT: FieldDecl {{.*}} s8 '__cblayout_F'
165177}
166- // CHECK: CXXRecordDecl {{.*}} implicit referenced class __layout_F definition
167- // CHECK: public 'A'
168- _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (OneFloat, __layout_F), "" );
169- _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (OneFloat, __layout_CB_6), "" );
178+ // CHECK: CXXRecordDecl {{.*}} implicit referenced struct __cblayout_F definition
179+ // CHECK: public 'A'
180+ // CHECK: PackedAttr
181+ _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (OneFloat, __cblayout_F), "" );
182+ _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (OneFloat, __cblayout_CB_6), "" );
170183
171184// anonymous structs
172- // CHECK: HLSLBufferDecl {{.*}} line:175 :9 cbuffer CB
185+ // CHECK: HLSLBufferDecl {{.*}} line:[[# @LINE + 3]] :9 cbuffer CB
173186// CHECK: HLSLResourceClassAttr {{.*}} Implicit CBuffer
174187// CHECK: HLSLResourceAttr {{.*}} Implicit CBuffer
175188cbuffer CB {
@@ -182,26 +195,29 @@ cbuffer CB {
182195 // CHECK: FieldDecl {{.*}} f 'RWBuffer<float>':'hlsl::RWBuffer<float>'
183196 RWBuffer <float > f;
184197 } s9;
185- // CHECK: VarDecl {{.*}} s9 'hlsl_constant struct (unnamed struct at {{.*}}cbuffer.hlsl:177 :3
198+ // CHECK: VarDecl {{.*}} s9 'hlsl_constant struct (unnamed struct at {{.*}}cbuffer.hlsl:[[# @LINE - 8]] :3
186199 // CHECK: CXXRecordDecl {{.*}} struct definition
187200 struct {
188201 // CHECK: FieldDecl {{.*}} g 'float'
189202 float g;
190203 // CHECK: FieldDecl {{.*}} f 'RWBuffer<float>':'hlsl::RWBuffer<float>'
191204 RWBuffer <float > f;
192205 } s10;
193- // CHECK: VarDecl {{.*}} s10 'hlsl_constant struct (unnamed struct at {{.*}}cbuffer.hlsl:187:3
194- // CHECK: CXXRecordDecl {{.*}} implicit referenced class __layout_anon definition
195- // CHECK: FieldDecl {{.*}} e 'float'
196- // CHECK: CXXRecordDecl {{.*}} implicit referenced class __layout_anon_1 definition
197- // CHECK: FieldDecl {{.*}} g 'float'
198- // CHECK: CXXRecordDecl {{.*}} implicit referenced class __layout_CB_7 definition
199- // CHECK: FieldDecl {{.*}} s9 '__layout_anon'
200- // CHECK: FieldDecl {{.*}} s10 '__layout_anon_1'
206+ // CHECK: VarDecl {{.*}} s10 'hlsl_constant struct (unnamed struct at {{.*}}cbuffer.hlsl:[[# @LINE - 6]]:3
207+ // CHECK: CXXRecordDecl {{.*}} implicit referenced struct __cblayout_anon definition
208+ // CHECK: PackedAttr
209+ // CHECK-NEXT: FieldDecl {{.*}} e 'float'
210+ // CHECK: CXXRecordDecl {{.*}} implicit referenced struct __cblayout_anon_1 definition
211+ // CHECK: PackedAttr
212+ // CHECK-NEXT: FieldDecl {{.*}} g 'float'
213+ // CHECK: CXXRecordDecl {{.*}} implicit referenced struct __cblayout_CB_7 definition
214+ // CHECK: PackedAttr
215+ // CHECK-NEXT: FieldDecl {{.*}} s9 '__cblayout_anon'
216+ // CHECK-NEXT: FieldDecl {{.*}} s10 '__cblayout_anon_1'
201217}
202- _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (OneFloat, __layout_anon ), "" );
203- _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (OneFloat, __layout_anon_1 ), "" );
204- _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (TwoFloats, __layout_CB_7 ), "" );
218+ _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (OneFloat, __cblayout_anon ), "" );
219+ _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (OneFloat, __cblayout_anon_1 ), "" );
220+ _Static_assert (__builtin_hlsl_is_scalarized_layout_compatible (TwoFloats, __cblayout_CB_7 ), "" );
205221
206222// Add uses for the constant buffer declarations so they are not optimized away
207223export float foo () {
0 commit comments