@@ -89,44 +89,39 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, did: LocalDefId) -> CodegenFnAttrs {
89
89
} ;
90
90
91
91
match name {
92
- sym:: cold => {
93
- codegen_fn_attrs. flags |= CodegenFnAttrFlags :: COLD ;
94
- }
95
- sym:: rustc_allocator => {
96
- codegen_fn_attrs. flags |= CodegenFnAttrFlags :: ALLOCATOR ;
97
- }
92
+ sym:: cold => codegen_fn_attrs. flags |= CodegenFnAttrFlags :: COLD ,
93
+ sym:: rustc_allocator => codegen_fn_attrs. flags |= CodegenFnAttrFlags :: ALLOCATOR ,
98
94
sym:: ffi_returns_twice => {
99
- codegen_fn_attrs. flags |= CodegenFnAttrFlags :: FFI_RETURNS_TWICE ;
100
- }
101
- sym:: ffi_pure => {
102
- codegen_fn_attrs. flags |= CodegenFnAttrFlags :: FFI_PURE ;
103
- }
104
- sym:: ffi_const => {
105
- codegen_fn_attrs. flags |= CodegenFnAttrFlags :: FFI_CONST ;
106
- }
107
- sym:: rustc_nounwind => {
108
- codegen_fn_attrs. flags |= CodegenFnAttrFlags :: NEVER_UNWIND ;
109
- }
110
- sym:: rustc_reallocator => {
111
- codegen_fn_attrs. flags |= CodegenFnAttrFlags :: REALLOCATOR ;
112
- }
113
- sym:: rustc_deallocator => {
114
- codegen_fn_attrs. flags |= CodegenFnAttrFlags :: DEALLOCATOR ;
95
+ codegen_fn_attrs. flags |= CodegenFnAttrFlags :: FFI_RETURNS_TWICE
115
96
}
97
+ sym:: ffi_pure => codegen_fn_attrs. flags |= CodegenFnAttrFlags :: FFI_PURE ,
98
+ sym:: ffi_const => codegen_fn_attrs. flags |= CodegenFnAttrFlags :: FFI_CONST ,
99
+ sym:: rustc_nounwind => codegen_fn_attrs. flags |= CodegenFnAttrFlags :: NEVER_UNWIND ,
100
+ sym:: rustc_reallocator => codegen_fn_attrs. flags |= CodegenFnAttrFlags :: REALLOCATOR ,
101
+ sym:: rustc_deallocator => codegen_fn_attrs. flags |= CodegenFnAttrFlags :: DEALLOCATOR ,
116
102
sym:: rustc_allocator_zeroed => {
117
- codegen_fn_attrs. flags |= CodegenFnAttrFlags :: ALLOCATOR_ZEROED ;
118
- }
119
- sym:: naked => {
120
- codegen_fn_attrs. flags |= CodegenFnAttrFlags :: NAKED ;
103
+ codegen_fn_attrs. flags |= CodegenFnAttrFlags :: ALLOCATOR_ZEROED
121
104
}
105
+ sym:: naked => codegen_fn_attrs. flags |= CodegenFnAttrFlags :: NAKED ,
122
106
sym:: no_mangle => {
123
- codegen_fn_attrs. flags |= CodegenFnAttrFlags :: NO_MANGLE ;
124
- }
125
- sym:: no_coverage => {
126
- codegen_fn_attrs. flags |= CodegenFnAttrFlags :: NO_COVERAGE ;
107
+ if tcx. opt_item_name ( did. to_def_id ( ) ) . is_some ( ) {
108
+ codegen_fn_attrs. flags |= CodegenFnAttrFlags :: NO_MANGLE
109
+ } else {
110
+ tcx. sess
111
+ . struct_span_err (
112
+ attr. span ,
113
+ format ! (
114
+ "`#[no_mangle]` cannot be used on {} {} as it has no name" ,
115
+ tcx. def_descr_article( did. to_def_id( ) ) ,
116
+ tcx. def_descr( did. to_def_id( ) ) ,
117
+ ) ,
118
+ )
119
+ . emit ( ) ;
120
+ }
127
121
}
122
+ sym:: no_coverage => codegen_fn_attrs. flags |= CodegenFnAttrFlags :: NO_COVERAGE ,
128
123
sym:: rustc_std_internal_symbol => {
129
- codegen_fn_attrs. flags |= CodegenFnAttrFlags :: RUSTC_STD_INTERNAL_SYMBOL ;
124
+ codegen_fn_attrs. flags |= CodegenFnAttrFlags :: RUSTC_STD_INTERNAL_SYMBOL
130
125
}
131
126
sym:: used => {
132
127
let inner = attr. meta_item_list ( ) ;
@@ -207,11 +202,9 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, did: LocalDefId) -> CodegenFnAttrs {
207
202
struct_span_err ! ( tcx. sess, attr. span, E0775 , "`#[cmse_nonsecure_entry]` is only valid for targets with the TrustZone-M extension" )
208
203
. emit ( ) ;
209
204
}
210
- codegen_fn_attrs. flags |= CodegenFnAttrFlags :: CMSE_NONSECURE_ENTRY ;
211
- }
212
- sym:: thread_local => {
213
- codegen_fn_attrs. flags |= CodegenFnAttrFlags :: THREAD_LOCAL ;
205
+ codegen_fn_attrs. flags |= CodegenFnAttrFlags :: CMSE_NONSECURE_ENTRY
214
206
}
207
+ sym:: thread_local => codegen_fn_attrs. flags |= CodegenFnAttrFlags :: THREAD_LOCAL ,
215
208
sym:: track_caller => {
216
209
if !tcx. is_closure ( did. to_def_id ( ) )
217
210
&& let Some ( fn_sig) = fn_sig ( )
@@ -229,7 +222,7 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, did: LocalDefId) -> CodegenFnAttrs {
229
222
)
230
223
. emit ( ) ;
231
224
}
232
- codegen_fn_attrs. flags |= CodegenFnAttrFlags :: TRACK_CALLER ;
225
+ codegen_fn_attrs. flags |= CodegenFnAttrFlags :: TRACK_CALLER
233
226
}
234
227
sym:: export_name => {
235
228
if let Some ( s) = attr. value_str ( ) {
@@ -306,20 +299,14 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, did: LocalDefId) -> CodegenFnAttrs {
306
299
sym:: link_section => {
307
300
if let Some ( val) = attr. value_str ( ) {
308
301
if val. as_str ( ) . bytes ( ) . any ( |b| b == 0 ) {
309
- let msg = format ! (
310
- "illegal null byte in link_section \
311
- value: `{}`",
312
- & val
313
- ) ;
302
+ let msg = format ! ( "illegal null byte in link_section value: `{}`" , & val) ;
314
303
tcx. sess . span_err ( attr. span , & msg) ;
315
304
} else {
316
305
codegen_fn_attrs. link_section = Some ( val) ;
317
306
}
318
307
}
319
308
}
320
- sym:: link_name => {
321
- codegen_fn_attrs. link_name = attr. value_str ( ) ;
322
- }
309
+ sym:: link_name => codegen_fn_attrs. link_name = attr. value_str ( ) ,
323
310
sym:: link_ordinal => {
324
311
link_ordinal_span = Some ( attr. span ) ;
325
312
if let ordinal @ Some ( _) = check_link_ordinal ( tcx, attr) {
@@ -330,37 +317,27 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, did: LocalDefId) -> CodegenFnAttrs {
330
317
no_sanitize_span = Some ( attr. span ) ;
331
318
if let Some ( list) = attr. meta_item_list ( ) {
332
319
for item in list. iter ( ) {
333
- match item. ident ( ) . map ( |ident| ident . name ) {
334
- Some ( sym:: address) => {
320
+ match item. name_or_empty ( ) {
321
+ sym:: address => {
335
322
codegen_fn_attrs. no_sanitize |=
336
- SanitizerSet :: ADDRESS | SanitizerSet :: KERNELADDRESS ;
337
- }
338
- Some ( sym:: cfi) => {
339
- codegen_fn_attrs. no_sanitize |= SanitizerSet :: CFI ;
323
+ SanitizerSet :: ADDRESS | SanitizerSet :: KERNELADDRESS
340
324
}
341
- Some ( sym:: kcfi) => {
342
- codegen_fn_attrs. no_sanitize |= SanitizerSet :: KCFI ;
325
+ sym:: cfi => codegen_fn_attrs. no_sanitize |= SanitizerSet :: CFI ,
326
+ sym:: kcfi => codegen_fn_attrs. no_sanitize |= SanitizerSet :: KCFI ,
327
+ sym:: memory => codegen_fn_attrs. no_sanitize |= SanitizerSet :: MEMORY ,
328
+ sym:: memtag => codegen_fn_attrs. no_sanitize |= SanitizerSet :: MEMTAG ,
329
+ sym:: shadow_call_stack => {
330
+ codegen_fn_attrs. no_sanitize |= SanitizerSet :: SHADOWCALLSTACK
343
331
}
344
- Some ( sym:: memory) => {
345
- codegen_fn_attrs. no_sanitize |= SanitizerSet :: MEMORY ;
346
- }
347
- Some ( sym:: memtag) => {
348
- codegen_fn_attrs. no_sanitize |= SanitizerSet :: MEMTAG ;
349
- }
350
- Some ( sym:: shadow_call_stack) => {
351
- codegen_fn_attrs. no_sanitize |= SanitizerSet :: SHADOWCALLSTACK ;
352
- }
353
- Some ( sym:: thread) => {
354
- codegen_fn_attrs. no_sanitize |= SanitizerSet :: THREAD ;
355
- }
356
- Some ( sym:: hwaddress) => {
357
- codegen_fn_attrs. no_sanitize |= SanitizerSet :: HWADDRESS ;
332
+ sym:: thread => codegen_fn_attrs. no_sanitize |= SanitizerSet :: THREAD ,
333
+ sym:: hwaddress => {
334
+ codegen_fn_attrs. no_sanitize |= SanitizerSet :: HWADDRESS
358
335
}
359
336
_ => {
360
337
tcx. sess
361
- . struct_span_err ( item. span ( ) , "invalid argument for `no_sanitize`" )
362
- . note ( "expected one of: `address`, `cfi`, `hwaddress`, `kcfi`, `memory`, `memtag`, `shadow-call-stack`, or `thread`" )
363
- . emit ( ) ;
338
+ . struct_span_err ( item. span ( ) , "invalid argument for `no_sanitize`" )
339
+ . note ( "expected one of: `address`, `cfi`, `hwaddress`, `kcfi`, `memory`, `memtag`, `shadow-call-stack`, or `thread`" )
340
+ . emit ( ) ;
364
341
}
365
342
}
366
343
}
0 commit comments