@@ -105,20 +105,21 @@ fn reachable_non_generics_provider(tcx: TyCtxt<'_>, _: LocalCrate) -> DefIdMap<S
105
105
}
106
106
} )
107
107
. map ( |def_id| {
108
+ let codegen_attrs = tcx. codegen_fn_attrs ( def_id. to_def_id ( ) ) ;
108
109
// We won't link right if this symbol is stripped during LTO.
109
110
let name = tcx. symbol_name ( Instance :: mono ( tcx, def_id. to_def_id ( ) ) ) . name ;
110
111
// We have to preserve the symbols of the built-in functions during LTO.
111
112
let is_builtin_fn = is_compiler_builtins
112
113
&& symbol_export_level ( tcx, def_id. to_def_id ( ) )
113
- . is_below_threshold ( SymbolExportLevel :: C ) ;
114
- let used = is_builtin_fn || name == "rust_eh_personality" ;
114
+ . is_below_threshold ( SymbolExportLevel :: C )
115
+ && codegen_attrs. flags . contains ( CodegenFnAttrFlags :: NO_MANGLE ) ;
116
+ let used = name == "rust_eh_personality" ;
115
117
116
118
let export_level = if special_runtime_crate {
117
119
SymbolExportLevel :: Rust
118
120
} else {
119
121
symbol_export_level ( tcx, def_id. to_def_id ( ) )
120
122
} ;
121
- let codegen_attrs = tcx. codegen_fn_attrs ( def_id. to_def_id ( ) ) ;
122
123
debug ! (
123
124
"EXPORTED SYMBOL (local): {} ({:?})" ,
124
125
tcx. symbol_name( Instance :: mono( tcx, def_id. to_def_id( ) ) ) ,
@@ -138,6 +139,7 @@ fn reachable_non_generics_provider(tcx: TyCtxt<'_>, _: LocalCrate) -> DefIdMap<S
138
139
used : codegen_attrs. flags . contains ( CodegenFnAttrFlags :: USED )
139
140
|| codegen_attrs. flags . contains ( CodegenFnAttrFlags :: USED_LINKER )
140
141
|| used,
142
+ used_compiler : is_builtin_fn,
141
143
} ;
142
144
( def_id. to_def_id ( ) , info)
143
145
} )
@@ -150,6 +152,7 @@ fn reachable_non_generics_provider(tcx: TyCtxt<'_>, _: LocalCrate) -> DefIdMap<S
150
152
level : SymbolExportLevel :: C ,
151
153
kind : SymbolExportKind :: Data ,
152
154
used : false ,
155
+ used_compiler : false ,
153
156
} ,
154
157
) ;
155
158
}
@@ -198,6 +201,7 @@ fn exported_symbols_provider_local(
198
201
level : info. level ,
199
202
kind : SymbolExportKind :: Text ,
200
203
used : info. used ,
204
+ used_compiler : false ,
201
205
} ,
202
206
)
203
207
} )
@@ -214,6 +218,7 @@ fn exported_symbols_provider_local(
214
218
level : SymbolExportLevel :: C ,
215
219
kind : SymbolExportKind :: Text ,
216
220
used : false ,
221
+ used_compiler : false ,
217
222
} ,
218
223
) ) ;
219
224
}
@@ -233,6 +238,7 @@ fn exported_symbols_provider_local(
233
238
level : SymbolExportLevel :: Rust ,
234
239
kind : SymbolExportKind :: Text ,
235
240
used : false ,
241
+ used_compiler : false ,
236
242
} ,
237
243
) ) ;
238
244
}
@@ -245,6 +251,7 @@ fn exported_symbols_provider_local(
245
251
level : SymbolExportLevel :: Rust ,
246
252
kind : SymbolExportKind :: Data ,
247
253
used : false ,
254
+ used_compiler : false ,
248
255
} ,
249
256
) )
250
257
}
@@ -264,6 +271,7 @@ fn exported_symbols_provider_local(
264
271
level : SymbolExportLevel :: C ,
265
272
kind : SymbolExportKind :: Data ,
266
273
used : false ,
274
+ used_compiler : false ,
267
275
} ,
268
276
)
269
277
} ) ) ;
@@ -289,6 +297,7 @@ fn exported_symbols_provider_local(
289
297
level : SymbolExportLevel :: C ,
290
298
kind : SymbolExportKind :: Data ,
291
299
used : false ,
300
+ used_compiler : false ,
292
301
} ,
293
302
)
294
303
} ) ) ;
@@ -306,6 +315,7 @@ fn exported_symbols_provider_local(
306
315
level : SymbolExportLevel :: C ,
307
316
kind : SymbolExportKind :: Data ,
308
317
used : true ,
318
+ used_compiler : false ,
309
319
} ,
310
320
) ) ;
311
321
}
@@ -346,6 +356,7 @@ fn exported_symbols_provider_local(
346
356
level : SymbolExportLevel :: Rust ,
347
357
kind : SymbolExportKind :: Text ,
348
358
used : false ,
359
+ used_compiler : false ,
349
360
} ,
350
361
) ) ;
351
362
}
@@ -362,6 +373,7 @@ fn exported_symbols_provider_local(
362
373
level : SymbolExportLevel :: Rust ,
363
374
kind : SymbolExportKind :: Text ,
364
375
used : false ,
376
+ used_compiler : false ,
365
377
} ,
366
378
) ) ;
367
379
}
0 commit comments