@@ -43,9 +43,10 @@ struct CheckSpirvAttrVisitor<'tcx> {
43
43
}
44
44
45
45
impl CheckSpirvAttrVisitor < ' _ > {
46
- fn check_spirv_attributes ( & self , hir_id : HirId , attrs : & [ Attribute ] , target : Target ) {
46
+ fn check_spirv_attributes ( & self , hir_id : HirId , target : Target ) {
47
47
let parse_attrs = |attrs| crate :: symbols:: parse_attrs_for_checking ( & self . sym , attrs) ;
48
48
49
+ let attrs = self . tcx . hir ( ) . attrs ( hir_id) ;
49
50
for ( attr, parse_attr_result) in parse_attrs ( attrs) {
50
51
// Make sure to mark the whole `#[spirv(...)]` attribute as used,
51
52
// to avoid warnings about unused attributes.
@@ -144,48 +145,48 @@ impl<'tcx> Visitor<'tcx> for CheckSpirvAttrVisitor<'tcx> {
144
145
145
146
fn visit_item ( & mut self , item : & ' tcx hir:: Item < ' tcx > ) {
146
147
let target = Target :: from_item ( item) ;
147
- self . check_spirv_attributes ( item. hir_id ( ) , item . attrs , target) ;
148
+ self . check_spirv_attributes ( item. hir_id ( ) , target) ;
148
149
intravisit:: walk_item ( self , item)
149
150
}
150
151
151
152
fn visit_generic_param ( & mut self , generic_param : & ' tcx hir:: GenericParam < ' tcx > ) {
152
153
let target = Target :: from_generic_param ( generic_param) ;
153
- self . check_spirv_attributes ( generic_param. hir_id , generic_param . attrs , target) ;
154
+ self . check_spirv_attributes ( generic_param. hir_id , target) ;
154
155
intravisit:: walk_generic_param ( self , generic_param)
155
156
}
156
157
157
158
fn visit_trait_item ( & mut self , trait_item : & ' tcx hir:: TraitItem < ' tcx > ) {
158
159
let target = Target :: from_trait_item ( trait_item) ;
159
- self . check_spirv_attributes ( trait_item. hir_id ( ) , trait_item . attrs , target) ;
160
+ self . check_spirv_attributes ( trait_item. hir_id ( ) , target) ;
160
161
intravisit:: walk_trait_item ( self , trait_item)
161
162
}
162
163
163
164
fn visit_struct_field ( & mut self , struct_field : & ' tcx hir:: StructField < ' tcx > ) {
164
- self . check_spirv_attributes ( struct_field. hir_id , struct_field . attrs , Target :: Field ) ;
165
+ self . check_spirv_attributes ( struct_field. hir_id , Target :: Field ) ;
165
166
intravisit:: walk_struct_field ( self , struct_field) ;
166
167
}
167
168
168
169
fn visit_arm ( & mut self , arm : & ' tcx hir:: Arm < ' tcx > ) {
169
- self . check_spirv_attributes ( arm. hir_id , arm . attrs , Target :: Arm ) ;
170
+ self . check_spirv_attributes ( arm. hir_id , Target :: Arm ) ;
170
171
intravisit:: walk_arm ( self , arm) ;
171
172
}
172
173
173
174
fn visit_foreign_item ( & mut self , f_item : & ' tcx hir:: ForeignItem < ' tcx > ) {
174
175
let target = Target :: from_foreign_item ( f_item) ;
175
- self . check_spirv_attributes ( f_item. hir_id ( ) , f_item . attrs , target) ;
176
+ self . check_spirv_attributes ( f_item. hir_id ( ) , target) ;
176
177
intravisit:: walk_foreign_item ( self , f_item)
177
178
}
178
179
179
180
fn visit_impl_item ( & mut self , impl_item : & ' tcx hir:: ImplItem < ' tcx > ) {
180
181
let target = target_from_impl_item ( self . tcx , impl_item) ;
181
- self . check_spirv_attributes ( impl_item. hir_id ( ) , impl_item . attrs , target) ;
182
+ self . check_spirv_attributes ( impl_item. hir_id ( ) , target) ;
182
183
intravisit:: walk_impl_item ( self , impl_item)
183
184
}
184
185
185
186
fn visit_stmt ( & mut self , stmt : & ' tcx hir:: Stmt < ' tcx > ) {
186
187
// When checking statements ignore expressions, they will be checked later.
187
188
if let hir:: StmtKind :: Local ( l) = stmt. kind {
188
- self . check_spirv_attributes ( l. hir_id , & l . attrs , Target :: Statement ) ;
189
+ self . check_spirv_attributes ( l. hir_id , Target :: Statement ) ;
189
190
}
190
191
intravisit:: walk_stmt ( self , stmt)
191
192
}
@@ -196,7 +197,7 @@ impl<'tcx> Visitor<'tcx> for CheckSpirvAttrVisitor<'tcx> {
196
197
_ => Target :: Expression ,
197
198
} ;
198
199
199
- self . check_spirv_attributes ( expr. hir_id , & expr . attrs , target) ;
200
+ self . check_spirv_attributes ( expr. hir_id , target) ;
200
201
intravisit:: walk_expr ( self , expr)
201
202
}
202
203
@@ -206,17 +207,17 @@ impl<'tcx> Visitor<'tcx> for CheckSpirvAttrVisitor<'tcx> {
206
207
generics : & ' tcx hir:: Generics < ' tcx > ,
207
208
item_id : HirId ,
208
209
) {
209
- self . check_spirv_attributes ( variant. id , variant . attrs , Target :: Variant ) ;
210
+ self . check_spirv_attributes ( variant. id , Target :: Variant ) ;
210
211
intravisit:: walk_variant ( self , variant, generics, item_id)
211
212
}
212
213
213
214
fn visit_macro_def ( & mut self , macro_def : & ' tcx hir:: MacroDef < ' tcx > ) {
214
- self . check_spirv_attributes ( macro_def. hir_id ( ) , macro_def . attrs , Target :: MacroDef ) ;
215
+ self . check_spirv_attributes ( macro_def. hir_id ( ) , Target :: MacroDef ) ;
215
216
intravisit:: walk_macro_def ( self , macro_def) ;
216
217
}
217
218
218
219
fn visit_param ( & mut self , param : & ' tcx hir:: Param < ' tcx > ) {
219
- self . check_spirv_attributes ( param. hir_id , param . attrs , Target :: Param ) ;
220
+ self . check_spirv_attributes ( param. hir_id , Target :: Param ) ;
220
221
221
222
intravisit:: walk_param ( self , param) ;
222
223
}
@@ -254,11 +255,7 @@ fn check_mod_attrs(tcx: TyCtxt<'_>, module_def_id: LocalDefId) {
254
255
tcx. hir ( ) . krate ( ) . non_exported_macro_attrs ,
255
256
) ;
256
257
if module_def_id. is_top_level_module ( ) {
257
- check_spirv_attr_visitor. check_spirv_attributes (
258
- CRATE_HIR_ID ,
259
- tcx. hir ( ) . krate_attrs ( ) ,
260
- Target :: Mod ,
261
- ) ;
258
+ check_spirv_attr_visitor. check_spirv_attributes ( CRATE_HIR_ID , Target :: Mod ) ;
262
259
}
263
260
}
264
261
0 commit comments