@@ -172,29 +172,27 @@ fn check_and_apply_linkage<'ll, 'tcx>(
172
172
if let Some ( linkage) = attrs. import_linkage {
173
173
debug ! ( "get_static: sym={} linkage={:?}" , sym, linkage) ;
174
174
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
198
196
} else if cx. tcx . sess . target . arch == "x86"
199
197
&& let Some ( dllimport) = crate :: common:: get_dllimport ( cx. tcx , def_id, sym)
200
198
{
@@ -224,23 +222,21 @@ impl<'ll> CodegenCx<'ll, '_> {
224
222
align : Align ,
225
223
kind : Option < & str > ,
226
224
) -> & ' 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
244
240
}
245
241
246
242
#[ instrument( level = "debug" , skip( self ) ) ]
@@ -401,7 +397,7 @@ impl<'ll> CodegenCx<'ll, '_> {
401
397
let name = llvm:: get_value_name ( g) . to_vec ( ) ;
402
398
llvm:: set_value_name ( g, b"" ) ;
403
399
404
- let linkage = llvm:: LLVMRustGetLinkage ( g) ;
400
+ let linkage = llvm:: get_linkage ( g) ;
405
401
let visibility = llvm:: LLVMRustGetVisibility ( g) ;
406
402
407
403
let new_g = llvm:: LLVMRustGetOrInsertGlobal (
@@ -411,7 +407,7 @@ impl<'ll> CodegenCx<'ll, '_> {
411
407
val_llty,
412
408
) ;
413
409
414
- llvm:: LLVMRustSetLinkage ( new_g, linkage) ;
410
+ llvm:: set_linkage ( new_g, linkage) ;
415
411
llvm:: LLVMRustSetVisibility ( new_g, visibility) ;
416
412
417
413
// The old global has had its name removed but is returned by
0 commit comments