@@ -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 ) ) ]  
@@ -401,7 +397,7 @@ impl<'ll> CodegenCx<'ll, '_> {
401397                let  name = llvm:: get_value_name ( g) . to_vec ( ) ; 
402398                llvm:: set_value_name ( g,  b"" ) ; 
403399
404-                 let  linkage = llvm:: LLVMRustGetLinkage ( g) ; 
400+                 let  linkage = llvm:: get_linkage ( g) ; 
405401                let  visibility = llvm:: LLVMRustGetVisibility ( g) ; 
406402
407403                let  new_g = llvm:: LLVMRustGetOrInsertGlobal ( 
@@ -411,7 +407,7 @@ impl<'ll> CodegenCx<'ll, '_> {
411407                    val_llty, 
412408                ) ; 
413409
414-                 llvm:: LLVMRustSetLinkage ( new_g,  linkage) ; 
410+                 llvm:: set_linkage ( new_g,  linkage) ; 
415411                llvm:: LLVMRustSetVisibility ( new_g,  visibility) ; 
416412
417413                // The old global has had its name removed but is returned by 
0 commit comments