@@ -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