@@ -172,29 +172,27 @@ fn check_and_apply_linkage<'ll, 'tcx>(
172172 if let Some ( linkage) = attrs. import_linkage {
173173 debug ! ( "get_static: sym={} linkage={:?}" , sym, linkage) ;
174174
175- unsafe {
176- // Declare a symbol `foo` with the desired linkage.
177- let g1 = cx. declare_global ( sym, cx. type_i8 ( ) ) ;
178- llvm:: LLVMRustSetLinkage ( g1, base:: linkage_to_llvm ( linkage) ) ;
179-
180- // Declare an internal global `extern_with_linkage_foo` which
181- // is initialized with the address of `foo`. If `foo` is
182- // discarded during linking (for example, if `foo` has weak
183- // linkage and there are no definitions), then
184- // `extern_with_linkage_foo` will instead be initialized to
185- // zero.
186- let mut real_name = "_rust_extern_with_linkage_" . to_string ( ) ;
187- real_name. push_str ( sym) ;
188- let g2 = cx. define_global ( & real_name, llty) . unwrap_or_else ( || {
189- cx. sess ( ) . dcx ( ) . emit_fatal ( SymbolAlreadyDefined {
190- span : cx. tcx . def_span ( def_id) ,
191- symbol_name : sym,
192- } )
193- } ) ;
194- llvm:: LLVMRustSetLinkage ( g2, llvm:: Linkage :: InternalLinkage ) ;
195- llvm:: LLVMSetInitializer ( g2, g1) ;
196- g2
197- }
175+ // Declare a symbol `foo` with the desired linkage.
176+ let g1 = cx. declare_global ( sym, cx. type_i8 ( ) ) ;
177+ llvm:: set_linkage ( g1, base:: linkage_to_llvm ( linkage) ) ;
178+
179+ // Declare an internal global `extern_with_linkage_foo` which
180+ // is initialized with the address of `foo`. If `foo` is
181+ // discarded during linking (for example, if `foo` has weak
182+ // linkage and there are no definitions), then
183+ // `extern_with_linkage_foo` will instead be initialized to
184+ // zero.
185+ let mut real_name = "_rust_extern_with_linkage_" . to_string ( ) ;
186+ real_name. push_str ( sym) ;
187+ let g2 = cx. define_global ( & real_name, llty) . unwrap_or_else ( || {
188+ cx. sess ( ) . dcx ( ) . emit_fatal ( SymbolAlreadyDefined {
189+ span : cx. tcx . def_span ( def_id) ,
190+ symbol_name : sym,
191+ } )
192+ } ) ;
193+ llvm:: set_linkage ( g2, llvm:: Linkage :: InternalLinkage ) ;
194+ unsafe { llvm:: LLVMSetInitializer ( g2, g1) } ;
195+ g2
198196 } else if cx. tcx . sess . target . arch == "x86"
199197 && let Some ( dllimport) = crate :: common:: get_dllimport ( cx. tcx , def_id, sym)
200198 {
@@ -224,23 +222,21 @@ impl<'ll> CodegenCx<'ll, '_> {
224222 align : Align ,
225223 kind : Option < & str > ,
226224 ) -> & ' ll Value {
227- unsafe {
228- let gv = match kind {
229- Some ( kind) if !self . tcx . sess . fewer_names ( ) => {
230- let name = self . generate_local_symbol_name ( kind) ;
231- let gv = self . define_global ( & name, self . val_ty ( cv) ) . unwrap_or_else ( || {
232- bug ! ( "symbol `{}` is already defined" , name) ;
233- } ) ;
234- llvm:: LLVMRustSetLinkage ( gv, llvm:: Linkage :: PrivateLinkage ) ;
235- gv
236- }
237- _ => self . define_private_global ( self . val_ty ( cv) ) ,
238- } ;
239- llvm:: LLVMSetInitializer ( gv, cv) ;
240- set_global_alignment ( self , gv, align) ;
241- llvm:: SetUnnamedAddress ( gv, llvm:: UnnamedAddr :: Global ) ;
242- gv
243- }
225+ let gv = match kind {
226+ Some ( kind) if !self . tcx . sess . fewer_names ( ) => {
227+ let name = self . generate_local_symbol_name ( kind) ;
228+ let gv = self . define_global ( & name, self . val_ty ( cv) ) . unwrap_or_else ( || {
229+ bug ! ( "symbol `{}` is already defined" , name) ;
230+ } ) ;
231+ llvm:: set_linkage ( gv, llvm:: Linkage :: PrivateLinkage ) ;
232+ gv
233+ }
234+ _ => self . define_private_global ( self . val_ty ( cv) ) ,
235+ } ;
236+ unsafe { llvm:: LLVMSetInitializer ( gv, cv) } ;
237+ set_global_alignment ( self , gv, align) ;
238+ llvm:: SetUnnamedAddress ( gv, llvm:: UnnamedAddr :: Global ) ;
239+ gv
244240 }
245241
246242 #[ instrument( level = "debug" , skip( self ) ) ]
@@ -292,9 +288,7 @@ impl<'ll> CodegenCx<'ll, '_> {
292288 let g = self . declare_global ( sym, llty) ;
293289
294290 if !self . tcx . is_reachable_non_generic ( def_id) {
295- unsafe {
296- llvm:: LLVMRustSetVisibility ( g, llvm:: Visibility :: Hidden ) ;
297- }
291+ llvm:: set_visibility ( g, llvm:: Visibility :: Hidden ) ;
298292 }
299293
300294 g
@@ -312,7 +306,7 @@ impl<'ll> CodegenCx<'ll, '_> {
312306 llvm:: set_thread_local_mode ( g, self . tls_model ) ;
313307 }
314308
315- let dso_local = unsafe { self . should_assume_dso_local ( g, true ) } ;
309+ let dso_local = self . should_assume_dso_local ( g, true ) ;
316310 if dso_local {
317311 unsafe {
318312 llvm:: LLVMRustSetDSOLocal ( g, true ) ;
@@ -401,8 +395,8 @@ impl<'ll> CodegenCx<'ll, '_> {
401395 let name = llvm:: get_value_name ( g) . to_vec ( ) ;
402396 llvm:: set_value_name ( g, b"" ) ;
403397
404- let linkage = llvm:: LLVMRustGetLinkage ( g) ;
405- let visibility = llvm:: LLVMRustGetVisibility ( g) ;
398+ let linkage = llvm:: get_linkage ( g) ;
399+ let visibility = llvm:: get_visibility ( g) ;
406400
407401 let new_g = llvm:: LLVMRustGetOrInsertGlobal (
408402 self . llmod ,
@@ -411,8 +405,8 @@ impl<'ll> CodegenCx<'ll, '_> {
411405 val_llty,
412406 ) ;
413407
414- llvm:: LLVMRustSetLinkage ( new_g, linkage) ;
415- llvm:: LLVMRustSetVisibility ( new_g, visibility) ;
408+ llvm:: set_linkage ( new_g, linkage) ;
409+ llvm:: set_visibility ( new_g, visibility) ;
416410
417411 // The old global has had its name removed but is returned by
418412 // get_static since it is in the instance cache. Provide an
0 commit comments