Prevent creating the same Instance::mono multiple times

This commit is contained in:
Guillaume Gomez 2024-04-19 23:09:57 +02:00
parent ad18fe08de
commit d34be935ec

View File

@ -246,7 +246,8 @@ impl<'ll> CodegenCx<'ll, '_> {
#[instrument(level = "debug", skip(self, llty))] #[instrument(level = "debug", skip(self, llty))]
pub(crate) fn get_static_inner(&self, def_id: DefId, llty: &'ll Type) -> &'ll Value { pub(crate) fn get_static_inner(&self, def_id: DefId, llty: &'ll Type) -> &'ll Value {
if let Some(&g) = self.instances.borrow().get(&Instance::mono(self.tcx, def_id)) { let instance = Instance::mono(self.tcx, def_id);
if let Some(&g) = self.instances.borrow().get(&instance) {
trace!("used cached value"); trace!("used cached value");
return g; return g;
} }
@ -259,7 +260,7 @@ impl<'ll> CodegenCx<'ll, '_> {
statics defined in the same CGU, but did not for `{def_id:?}`" statics defined in the same CGU, but did not for `{def_id:?}`"
); );
let sym = self.tcx.symbol_name(Instance::mono(self.tcx, def_id)).name; let sym = self.tcx.symbol_name(instance).name;
let fn_attrs = self.tcx.codegen_fn_attrs(def_id); let fn_attrs = self.tcx.codegen_fn_attrs(def_id);
debug!(?sym, ?fn_attrs); debug!(?sym, ?fn_attrs);
@ -349,7 +350,7 @@ impl<'ll> CodegenCx<'ll, '_> {
} }
} }
self.instances.borrow_mut().insert(Instance::mono(self.tcx, def_id), g); self.instances.borrow_mut().insert(instance, g);
g g
} }