Skip to content

Commit d2dd8e9

Browse files
Fix codegen for add_static_aliases
1 parent 5fcdb52 commit d2dd8e9

1 file changed

Lines changed: 8 additions & 1 deletion

File tree

compiler/rustc_codegen_llvm/src/mono_item.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,8 @@ impl<'ll, 'tcx> CodegenCx<'ll, 'tcx> {
135135
let ty = self.get_type_of_global(aliasee);
136136

137137
for (alias, linkage, visibility) in aliases {
138-
let symbol_name = self.tcx.symbol_name(Instance::mono(self.tcx, *alias));
138+
let instance = Instance::mono(self.tcx, *alias);
139+
let symbol_name = self.tcx.symbol_name(instance);
139140
tracing::debug!("STATIC ALIAS: {alias:?} {linkage:?} {visibility:?}");
140141

141142
let lldecl = llvm::add_alias(
@@ -145,6 +146,12 @@ impl<'ll, 'tcx> CodegenCx<'ll, 'tcx> {
145146
aliasee,
146147
&CString::new(symbol_name.name).unwrap(),
147148
);
149+
// Add the alias name to the set of cached items, so there is no duplicate
150+
// instance added to it during the normal `external static` codegen
151+
assert!(
152+
self.instances.borrow_mut().insert(instance, lldecl).is_none(),
153+
"An instance was already present for {instance:?}"
154+
);
148155

149156
llvm::set_visibility(lldecl, base::visibility_to_llvm(*visibility));
150157
llvm::set_linkage(lldecl, base::linkage_to_llvm(*linkage));

0 commit comments

Comments
 (0)